diff --git a/.editorconfig b/.editorconfig index 6e87a00..2e8b0ef 100755 --- a/.editorconfig +++ b/.editorconfig @@ -3,8 +3,8 @@ root = true [*] charset = utf-8 -indent_style = space -indent_size = 2 +indent_style = tab +indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f18045b..72047ad 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,15 +15,28 @@ jobs: uses: actions/npm@master with: args: install + - name: Update environments file + env: + RVM_BASE_URL: ${{ secrets.RVM_BASE_URL }} + RVM_SERVER_URL: ${{ secrets.RVM_SERVER_URL }} + run: | + ENVIRONMENTS_FILE="$GITHUB_WORKSPACE/src/environments/environment.stage.ts" + sed -i "s#SERVER_URL#${RVM_SERVER_URL}#g" $ENVIRONMENTS_FILE + sed -i "s#SERVER_BASE_URL#${RVM_BASE_URL}#g" $ENVIRONMENTS_FILE + echo "$(cat $ENVIRONMENTS_FILE)" - name: Build the solution uses: actions/npm@master with: - args: "run-script build:prod" + args: "run-script build:stage" - name: Deploy the solution - uses: contention/rsync-deployments@master env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} RVM_MACHINE: ${{ secrets.RVM_MACHINE }} RVM_USERNAME: ${{ secrets.RVM_USERNAME }} - with: - args: -arv --omit-dir-times --include="dist/a/*" $RVM_USERNAME@$RVM_MACHINE:/var/www/html/ + run: | + DEPLOY_FOLDER="$GITHUB_WORKSPACE/dist/a/" + SSH_PATH="$HOME/.ssh" + mkdir "$SSH_PATH" + echo "$DEPLOY_KEY" > "$SSH_PATH/deploy_key" + chmod 600 "$SSH_PATH/deploy_key" + sh -c "rsync -rvz --omit-dir-times -e 'ssh -i $SSH_PATH/deploy_key -o StrictHostKeyChecking=no' $DEPLOY_FOLDER $RVM_USERNAME@$RVM_MACHINE:/var/www/html/" diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..63bc531 --- /dev/null +++ b/.htaccess @@ -0,0 +1,8 @@ + + RewriteEngine on + RewriteCond %{REQUEST_FILENAME} -s [OR] + RewriteCond %{REQUEST_FILENAME} -l [OR] + RewriteCond %{REQUEST_FILENAME} -d + RewriteRule ^.*$ - [NC,L] + RewriteRule ^(.*) index.html [NC,L] + diff --git a/.prettierrc b/.prettierrc index fd3819e..ce7afe1 100755 --- a/.prettierrc +++ b/.prettierrc @@ -1,7 +1,7 @@ { "singleQuote": true, - "useTabs": false, - "tabWidth": 2, + "useTabs": true, + "tabWidth": 4, "semi": true, "bracketSpacing": true } diff --git a/README.md b/README.md index 24d889f..6f3be44 100755 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ DSU (Departamentul pentru Situatii de Urgenta) needs a digital tool to manage th [Contributing](#contributing) | [Built with](#built-with) | [Repos and projects](#repos-and-projects) | [Deployment](#deployment) | [Feedback](#feedback) | [License](#license) | [About Code4Ro](#about-code4ro) + ## Contributing This project is built by amazing volunteers and you can be one of them! Here's a list of ways in [which you can contribute to this project](.github/CONTRIBUTING.MD). @@ -31,7 +32,7 @@ Angular ### Package managers -Yarn +NPM ### Database technology & provider @@ -59,3 +60,5 @@ This project is licensed under the MPL 2.0 License - see the [LICENSE](LICENSE) Started in 2016, Code for Romania is a civic tech NGO, official member of the Code for All network. We have a community of over 500 volunteers (developers, ux/ui, communications, data scientists, graphic designers, devops, it security and more) who work pro-bono for developing digital solutions to solve social problems. #techforsocialgood. If you want to learn more details about our projects [visit our site](https://www.code4.ro/en/) or if you want to talk to one of our staff members, please e-mail us at contact@code4.ro. Last, but not least, we rely on donations to ensure the infrastructure, logistics and management of our community that is widely spread across 11 timezones, coding for social change to make Romania and the world a better place. If you want to support us, [you can do it here](https://code4.ro/en/donate/). + + diff --git a/angular.json b/angular.json index b9ad51e..99e36a7 100755 --- a/angular.json +++ b/angular.json @@ -24,6 +24,7 @@ "src/manifest.json" ], "styles": [ + "node_modules/custom-select-dropdown/dist/assets/style.css", "src/styles.scss", "src/assets/scss/style.scss" ], @@ -60,6 +61,16 @@ "with": "src/environments/environment.prod.ts" } ] + }, + "stage": { + "sourceMap": true, + "aot": true, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.stage.ts" + } + ] } } }, @@ -70,6 +81,7 @@ }, "configurations": { "local": { + "port": 4300, "browserTarget": "rvm-client:build:local" }, "development": { @@ -77,6 +89,9 @@ }, "production": { "browserTarget": "rvm-client:build:production" + }, + "stage": { + "browserTarget": "rvm-client:build:stage" } } }, diff --git a/documentation/classes/EmailValidation.html b/documentation/classes/EmailValidation.html new file mode 100644 index 0000000..6f9def2 --- /dev/null +++ b/documentation/classes/EmailValidation.html @@ -0,0 +1,266 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + +
+
+

+

File

+

+

+ src/app/core/validators/email-validation.ts +

+ + + + + +
+

Index

+ + + + + + + + + + + + + + + +
+
Methods
+
+ +
+
+ + + +
+ +

+ Methods +

+ + + + + + + + + + + + + + + + + + + +
+ + + + Static + emailValidation + + + +
+ + emailValidation(abstractControl: AbstractControl) +
+ +
+

Email validator for reactive forms

+
+ +
+ Parameters : + + + + + + + + + + + + + + + + + + +
NameTypeOptional
abstractControl + AbstractControl + + No +
+
+
+
+
+ Returns : any + +
+
+ +
+
+
+ + + + + +
+ + +
+
import { AbstractControl } from '@angular/forms';
+
+export class EmailValidation {
+	/**
+	* Email validator for reactive forms
+	*/
+	static emailValidation(abstractControl: AbstractControl): any {
+		const email = abstractControl.value;
+		const reg = new RegExp(/^[a-z0-9\._%+-]+@[a-z0-9\.-]+\.[a-z]{2,4}$/);
+
+		if (reg.test(email)) {
+			return null;
+		}
+
+		return { 'email': 'Adresa de email introdusă nu este validă (ex: email@email.com).' };
+	}
+}
+
+
+
+ + + + + + + + +
+
+

result-matching ""

+
    +
    +
    +

    No results matching ""

    +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/LocationValidation.html b/documentation/classes/LocationValidation.html new file mode 100644 index 0000000..d5e06be --- /dev/null +++ b/documentation/classes/LocationValidation.html @@ -0,0 +1,265 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
    +
    + + +
    +
    + + + + + + + + + + + + + + + +
    +
    +

    +

    File

    +

    +

    + src/app/core/validators/location-validation.ts +

    + + + + + +
    +

    Index

    + + + + + + + + + + + + + + + +
    +
    Methods
    +
    + +
    +
    + + + +
    + +

    + Methods +

    + + + + + + + + + + + + + + + + + + + +
    + + + + Static + locationValidation + + + +
    + + locationValidation(abstractControl: AbstractControl) +
    + +
    +

    Location validator for reactive forms

    +
    + +
    + Parameters : + + + + + + + + + + + + + + + + + + +
    NameTypeOptional
    abstractControl + AbstractControl + + No +
    +
    +
    +
    +
    + Returns : any + +
    +
    + +
    +
    +
    + + + + + +
    + + +
    +
    import { AbstractControl } from '@angular/forms';
    +
    +export class LocationValidation {
    +	/**
    +	* Location validator for reactive forms
    +	*/
    +	static locationValidation(abstractControl: AbstractControl): any {
    +		const locationObject = abstractControl.value;
    +
    +		if ( locationObject.hasOwnProperty('_id')) {
    +			return null;
    +		}
    +
    +		return { 'obj' : true };
    +	}
    +}
    +
    +
    +
    + + + + + + + + +
    +
    +

    result-matching ""

    +
      +
      +
      +

      No results matching ""

      +
      +
      +
      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/PasswordValidation.html b/documentation/classes/PasswordValidation.html new file mode 100644 index 0000000..08e86f8 --- /dev/null +++ b/documentation/classes/PasswordValidation.html @@ -0,0 +1,379 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
      +
      + + +
      +
      + + + + + + + + + + + + + + + +
      +
      +

      +

      File

      +

      +

      + src/app/core/validators/password-validation.ts +

      + + + + + +
      +

      Index

      + + + + + + + + + + + + + + + +
      +
      Methods
      +
      + +
      +
      + + + +
      + +

      + Methods +

      + + + + + + + + + + + + + + + + + + + +
      + + + + Static + MatchPassword + + + +
      + + MatchPassword(abstractControl: AbstractControl) +
      + +
      +

      Match password validator for reactive forms

      +
      + +
      + Parameters : + + + + + + + + + + + + + + + + + + +
      NameTypeOptional
      abstractControl + AbstractControl + + No +
      +
      +
      +
      +
      + Returns : any + +
      +
      + +
      +
      + + + + + + + + + + + + + + + + + + + +
      + + + + Static + passwordValidation + + + +
      + + passwordValidation(abstractControl: AbstractControl) +
      + +
      +

      Password validator for reactive forms

      +
      + +
      + Parameters : + + + + + + + + + + + + + + + + + + +
      NameTypeOptional
      abstractControl + AbstractControl + + No +
      +
      +
      +
      +
      + Returns : any + +
      +
      + +
      +
      +
      + + + + + +
      + + +
      +
      import { AbstractControl } from '@angular/forms';
      +
      +export class PasswordValidation {
      +	/**
      +	* Match password validator for reactive forms
      +	*/
      +	static MatchPassword(abstractControl: AbstractControl): any {
      +		const password = abstractControl.get('password').value;
      +		const confirmPassword = abstractControl.get('confirmPassword').value;
      +
      +		if (password !== confirmPassword) {
      +			return {
      +				password: 'Parolele trebuie să corespundă și să conțină minim 8 caractere, o literă mare, un număr și un caracter special.'
      +			};
      +		}
      +
      +		return null;
      +	}
      +
      +	/**
      +	* Password validator for reactive forms
      +	*/
      +	static passwordValidation(abstractControl: AbstractControl): any {
      +		const number = new RegExp('\\d');
      +		const password = abstractControl.value;
      +		const uppercase = new RegExp('[A-Z]');
      +		const lowercase = new RegExp('[a-z]');
      +		const special = new RegExp(/[!#$%&\‘\(\)\*?@\[\]^_\+\.`\{\|\}~]/);
      +
      +		if (!number.test(password)) {
      +			return { password: 'Parolele trebuie să corespundă și să conțină minim 8 caractere, o literă mare, un număr și un caracter special.' };
      +		}
      +
      +		if (!uppercase.test(password)) {
      +			return { password: 'Parolele trebuie să corespundă și să conțină minim 8 caractere, o literă mare, un număr și un caracter special.' };
      +		}
      +
      +		if (!lowercase.test(password)) {
      +			return { password: 'Parolele trebuie să corespundă și să conțină minim 8 caractere, o literă mare, un număr și un caracter special.' };
      +		}
      +
      +		if (!special.test(password)) {
      +			return { password: 'Parolele trebuie să corespundă și să conțină minim 8 caractere, o literă mare, un număr și un caracter special.' };
      +		}
      +
      +		if (password.length < 8) {
      +			return { password: 'Parolele trebuie să corespundă și să conțină minim 8 caractere, o literă mare, un număr și un caracter special.' };
      +		}
      +
      +		return null;
      +	}
      +}
      +
      +
      +
      + + + + + + + + +
      +
      +

      result-matching ""

      +
        +
        +
        +

        No results matching ""

        +
        +
        +
        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/PhoneValidation.html b/documentation/classes/PhoneValidation.html new file mode 100644 index 0000000..4840b16 --- /dev/null +++ b/documentation/classes/PhoneValidation.html @@ -0,0 +1,272 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
        +
        + + +
        +
        + + + + + + + + + + + + + + + +
        +
        +

        +

        File

        +

        +

        + src/app/core/validators/phone-validation.ts +

        + + + + + +
        +

        Index

        + + + + + + + + + + + + + + + +
        +
        Methods
        +
        + +
        +
        + + + +
        + +

        + Methods +

        + + + + + + + + + + + + + + + + + + + +
        + + + + Static + phoneValidation + + + +
        + + phoneValidation(abstractControl: AbstractControl) +
        + +
        +

        Phone validator for reactive forms

        +
        + +
        + Parameters : + + + + + + + + + + + + + + + + + + +
        NameTypeOptional
        abstractControl + AbstractControl + + No +
        +
        +
        +
        +
        + Returns : any + +
        +
        + +
        +
        +
        + + + + + +
        + + +
        +
        import { AbstractControl } from '@angular/forms';
        +
        +export class PhoneValidation {
        +	/**
        +	* Phone validator for reactive forms
        +	*/
        +	static phoneValidation(abstractControl: AbstractControl): any {
        +		const phone = abstractControl.value;
        +		const reg = new RegExp('^[+]{0,1}[0-9]+$');
        +
        +		if ((reg.test(phone) && phone.length >= 10)) {
        +			if (phone.length === 12 && phone.indexOf('+') >= 0) {
        +				return null;
        +			}
        +
        +			if (phone.length === 10 && phone.indexOf('+') < 0) {
        +				return null;
        +			}
        +		}
        +
        +		return { 'phone': 'Numărul de telefon introdus nu este valid (ex: +40722446688, 0733557799).' };
        +	}
        +}
        +
        +
        +
        + + + + + + + + +
        +
        +

        result-matching ""

        +
          +
          +
          +

          No results matching ""

          +
          +
          +
          + +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/SsnValidation.html b/documentation/classes/SsnValidation.html new file mode 100644 index 0000000..158483e --- /dev/null +++ b/documentation/classes/SsnValidation.html @@ -0,0 +1,277 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
          +
          + + +
          +
          + + + + + + + + + + + + + + + +
          +
          +

          +

          File

          +

          +

          + src/app/core/validators/ssn-validation.ts +

          + + + + + +
          +

          Index

          + + + + + + + + + + + + + + + +
          +
          Methods
          +
          + +
          +
          + + + +
          + +

          + Methods +

          + + + + + + + + + + + + + + + + + + + +
          + + + + Static + ssnValidation + + + +
          + + ssnValidation(abstractControl: AbstractControl) +
          + +
          +

          CNP validator for reactive forms

          +
          + +
          + Parameters : + + + + + + + + + + + + + + + + + + +
          NameTypeOptional
          abstractControl + AbstractControl + + No +
          +
          +
          +
          +
          + Returns : any + +
          +
          + +
          +
          +
          + + + + + +
          + + +
          +
          import { AbstractControl } from '@angular/forms';
          +import { map } from 'rxjs/operators';
          +
          +export class SsnValidation {
          +	/**
          +	* CNP validator for reactive forms
          +	*/
          +	static ssnValidation(abstractControl: AbstractControl): any {
          +		const ssn = parseInt(abstractControl.value, 10) || 0;
          +
          +		if (ssn.toString().length === 13) {
          +			const cnp = Array.from(String(ssn), Number);
          +			const coefs = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];
          +			const idx = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
          +			const s = idx.map((x) => coefs[x] * cnp[x]);
          +			const res = s.reduce((a, b) => a + b, 0) % 11;
          +
          +			if ((res < 10 && res === cnp[12]) || (res === 10 && cnp[12] === 1) ) {
          +				return null;
          +			} else {
          +				return {ssn: 'CNP-ul introdus nu este valid.'};
          +			}
          +
          +		} else {
          +			return {ssn: 'CNP-ul introdus nu este valid.'};
          +		}
          +	}
          +}
          +
          +
          +
          + + + + + + + + +
          +
          +

          result-matching ""

          +
            +
            +
            +

            No results matching ""

            +
            +
            +
            + +
            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/WebsiteValidation.html b/documentation/classes/WebsiteValidation.html new file mode 100644 index 0000000..5bd8704 --- /dev/null +++ b/documentation/classes/WebsiteValidation.html @@ -0,0 +1,270 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
            +
            + + +
            +
            + + + + + + + + + + + + + + + +
            +
            +

            +

            File

            +

            +

            + src/app/core/validators/website-validation.ts +

            + + + + + +
            +

            Index

            + + + + + + + + + + + + + + + +
            +
            Methods
            +
            + +
            +
            + + + +
            + +

            + Methods +

            + + + + + + + + + + + + + + + + + + + +
            + + + + Static + websiteValidation + + + +
            + + websiteValidation(abstractControl: AbstractControl) +
            + +
            +

            Website validator for reactive forms

            +
            + +
            + Parameters : + + + + + + + + + + + + + + + + + + +
            NameTypeOptional
            abstractControl + AbstractControl + + No +
            +
            +
            +
            +
            + Returns : any + +
            +
            + +
            +
            +
            + + + + + +
            + + +
            +
            import { AbstractControl } from '@angular/forms';
            +
            +export class WebsiteValidation {
            +	/**
            +	* Website validator for reactive forms
            +	*/
            +	static websiteValidation(abstractControl: AbstractControl): any {
            +		const website = abstractControl.value;
            +		const reg = new RegExp('^(https?:\\/\\/)?' + // protocol
            +		'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|' + // domain name
            +		'((\\d{1,3}\\.){3}\\d{1,3}))' + // ip (v4) address
            +		'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port
            +		'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
            +		'(\\#[-a-z\\d_]*)?$', 'i');
            +		if (reg.test(website)) {
            +			return null;
            +		}
            +
            +		return { 'website': 'Adresa paginii web introdusă nu este validă (ex: www.website.com).' };
            +	}
            +}
            +
            +
            +
            + + + + + + + + +
            +
            +

            result-matching ""

            +
              +
              +
              +

              No results matching ""

              +
              +
              +
              + +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/AddResourceComponent.html b/documentation/components/AddResourceComponent.html new file mode 100644 index 0000000..121079c --- /dev/null +++ b/documentation/components/AddResourceComponent.html @@ -0,0 +1,2379 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
              +
              + + +
              +
              + + + + + + + + +
              +

              +

              File

              +

              +

              + src/app/pages/resources/resources/components/add-resource/add-resource.component.ts +

              + + + +

              +

              Implements

              +

              +

              + OnInit +

              + + +
              +

              Metadata

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              selectorapp-add-resource
              styleUrls./add-resource.component.scss
              templateUrl./add-resource.component.html
              +
              + +
              +

              Index

              + + + + + + + + + + + + + + + + + + + + + +
              +
              Properties
              +
              + +
              +
              Methods
              +
              + +
              +
              + +
              +

              Constructor

              + + + + + + + + + + + + + +
              +constructor(resourcesService: ResourcesService, route: ActivatedRoute, location: Location, router: Router, citiesandCounties: CitiesCountiesService, fb: FormBuilder, utilService: UtilService, filterService: FiltersService, authService: AuthenticationService) +
              + +
              +
              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              NameTypeOptional
              resourcesService + ResourcesService + + No +
              route + ActivatedRoute + + No +
              location + Location + + No +
              router + Router + + No +
              citiesandCounties + CitiesCountiesService + + No +
              fb + FormBuilder + + No +
              utilService + UtilService + + No +
              filterService + FiltersService + + No +
              authService + AuthenticationService + + No +
              +
              +
              +
              + + + + + +
              + +

              + Methods +

              + + + + + + + + + + + + + + + + + + + +
              + + + + countykey + + + +
              +countykey(event: any) +
              + +
              +

              trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection

              +
              + +
              + Parameters : + + + + + + + + + + + + + + + + + + + + +
              NameTypeOptionalDescription
              event + any + + No + +

              to be verified for which key has been pressed

              + +
              +
              +
              +
              +
              + Returns : void + +
              +
              + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + + ngOnInit + + + +
              +ngOnInit() +
              + +
              + +
              + Returns : void + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + + onSubmit + + + +
              +onSubmit() +
              + +
              +

              Process form values and send data to server. If success close page

              +
              + +
              + Returns : void + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + + selectedCategory + + + +
              +selectedCategory() +
              + +
              +

              trigger for select category from category typeahead. will unlock the subcategory field

              +
              + +
              + Returns : void + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + + selectedCity + + + +
              +selectedCity(val: literal type) +
              + +
              +

              trigger for select city from city typeahead

              +
              + +
              + Parameters : + + + + + + + + + + + + + + + + + + + + +
              NameTypeOptionalDescription
              val + literal type + + No + +

              result object from typeahead that needs to be stored

              + +
              +
              +
              +
              +
              + Returns : void + +
              +
              + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + + selectedCounty + + + +
              +selectedCounty(val: any) +
              + +
              +

              trigger for select county from county typeahead. will unlock the city field

              +
              + +
              + Parameters : + + + + + + + + + + + + + + + + + + + + +
              NameTypeOptionalDescription
              val + any + + No + +

              result object from typeahead that needs to be stored

              + +
              +
              +
              +
              +
              + Returns : void + +
              +
              + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + + selectedOrganisation + + + +
              +selectedOrganisation(val: any) +
              + +
              +

              trigger for select organisation from organisation typeahead.

              +
              + +
              + Parameters : + + + + + + + + + + + + + + + + + + + + +
              NameTypeOptionalDescription
              val + any + + No + +

              result object from typeahead that needs to be stored

              + +
              +
              +
              +
              +
              + Returns : void + +
              +
              + +
              +
              +
              +
              + +

              + Properties +

              + + + + + + + + + + + + + + +
              + + + + Public + authService + + +
              + Type : AuthenticationService + +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + categories + + +
              + Type : any[] + +
              + Default value : [] +
              + +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + cities + + +
              + Type : any[] + +
              + Default value : [] +
              + +
              +

              list of items to select from.

              +
              +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + cityPlaceholder + + +
              + Type : string + +
              + Default value : 'Selectați mai întâi județul' +
              + +
              +

              placeholders for HTML

              +
              +
              + + + + + + + + + + + + + + +
              + + + + click$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + click1$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + click2$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + click3$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + click4$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + edit + + +
              + Default value : false +
              + +
              +

              flag -> if user is editing then method is PUT, else POST

              +
              +
              + + + + + + + + + + + + + + +
              + + + + focus$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + focus1$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + focus2$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + focus3$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + +
              + + + + focus4$ + + +
              + Default value : new Subject<string>() +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + form + + +
              + Type : FormGroup + +
              + +
              +

              form that holds data

              +
              +
              + + + + + + + + + + + + + + + + + +
              + + + + formatter + + +
              + Default value : () => {...} +
              + +
              +

              formater to display only name from object

              +
              +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + instance + + +
              + Type : NgbTypeahead + +
              + Decorators : +
              + + @ViewChild('instance', {static: true})
              +
              +
              + +
              +

              references to NGBTypeahead for opening on focus or click

              +
              +
              + + + + + + + + + + + + + + + + + +
              + + + + instance1 + + +
              + Type : NgbTypeahead + +
              + Decorators : +
              + + @ViewChild('instance', {static: true})
              +
              +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + instance2 + + +
              + Type : NgbTypeahead + +
              + Decorators : +
              + + @ViewChild('instance', {static: true})
              +
              +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + instance3 + + +
              + Type : NgbTypeahead + +
              + Decorators : +
              + + @ViewChild('instance', {static: true})
              +
              +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + instance4 + + +
              + Type : NgbTypeahead + +
              + Decorators : +
              + + @ViewChild('instance', {static: true})
              +
              +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + loading + + +
              + Default value : false +
              + +
              +

              flag -> if information is beeing loaded show loader elements in frontend

              +
              +
              + + + + + + + + + + + + + + +
              + + + + loadingCities + + +
              + Default value : false +
              + +
              + + + + + + + + + + + + + + +
              + + + + res + + +
              + Type : any + +
              + +
              + + + + + + + + + + + + + + + + + +
              + + + + resourcePlaceholder + + +
              + Type : string + +
              + Default value : 'Selectați mai întâi categoria' +
              + +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + searchcity + + +
              + Default value : () => {...} +
              + +
              +

              trigger for county typeahead. registers typing, focus, and click and searches the backend

              +
              +
              +
              + Parameters : + + + + + + + + + + + + + +
              NameDescription
              text +

              observable event with the filter text

              +
              +
              +
              +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + searchcounty + + +
              + Default value : () => {...} +
              + +
              +

              trigger for county typeahead. registers typing, focus, and click and searches the backend

              +
              +
              +
              + Parameters : + + + + + + + + + + + + + +
              NameDescription
              text +

              observable event with the filter text

              +
              +
              +
              +
              + + + + + + + + + + + + + + + + + + + + +
              + + + + searchOrganisation + + +
              + Default value : () => {...} +
              + +
              +

              trigger for organisation typeahead. registers typing, focus, and click and searches the backend

              +
              +
              +
              + Parameters : + + + + + + + + + + + + + +
              NameDescription
              text +

              observable event with the filter text

              +
              +
              +
              +
              + + + + + + + + + + + + + + + + + +
              + + + + subCategories + + +
              + Type : any[] + +
              + Default value : [] +
              + +
              +
              + +
              + + +
              +
              import { Component, OnInit, Input, ViewChild } from '@angular/core';
              +import {
              +	FormGroup,
              +	FormControl,
              +	Validators,
              +	FormBuilder
              +} from '@angular/forms';
              +import { Router, ActivatedRoute } from '@angular/router';
              +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
              +import { Subject } from 'rxjs/internal/Subject';
              +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
              +import { Observable } from 'rxjs/internal/Observable';
              +import {
              +	debounceTime,
              +	distinctUntilChanged,
              +	filter,
              +	map,
              +	switchMap
              +} from 'rxjs/operators';
              +import { merge } from 'rxjs';
              +import { ResourcesService } from '@app/pages/resources/resources.service';
              +import { AuthenticationService, FiltersService, UtilService } from '@app/core';
              +import { Location } from '@angular/common';
              +import { LocationValidation } from '@app/core/validators/location-validation';
              +
              +@Component({
              +	selector: 'app-add-resource',
              +	templateUrl: './add-resource.component.html',
              +	styleUrls: ['./add-resource.component.scss']
              +})
              +export class AddResourceComponent implements OnInit {
              +	/**
              +	* form that holds data
              +	*/
              +	form: FormGroup;
              +	/**
              +	* flag -> if user is editing then method is PUT, else POST
              +	*/
              +	edit = false;
              +	res: any;
              +	/**
              +	*  list of items to select from.
              +	*/
              +	cities: any[] = [];
              +	categories: any[] = [];
              +	subCategories: any[] = [];
              +	/**
              +	* flag -> if information is beeing loaded show loader elements in frontend
              +	*/
              +	loading = false;
              +	loadingCities = false;
              +
              +	/**
              +	* placeholders for HTML
              +	*/
              +	cityPlaceholder = 'Selectați mai întâi județul';
              +	resourcePlaceholder = 'Selectați mai întâi categoria';
              +
              +	/**
              +	* references to NGBTypeahead for opening on focus or click
              +	*/
              +	@ViewChild('instance', { static: true }) instance: NgbTypeahead;
              +	focus$ = new Subject<string>();
              +	click$ = new Subject<string>();
              +	@ViewChild('instance', { static: true }) instance1: NgbTypeahead;
              +	focus1$ = new Subject<string>();
              +	click1$ = new Subject<string>();
              +	@ViewChild('instance', { static: true }) instance2: NgbTypeahead;
              +	focus2$ = new Subject<string>();
              +	click2$ = new Subject<string>();
              +	@ViewChild('instance', { static: true }) instance3: NgbTypeahead;
              +	focus3$ = new Subject<string>();
              +	click3$ = new Subject<string>();
              +	@ViewChild('instance', { static: true }) instance4: NgbTypeahead;
              +	focus4$ = new Subject<string>();
              +	click4$ = new Subject<string>();
              +
              +	constructor(private resourcesService: ResourcesService,
              +		private route: ActivatedRoute,
              +		private location: Location, private router: Router,
              +		private citiesandCounties: CitiesCountiesService,
              +		private fb: FormBuilder, private utilService: UtilService,
              +		private filterService: FiltersService,
              +		public authService: AuthenticationService) {}
              +
              +	ngOnInit() {
              +
              +		const navigation = this.router.getCurrentNavigation();
              +		let fixedOrg: any = null;
              +		this.filterService.getSubCategories('0', '').subscribe((elem: any) => {
              +			this.categories = elem;
              +		});
              +		if (navigation && navigation.extras && navigation.extras.state) {
              +			fixedOrg = navigation.extras.state.ngo;
              +		}
              +
              +		this.form = this.fb.group({
              +			subCategory: [{value: '', disabled: true}],
              +			name: ['', Validators.required],
              +			address: '',
              +			resource_type: ['', Validators.required],
              +			category:  ['', Validators.required],
              +			organisation: this.authService.is('NGO') ?
              +								[{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id},
              +									disabled: true }, Validators.required]
              +								:	fixedOrg ?
              +									[{value: {name: fixedOrg.name, _id: fixedOrg._id},
              +										disabled: false }, Validators.required]
              +										:	[{value: '' , disabled: false }, Validators.required],
              +			quantity: ['', [Validators.required, Validators.min(1)]],
              +			city: [{ value: '', disabled: true }, Validators.required],
              +			county: ['', Validators.required],
              +			comments: ''
              +		});
              +	}
              +/**
              +	 * formater to display only name from object
              +	 */
              +	formatter = (result: { name: string }) => result.name;
              +	/**
              +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
              +	 * @param {Observable} text observable event with the filter text
              +	 */
              +	searchcounty = (text$: Observable<string>) => {
              +
              +		const debouncedText$ = text$.pipe(
              +			debounceTime(200),
              +			distinctUntilChanged()
              +		);
              +		const clicksWithClosedPopup$ = this.click1$.pipe(
              +			filter(() => !this.instance1.isPopupOpen())
              +		);
              +		const inputFocus$ = this.focus1$;
              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
              +			switchMap((term: string) => this.citiesandCounties.getCounties(term))
              +		);
              +	}
              +/**
              +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
              +	 * @param {Observable} text observable event with the filter text
              +	 */
              +	searchcity = (text$: Observable<string>) => {
              +		const debouncedText$ = text$.pipe(
              +			debounceTime(200),
              +			distinctUntilChanged()
              +		);
              +		const clicksWithClosedPopup$ = this.click2$.pipe(
              +			filter(() => !this.instance2.isPopupOpen())
              +		);
              +		const inputFocus$ = this.focus2$;
              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
              +			map((term: string) => {
              +				if (term === '') {
              +					return this.cities;
              +				} else {
              +					return this.cities.filter(v => {
              +						const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase();
              +						return aux.indexOf(term.toLowerCase()) > -1;
              +					}).slice(0, 20);
              +				}
              +			}));
              +	}
              +	/**
              +	 * trigger for organisation typeahead. registers typing, focus, and click and searches the backend
              +	 * @param {Observable} text observable event with the filter text
              +	 */
              +	searchOrganisation = (text$: Observable<string>) => {
              +		const debouncedText$ = text$.pipe(
              +			debounceTime(200),
              +			distinctUntilChanged()
              +		);
              +
              +		const clicksWithClosedPopup$ = this.click$.pipe(
              +			filter(() => !this.instance.isPopupOpen())
              +		);
              +
              +		const inputFocus$ = this.focus$;
              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
              +			switchMap((term: string) => {
              +				return this.filterService.getorganisationbyName(term);
              +		}));
              +	}
              +/**
              +	 * trigger for select county from county typeahead. will unlock the city field
              +	 * @param {any} val result object from typeahead that needs to be stored
              +	 */
              +	selectedCounty(val: any) {
              +		this.form.controls.county.markAsTouched();
              +		if (val.item && val.item._id) {
              +			this.form.patchValue({county: val.item});
              +			this.loadingCities = true;
              +			this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => {
              +				this.cities = res;
              +				this.loadingCities = false;
              +				this.form.controls.city.enable();
              +			});
              +			this.cityPlaceholder = 'Alegeți Orașul';
              +		} else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) {
              +			this.form.patchValue({county: '', city: ''});
              +		}
              +	}
              +/**
              +	 * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection
              +	 * @param {any} event to be verified for which key has been pressed
              +	*/
              +	countykey(event: any) {
              +		this.form.controls.county.markAsTouched();
              +		if (event.code !== 'Enter') {
              +			this.cities = [];
              +			this.form.controls.city.disable();
              +			this.form.controls.city.reset('');
              +			this.cityPlaceholder = 'Selectați mai întâi județul';
              +		}
              +	}
              +/**
              +	 * trigger for select city from city typeahead
              +	 * @param {any} val result object from typeahead that needs to be stored
              +	 */
              +	selectedCity(val: { item: any }) {
              +		this.form.controls.city.markAsTouched();
              +		this.form.patchValue({city: val.item});
              +	}
              +	/**
              +	 * trigger for select organisation from organisation typeahead.
              +	 * @param {any} val result object from typeahead that needs to be stored
              +	 */
              +	selectedOrganisation(val: any) {
              +		this.form.controls.organisation.markAsTouched();
              +		if (val.item && val.item._id) {
              +			this.form.patchValue({organisation: val.item});
              +		} else if (this.form.controls.organisation.value.name && val !== this.form.controls.organisation.value.name) {
              +			this.form.patchValue({organisation: ''});
              +		}
              +	}
              +	/**
              +	 * trigger for select category from category typeahead. will unlock the subcategory field
              +	 */
              +	selectedCategory() {
              +		this.form.controls.category.markAsTouched();
              +		if (this.form.value.category) {
              +			this.filterService.getSubCategories(this.form.value.category, '').subscribe(resp => {
              +				if (resp.length > 0) {
              +					this.form.controls.subCategory.enable();
              +					this.resourcePlaceholder = 'Alegeți Categoria';
              +					this.subCategories = resp;
              +				} else {
              +					this.form.controls.subCategory.disable();
              +					this.form.controls.subCategory.reset('');
              +					this.resourcePlaceholder = 'Selectați mai întâi categoria';
              +				}
              +			});
              +		}
              +	}
              +
              +
              +	/**
              +	 * Process form values and send data to server. If success close page
              +	 */
              +	onSubmit() {
              +		this.loading = true;
              +		const resource = this.form.value;
              +		resource.organisation_id = this.form.controls['organisation'].value._id;
              +		resource.county = resource.county._id;
              +		resource.city = resource.city._id;
              +		resource.categories = [resource.category];
              +		if (resource.subCategory) {
              +			resource.categories.push(resource.subCategory);
              +		}
              +		this.resourcesService
              +			.addResource(resource)
              +			.subscribe((element: any) => {
              +				this.loading = false;
              +				this.location.back();
              +			}, () => {
              +				this.loading = false;
              +		});
              +	}
              +
              +}
              +
              +
              + +
              +
              <div class="container mt-5">
              +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
              +		<app-back-button></app-back-button>
              +	</nav>
              +	<p class="page-title">Adaugă o resursă:</p>
              +	<div class="note col-md-8">
              +		<span>
              +			Vrei să adaugi mai multe resurse simultan?
              +			<a [routerLink]="['../import']">Importă o listă</a>.
              +		</span>
              +	</div>
              +	<form [formGroup]="form" (ngSubmit)="onSubmit()">
              +		<div class="row">
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Nume resursă *</label>
              +					<input formControlName="name"
              +						[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }"
              +						class="form-control" type="text" />
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Categorie *</label>
              +					<select class="form-control" (change)="selectedCategory()" formControlName="category">
              +						<option *ngFor="let category of categories; let i=index" [value]="category._id">
              +							{{category.name}}</option>
              +					</select>
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Subcategorie</label>
              +					<select class="form-control" formControlName="subCategory">
              +						<option *ngFor="let subCat of subCategories; let i=index" [value]="subCat._id">
              +							{{subCat.name}}
              +						</option>
              +					</select>
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Cantitate *</label>
              +					<input formControlName="quantity"
              +						[ngClass]="{ 'error': form.controls.quantity.invalid && form.controls.quantity.touched }"
              +						class="form-control" type="number" />
              +					<span class="error-message"
              +						*ngIf="form.controls.quantity.invalid && form.controls.quantity.touched">* Cantitatea trebuie să
              +						fie mai mare decât 0.</span>
              +				</div>
              +			</div>
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Tip *</label>
              +					<select class="form-control" formControlName="resource_type"
              +						[ngClass]="{ 'error': form.controls.resource_type.invalid && form.controls.resource_type.touched }"
              +						class="form-control">
              +						<option>Perisabil</option>
              +						<option>Neperisabil</option>
              +					</select>
              +					<span class="error-message"
              +						*ngIf="form.controls.resource_type.invalid && form.controls.resource_type.touched">* Trebuie sa
              +						alegeți un tip.</span>
              +				</div>
              +			</div>
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Organizație *</label>
              +					<input formControlName="organisation" type="text"
              +						[ngClass]="{ 'error': form.controls.organisation.invalid && form.controls.organisation.touched }"
              +						(selectItem)="selectedOrganisation($event)" class="form-control"
              +						[ngbTypeahead]="searchOrganisation" [resultFormatter]="formatter" [inputFormatter]="formatter"
              +						(focus)="focus$.next($event.target.value)" (click)="click$.next($event.target.value)"
              +						#instance="ngbTypeahead" />
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Județ *</label>
              +					<input type="text" formControlName="county" (selectItem)="selectedCounty($event)"
              +						(blur)="selectedCounty($event.target.value)" class="form-control" [ngbTypeahead]="searchcounty"
              +						(focus)="focus1$.next($event.target.value)" [inputFormatter]="formatter"
              +						[resultFormatter]="formatter" (keyup)="countykey($event)"
              +						[ngClass]="{ 'error': form.controls.county.invalid && form.controls.county.touched}"
              +						(click)="click1$.next($event.target.value)" #instance="ngbTypeahead" />
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Localitate *</label>
              +					<input type="text" formControlName="city" class="form-control" [ngbTypeahead]="searchcity"
              +						(selectItem)="selectedCity($event)"
              +						[ngClass]="{ 'error': form.controls.city.invalid && form.controls.city.touched }"
              +						placeholder="{{ cityPlaceholder }}" autocomplete="new-password" [inputFormatter]="formatter"
              +						[resultFormatter]="formatter" (focus)="focus2$.next($event.target.value)"
              +						(click)="click2$.next($event.target.value)" #instance="ngbTypeahead" />
              +					<div class="spinner-border text-grey input-loader" role="status" *ngIf="loadingCities">
              +						<span class="sr-only">Loading...</span>
              +					</div>
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-4 col-sm-12">
              +				<div class="form-group">
              +					<label>Adresă</label>
              +					<input formControlName="address" class="form-control"
              +						[ngClass]="{ 'error': form.controls.address.invalid && form.controls.address.touched }"
              +						type="text" />
              +				</div>
              +			</div>
              +
              +			<div class="mt-4 col-md-12">
              +				<div class="form-group">
              +					<label>Comentarii</label>
              +					<textarea rows="3" formControlName="comments"
              +						[ngClass]="{ 'error': form.controls.comments.invalid && form.controls.comments.touched }"
              +						class="form-control" type="text"></textarea>
              +				</div>
              +			</div>
              +		</div>
              +		<button *ngIf="!loading" [disabled]="form.invalid"
              +			class="btn btn-info btn-rounded waves-effect waves-light mt-5 float-right" type="submit">
              +			Adaugă
              +		</button>
              +		<div class="spinner-border text-green float-right" role="status" *ngIf="loading">
              +			<span class="sr-only">Loading...</span>
              +		</div>
              +	</form>
              +</div>
              +
              + +
              +

              + ./add-resource.component.scss +

              +
              +
              + +
              +
              +
              +
              + Legend +
              +
              +
              Html element +
              +
              +
              Component +
              +
              +
              Html element with directive +
              +
              +
              + + +
              + + + + + + + + + + + + + + + + + + + + + +
              +
              +

              result-matching ""

              +
                +
                +
                +

                No results matching ""

                +
                +
                +
                + +
                +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/AddUserComponent.html b/documentation/components/AddUserComponent.html new file mode 100644 index 0000000..353cdd2 --- /dev/null +++ b/documentation/components/AddUserComponent.html @@ -0,0 +1,1438 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                +
                + + +
                +
                + + + + + + + + +
                +

                +

                File

                +

                +

                + src/app/pages/users/users/components/add-user/add-user.component.ts +

                + + + +

                +

                Implements

                +

                +

                + OnInit +

                + + +
                +

                Metadata

                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                selectorapp-add-user
                styleUrls./add-user.component.scss
                templateUrl./add-user.component.html
                +
                + +
                +

                Index

                + + + + + + + + + + + + + + + + + + + + + +
                +
                Properties
                +
                + +
                +
                Methods
                +
                + +
                +
                + +
                +

                Constructor

                + + + + + + + + + + + + + +
                +constructor(fb: FormBuilder, router: Router, filterService: FiltersService, route: ActivatedRoute, authService: AuthenticationService, usersService: UsersService, location: Location) +
                + +
                +
                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                NameTypeOptional
                fb + FormBuilder + + No +
                router + Router + + No +
                filterService + FiltersService + + No +
                route + ActivatedRoute + + No +
                authService + AuthenticationService + + No +
                usersService + UsersService + + No +
                location + Location + + No +
                +
                +
                +
                + + + + + +
                + +

                + Methods +

                + + + + + + + + + + + + + + + + + + + +
                + + + + ngOnInit + + + +
                +ngOnInit() +
                + +
                + +
                + Returns : void + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + + onSubmit + + + +
                +onSubmit() +
                + +
                +

                Process form values and send data to server. If success close page

                +
                + +
                + Returns : void + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + + selectedInstitut + + + +
                +selectedInstitut(val: literal type) +
                + +
                +

                trigger for select county from county typeahead. will unlock the city field

                +
                + +
                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                NameTypeOptionalDescription
                val + literal type + + No + +

                result object from typeahead that needs to be stored

                + +
                +
                +
                +
                +
                + Returns : void + +
                +
                + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + + setDuplicateEmailError + + + +
                +setDuplicateEmailError() +
                + +
                +

                Set error if email already exists

                +
                + +
                + Returns : void + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + + setInstitutions + + + +
                +setInstitutions() +
                + +
                +

                set institution form if needed

                +
                + +
                + Returns : void + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + + setOrganisations + + + +
                +setOrganisations() +
                + +
                +

                set organisation form if needed

                +
                + +
                + Returns : void + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + + setPageByRoles + + + +
                +setPageByRoles() +
                + +
                +

                call function to complete form depending on the role of the user

                +
                + +
                + Returns : void + +
                +
                +
                +
                + +

                + Properties +

                + + + + + + + + + + + + + + +
                + + + + Public + authService + + +
                + Type : AuthenticationService + +
                + +
                + + + + + + + + + + + + + + +
                + + + + click$ + + +
                + Default value : new Subject<string>() +
                + +
                + + + + + + + + + + + + + + + + + +
                + + + + displayInstitution + + +
                + Default value : false +
                + +
                +

                FLAG form HTML to display form according to role

                +
                +
                + + + + + + + + + + + + + + +
                + + + + displayOrganisation + + +
                + Default value : false +
                + +
                + + + + + + + + + + + + + + +
                + + + + focus$ + + +
                + Default value : new Subject<string>() +
                + +
                + + + + + + + + + + + + + + + + + +
                + + + + form + + +
                + Type : FormGroup + +
                + +
                +

                form that holds data

                +
                +
                + + + + + + + + + + + + + + + + + + + + +
                + + + + instance + + +
                + Type : NgbTypeahead + +
                + Decorators : +
                + + @ViewChild('instance', {static: true})
                +
                +
                + +
                +

                references to NGBTypeahead for opening on focus or click

                +
                +
                + + + + + + + + + + + + + + + + + + + + +
                + + + + institutions + + +
                + Type : any[] + +
                + Default value : [] +
                + +
                +

                list of institutions or organisation to pe parsed

                +
                +
                + + + + + + + + + + + + + + + + + +
                + + + + loading + + +
                + Default value : false +
                + +
                +

                flag for HTML to display loading animation

                +
                +
                + + + + + + + + + + + + + + + + + +
                + + + + organisations + + +
                + Type : any[] + +
                + Default value : [] +
                + +
                + + + + + + + + + + + + + + + + + +
                + + + + role + + +
                + Type : string + +
                + +
                +

                role of user that will be created

                +
                +
                + + + + + + + + + + + + + + +
                + + + + Public + route + + +
                + Type : ActivatedRoute + +
                + +
                + + + + + + + + + + + + + + + + + + + + +
                + + + + user + + +
                + Type : any + +
                + Default value : {} +
                + +
                +

                user data

                +
                +
                +
                + +
                + + +
                +
                import { Component, OnInit, ViewChild } from '@angular/core';
                +import { FormBuilder, Validators, FormGroup } from '@angular/forms';
                +import { Router, ActivatedRoute } from '@angular/router';
                +import { UsersService } from '@app/core/service/users.service';
                +import { EmailValidation } from '@app/core/validators/email-validation';
                +import { PhoneValidation } from '@app/core/validators/phone-validation';
                +import { AuthenticationService, FiltersService } from '@app/core';
                +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
                +import { Subject } from 'rxjs';
                +import { Location } from '@angular/common';
                +
                +@Component({
                +	selector: 'app-add-user',
                +	templateUrl: './add-user.component.html',
                +	styleUrls: ['./add-user.component.scss']
                +})
                +
                +export class AddUserComponent implements OnInit {
                +	/**
                +	* form that holds data
                +	*/
                +	form: FormGroup;
                +	/**
                +	* role of user that will be created
                +	*/
                +	role: string;
                +	/**
                +	* user data
                +	*/
                +	user: any = {};
                +	/**
                +	 * flag for HTML to display loading animation
                +	 */
                +	loading = false;
                +	/**
                +	* references to NGBTypeahead for opening on focus or click
                +	*/
                +	@ViewChild('instance', { static: true }) instance: NgbTypeahead;
                +	focus$ = new Subject<string>();
                +	click$ = new Subject<string>();
                +	/**
                +	* list of institutions or organisation to pe parsed
                +	*/
                +	institutions: any[] = [];
                +	organisations: any[] = [];
                +	/**
                +	* FLAG form HTML to display form according to role
                +	*/
                +	displayInstitution = false;
                +	displayOrganisation = false;
                +
                +	constructor(private fb: FormBuilder,
                +		private router: Router,
                +		private filterService: FiltersService,
                +		public route: ActivatedRoute,
                +		public authService: AuthenticationService,
                +		private usersService: UsersService,
                +		private location: Location) { }
                +
                +	ngOnInit() {
                +		this.form = this.fb.group({
                +			name: ['', Validators.required],
                +			email: ['', [ Validators.required, EmailValidation.emailValidation ]],
                +			phone: ['', [ Validators.required, PhoneValidation.phoneValidation ]],
                +			institution: [''],
                +			organisation: ['']
                +		});
                +
                +		if (this.route.snapshot.paramMap.get('role')) {
                +			this.role = this.route.snapshot.paramMap.get('role');
                +			this.setPageByRoles();
                +		}
                +	}
                +/**
                +	 * call function to complete form depending on the role of the user
                +	 */
                +	setPageByRoles() {
                +		if ((this.role === '0' || this.role === '1') && this.authService.is('DSU')) {
                +			this.setInstitutions();
                +		}
                +
                +		if (this.role === '2' && this.authService.is('DSU')) {
                +			this.setOrganisations();
                +		}
                +	}
                +/**
                +	 * set organisation form if needed
                +	 */
                +	setOrganisations() {
                +		this.filterService.getorganisationbyName().subscribe(response => {
                +			this.organisations = response;
                +		});
                +
                +		this.displayOrganisation = true;
                +		this.form.controls['organisation'].setValidators(Validators.required);
                +	}
                +/**
                +	 * set institution form if needed
                +	 *
                +	 */
                +	setInstitutions() {
                +		this.filterService.getInstitutionFilters().subscribe(response => {
                +			this.institutions = response;
                +		});
                +
                +		this.displayInstitution = true;
                +		this.form.controls['institution'].setValidators(Validators.required);
                +	}
                +
                +	/**
                +	 * trigger for select county from county typeahead. will unlock the city field
                +	 * @param {any} val result object from typeahead that needs to be stored
                +	 */
                +	selectedInstitut(val: { item: any }) {
                +		this.form.controls.institution.markAsTouched();
                +		this.form.patchValue({institution: val.item});
                +	}
                +
                +	/**
                +	 * Process form values and send data to server. If success close page
                +	 */
                +	onSubmit() {
                +		this.loading = true;
                +		this.user.name = this.form.value.name;
                +		this.user.email = this.form.value.email;
                +		this.user.phone = this.form.value.phone;
                +
                +		if (this.role) {
                +			this.user.role = this.role;
                +
                +			if (this.role === '1' || this.role === '0') {
                +				this.user.institution = this.form.value.institution;
                +			}
                +
                +			if (this.role === '2') {
                +				this.user.organisation = this.form.value.organisation;
                +			}
                +		}
                +
                +		this.usersService.addUser(this.user).subscribe((response) => {
                +			this.loading = false;
                +			this.location.back();
                +		}, () => {
                +			this.setDuplicateEmailError();
                +			this.loading = false;
                +		});
                +	}
                +	/**
                +	 * Set error if email already exists
                +	 */
                +
                +	setDuplicateEmailError() {
                +		this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'});
                +	}
                +}
                +
                +
                + +
                +
                <div class="container mt-5">
                +	<nav
                +		class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                +		<app-back-button></app-back-button>
                +	</nav>
                +    <p class="page-title">Adaugă un utilizator:</p>
                +    
                +	<form [formGroup]="form" (ngSubmit)="onSubmit()">
                +		<div class="row">
                +			<div class="mt-4 col-md-4 col-sm-12">
                +				<div class="form-group">
                +					<label>Nume și Prenume *</label>
                +					<input
                +						[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }"
                +						formControlName="name"
                +						class="form-control"
                +						type="text"/>
                +				</div>
                +			</div>
                +
                +			<div class="mt-4 col-md-4 col-sm-12">
                +				<div class="form-group">
                +					<label>Email *</label>
                +					<input
                +						[ngClass]="{ 'error': form.controls.email.invalid && form.controls.email.touched }"
                +						formControlName="email"
                +						class="form-control"
                +						type="email"
                +					/>
                +					<span class="error-message" *ngIf="form.controls.email.invalid && form.controls.email.touched">* {{form.controls.email.errors.email}}</span>
                +				</div>
                +			</div>
                +
                +			<div class="mt-4 col-md-4 col-sm-12">
                +				<div class="form-group">
                +					<label>Telefon *</label>
                +					<input
                +						[ngClass]="{ 'error': form.controls.phone.invalid && form.controls.phone.touched }"
                +						formControlName="phone"
                +						class="form-control"
                +						type="tel"
                +					/>
                +					<span class="error-message" *ngIf="form.controls.phone.invalid && form.controls.phone.touched">* {{form.controls.phone.errors.phone}}</span>
                +				</div>
                +			</div>
                +
                +			<div class="mt-4 col-md-4" [ngStyle]="{'display': displayInstitution ? 'initial' : 'none'}" >
                +					<div class="form-group">
                +						<label>Insituție *</label>
                +						<select class="form-control" formControlName="institution">
                +							<option *ngFor="let institution of institutions; let i=index" [value]="institution._id">
                +								{{institution.name}}
                +							</option>
                +						</select>
                +					</div>
                +				</div>
                +
                +			<div class="mt-4 col-md-4" [ngStyle]="{'display': displayOrganisation ? 'initial' : 'none'}" >
                +				<div class="form-group">
                +					<label>Organizație *</label>
                +					<select class="form-control" formControlName="organisation">
                +						<option *ngFor="let organisation of organisations; let i=index" [value]="organisation._id">
                +							{{organisation.name}}
                +						</option>
                +					</select>
                +				</div>
                +			</div>
                +
                +		</div>
                +		<button
                +			*ngIf="!loading"
                +			class="btn btn-info btn-rounded waves-effect waves-light mt-5 float-right"
                +            type="submit"
                +            [disabled]="form.invalid">
                +				Adaugă
                +		</button>
                +		<div class="spinner-border text-green float-right" role="status" *ngIf="loading">
                +			<span class="sr-only">Loading...</span>
                +		</div>
                +	</form>
                +</div>
                +
                + +
                +

                + ./add-user.component.scss +

                +
                +
                + +
                +
                +
                +
                + Legend +
                +
                +
                Html element +
                +
                +
                Component +
                +
                +
                Html element with directive +
                +
                +
                + + +
                + + + + + + + + + + + + + + + + + + + + + +
                +
                +

                result-matching ""

                +
                  +
                  +
                  +

                  No results matching ""

                  +
                  +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/AddVolunteerComponent.html b/documentation/components/AddVolunteerComponent.html new file mode 100644 index 0000000..1fe15d9 --- /dev/null +++ b/documentation/components/AddVolunteerComponent.html @@ -0,0 +1,3256 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                  +
                  + + +
                  +
                  + + + + + + + + +
                  +

                  +

                  File

                  +

                  +

                  + src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.ts +

                  + + + +

                  +

                  Implements

                  +

                  +

                  + OnInit +

                  + + +
                  +

                  Metadata

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  providers + { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter } +
                  selectorapp-add-volunteer
                  styleUrls./add-volunteer.component.scss
                  templateUrl./add-volunteer.component.html
                  +
                  + +
                  +

                  Index

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  Properties
                  +
                  + +
                  +
                  Methods
                  +
                  + +
                  +
                  Accessors
                  +
                  +
                    +
                  • + f +
                  • +
                  • + c +
                  • +
                  +
                  +
                  + +
                  +

                  Constructor

                  + + + + + + + + + + + + + +
                  +constructor(volunteerService: VolunteerService, filterService: FiltersService, router: Router, utilService: UtilService, route: ActivatedRoute, location: Location, fb: FormBuilder, citiesandCounties: CitiesCountiesService, authService: AuthenticationService) +
                  + +
                  +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptional
                  volunteerService + VolunteerService + + No +
                  filterService + FiltersService + + No +
                  router + Router + + No +
                  utilService + UtilService + + No +
                  route + ActivatedRoute + + No +
                  location + Location + + No +
                  fb + FormBuilder + + No +
                  citiesandCounties + CitiesCountiesService + + No +
                  authService + AuthenticationService + + No +
                  +
                  +
                  +
                  + + + + + +
                  + +

                  + Methods +

                  + + + + + + + + + + + + + + + + + + + +
                  + + + + acreditorKey + + + +
                  +acreditorKey() +
                  + +
                  +

                  if error has appeared, when user changes input remove the error

                  +
                  + +
                  + Returns : void + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + addCourse + + + +
                  +addCourse() +
                  + +
                  +

                  trigger for add course from course table footer. willbe added to form and displayed in table

                  +
                  + +
                  + Returns : void + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + countykey + + + +
                  +countykey(event: any) +
                  + +
                  +

                  trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptionalDescription
                  event + any + + No + +

                  to be verified for which key has been pressed

                  + +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + courseKey + + + +
                  +courseKey(event: any) +
                  + +
                  +

                  trigger for editing the county field. When activated, disable the static acreditor

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptionalDescription
                  event + any + + No + +

                  to be verified for which key has been pressed

                  + +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + ngOnInit + + + +
                  +ngOnInit() +
                  + +
                  + +
                  + Returns : void + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + onSubmit + + + +
                  +onSubmit() +
                  + +
                  +

                  Process form values and send data to server. If success close page

                  +
                  + +
                  + Returns : void + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + removeCourse + + + +
                  +removeCourse(index: number) +
                  + +
                  +

                  remove one of the courses from the table by index

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptionalDescription
                  index + number + + No + +

                  result object from typeahead that needs to be stored

                  + +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + selectedCity + + + +
                  +selectedCity(val: literal type) +
                  + +
                  +

                  trigger for select city from city typeahead

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptionalDescription
                  val + literal type + + No + +

                  result object from typeahead that needs to be stored

                  + +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + selectedCounty + + + +
                  +selectedCounty(val: any) +
                  + +
                  +

                  trigger for select county from county typeahead. will unlock the city field

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptionalDescription
                  val + any + + No + +

                  result object from typeahead that needs to be stored

                  + +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + selectedcourse + + + +
                  +selectedcourse(obj: any) +
                  + +
                  +

                  trigger for select course from course typeahead

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + +
                  NameTypeOptional
                  obj + any + + No +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + +
                  + + + + selectedorganisation + + + +
                  +selectedorganisation(val: literal type) +
                  + +
                  +

                  trigger for select organisation from organisation typeahead.

                  +
                  + +
                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                  NameTypeOptionalDescription
                  val + literal type + + No + +

                  result object from typeahead that needs to be stored

                  + +
                  +
                  +
                  +
                  +
                  + Returns : void + +
                  +
                  + +
                  +
                  +
                  +
                  + +

                  + Properties +

                  + + + + + + + + + + + + + + +
                  + + + + accreditedError + + +
                  + Default value : false +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + acreditedby + + +
                  + Type : any + +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + Public + authService + + +
                  + Type : AuthenticationService + +
                  + +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + cities + + +
                  + Type : any[] + +
                  + Default value : [] +
                  + +
                  +

                  list of cities to pe parsed. edited when the user selects a county or edits this NGO

                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + cityPlaceholder + + +
                  + Type : string + +
                  + Default value : 'Selectați mai întâi județul' +
                  + +
                  +

                  placeholder for disabled city field

                  +
                  +
                  + + + + + + + + + + + + + + +
                  + + + + click$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + click1$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + click2$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + click3$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + click4$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + + + coursename + + +
                  + Type : any + +
                  + +
                  +

                  courses values and errors

                  +
                  +
                  + + + + + + + + + + + + + + +
                  + + + + coursenameError + + +
                  + Default value : false +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + dateError + + +
                  + Default value : false +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + focus$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + focus1$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + focus2$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + focus3$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + focus4$ + + +
                  + Default value : new Subject<string>() +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + + + form + + +
                  + Type : FormGroup + +
                  + +
                  +

                  form that holds data

                  +
                  +
                  + + + + + + + + + + + + + + + + + +
                  + + + + formatter + + +
                  + Default value : () => {...} +
                  + +
                  +

                  formater to display only name from object

                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + instance + + +
                  + Type : NgbTypeahead + +
                  + Decorators : +
                  + + @ViewChild('instance', {static: true})
                  +
                  +
                  + +
                  +

                  references to NGBTypeahead for opening on focus or click

                  +
                  +
                  + + + + + + + + + + + + + + + + + +
                  + + + + instance1 + + +
                  + Type : NgbTypeahead + +
                  + Decorators : +
                  + + @ViewChild('instance', {static: true})
                  +
                  +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + + + instance2 + + +
                  + Type : NgbTypeahead + +
                  + Decorators : +
                  + + @ViewChild('instance', {static: true})
                  +
                  +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + + + instance3 + + +
                  + Type : NgbTypeahead + +
                  + Decorators : +
                  + + @ViewChild('instance', {static: true})
                  +
                  +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + + + instance4 + + +
                  + Type : NgbTypeahead + +
                  + Decorators : +
                  + + @ViewChild('instance', {static: true})
                  +
                  +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + + + loading + + +
                  + Default value : false +
                  + +
                  +

                  flag -> if information is beeing loaded show loader elements in frontend

                  +
                  +
                  + + + + + + + + + + + + + + +
                  + + + + loadingCities + + +
                  + Default value : false +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + now + + +
                  + Type : any + +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + obtained + + +
                  + Type : Date + +
                  + +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + searchacreditedby + + +
                  + Default value : () => {...} +
                  + +
                  +

                  trigger for accredited by typeahead. registers typing, focus, and click and searches the backend

                  +
                  +
                  +
                  + Parameters : + + + + + + + + + + + + + +
                  NameDescription
                  text +

                  observable event with the filter text

                  +
                  +
                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + searchcity + + +
                  + Default value : () => {...} +
                  + +
                  +

                  trigger for county typeahead. registers typing, focus, and click and searches the backend

                  +
                  +
                  +
                  + Parameters : + + + + + + + + + + + + + +
                  NameDescription
                  text +

                  observable event with the filter text

                  +
                  +
                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + searchcounty + + +
                  + Default value : () => {...} +
                  + +
                  +

                  trigger for county typeahead. registers typing, focus, and click and searches the backend

                  +
                  +
                  +
                  + Parameters : + + + + + + + + + + + + + +
                  NameDescription
                  text +

                  observable event with the filter text

                  +
                  +
                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + searchcourse + + +
                  + Default value : () => {...} +
                  + +
                  +

                  trigger for course typeahead. registers typing, focus, and click and searches the backend

                  +
                  +
                  +
                  + Parameters : + + + + + + + + + + + + + +
                  NameDescription
                  text +

                  observable event with the filter text

                  +
                  +
                  +
                  +
                  + + + + + + + + + + + + + + + + + + + + +
                  + + + + searchorganisation + + +
                  + Default value : () => {...} +
                  + +
                  +

                  trigger for organistion typeahead. registers typing, focus, and click and searches the backend

                  +
                  +
                  +
                  + Parameters : + + + + + + + + + + + + + +
                  NameDescription
                  text +

                  observable event with the filter text

                  +
                  +
                  +
                  +
                  + + + + + + + + + + + + + + +
                  + + + + static_accreditor + + +
                  + Default value : false +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + + Public + volunteerService + + +
                  + Type : VolunteerService + +
                  + +
                  +
                  + +
                  +

                  + Accessors +

                  + + + + + + + + + + + + + + + + + +
                  + + f +
                  + getf() +
                  + +
                  +

                  wrapper for the form' controls

                  +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  + + c +
                  + getc() +
                  + +
                  +

                  wrapper for the form's controls courses array

                  +
                  + +
                  +
                  +
                  + + +
                  +
                  import { Component, OnInit, ViewChild } from '@angular/core';
                  +import { FormGroup, Validators, FormBuilder, FormArray } from '@angular/forms';
                  +import { VolunteerService } from '../../../volunteers.service';
                  +import { Router, ActivatedRoute } from '@angular/router';
                  +import { Observable, merge, Subject } from 'rxjs';
                  +import {
                  +	debounceTime,
                  +	distinctUntilChanged,
                  +	map,
                  +	filter,
                  +	switchMap,
                  +} from 'rxjs/operators';
                  +import { NgbTypeahead, NgbDateAdapter, NgbDateNativeAdapter } from '@ng-bootstrap/ng-bootstrap';
                  +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
                  +import { AuthenticationService, FiltersService, UtilService } from '@app/core';
                  +import { EmailValidation } from '@app/core/validators/email-validation';
                  +import { PhoneValidation } from '@app/core/validators/phone-validation';
                  +import { Location } from '@angular/common';
                  +import { SsnValidation } from '@app/core/validators/ssn-validation';
                  +import * as moment from 'moment';
                  +import { TouchSequence } from 'selenium-webdriver';
                  +
                  +@Component({
                  +	selector: 'app-add-volunteer',
                  +	templateUrl: './add-volunteer.component.html',
                  +	styleUrls: ['./add-volunteer.component.scss'],
                  +	providers: [{provide: NgbDateAdapter, useClass: NgbDateNativeAdapter}]
                  +})
                  +
                  +export class AddVolunteerComponent implements OnInit {
                  +	/**
                  +	* form that holds data
                  +	*/
                  +	form: FormGroup;
                  +	/**
                  +	* courses values and errors
                  +	*/
                  +	coursename: any;
                  +	coursenameError = false;
                  +	acreditedby: any;
                  +	accreditedError = false;
                  +	obtained: Date;
                  +	dateError = false;
                  +
                  +/**
                  +	* placeholder for disabled city field
                  +	*/
                  +	cityPlaceholder = 'Selectați mai întâi județul';
                  +/**
                  +	* references to NGBTypeahead for opening on focus or click
                  +	*/
                  +	@ViewChild('instance', { static: true }) instance: NgbTypeahead;
                  +	focus$ = new Subject<string>();
                  +	click$ = new Subject<string>();
                  +
                  +	@ViewChild('instance', { static: true }) instance1: NgbTypeahead;
                  +	focus1$ = new Subject<string>();
                  +	click1$ = new Subject<string>();
                  +
                  +	@ViewChild('instance', { static: true }) instance2: NgbTypeahead;
                  +	focus2$ = new Subject<string>();
                  +	click2$ = new Subject<string>();
                  +
                  +	@ViewChild('instance', { static: true }) instance3: NgbTypeahead;
                  +	focus3$ = new Subject<string>();
                  +	click3$ = new Subject<string>();
                  +
                  +	@ViewChild('instance', { static: true }) instance4: NgbTypeahead;
                  +	focus4$ = new Subject<string>();
                  +	click4$ = new Subject<string>();
                  +	static_accreditor = false;
                  +	/**
                  +	* flag -> if information is beeing loaded show loader elements in frontend
                  +	*/
                  +	loading = false;
                  +	loadingCities = false;
                  +	/**
                  +	* list of cities to pe parsed. edited when the user selects a county or edits this NGO
                  +	*/
                  +	cities: any[] = [];
                  +	// /**
                  +	// * date object to force course acreditation date in the past
                  +	// */
                  +	now: any;
                  +
                  +	constructor(
                  +		public volunteerService: VolunteerService,
                  +		private filterService: FiltersService,
                  +		private router: Router, private utilService: UtilService,
                  +		private route: ActivatedRoute, private location: Location,
                  +		private fb: FormBuilder,
                  +		private citiesandCounties: CitiesCountiesService,
                  +		public authService: AuthenticationService) {
                  +			const dateObj = new Date();
                  +			const month = dateObj.getUTCMonth() + 1; // months from 1-12
                  +			const day = dateObj.getUTCDate();
                  +			const year = dateObj.getUTCFullYear();
                  +			this.now = {day: day, month: month, year: year};
                  +		}
                  +
                  +	ngOnInit() {
                  +		const navigation = this.router.getCurrentNavigation();
                  +
                  +		let fixedOrg: any;
                  +		if (navigation && navigation.extras && navigation.extras.state) {
                  +			fixedOrg = navigation.extras.state.ngo;
                  +		}
                  +		this.form = this.fb.group({
                  +			name: ['', Validators.required],
                  +			ssn: ['', [Validators.required, SsnValidation.ssnValidation]],
                  +			email: ['', [Validators.required, EmailValidation.emailValidation]],
                  +			phone: ['', [Validators.required, PhoneValidation.phoneValidation]],
                  +			address: [''],
                  +			job: [''],
                  +			county: ['', Validators.required],
                  +			city: [{ value: '', disabled: true }, Validators.required],
                  +			organisation: this.authService.is('NGO') ?
                  +								[{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id},
                  +									disabled: true }, Validators.required]
                  +								:	fixedOrg ?
                  +									[{value: {name: fixedOrg.name, _id: fixedOrg._id},
                  +										disabled: false }, Validators.required]
                  +										:	[{value: '' , disabled: false }, Validators.required],
                  +			courses: this.fb.array([]),
                  +			comments: ['']
                  +		});
                  +	}
                  +	/**
                  +	 * wrapper for the form' controls
                  +	 */
                  +	get f() {
                  +		return this.form.controls;
                  +	}
                  +/**
                  +	 * wrapper for the form's controls courses array
                  +	 */
                  +	get c() {
                  +		return this.f.courses as FormArray;
                  +	}
                  +/**
                  +	 * formater to display only name from object
                  +	 */
                  +	formatter = (result: { name: string }) => result.name;
                  +	/**
                  +	* trigger for organistion typeahead. registers typing, focus, and click and searches the backend
                  +	* @param {Observable} text observable event with the filter text
                  +	*/
                  +	searchorganisation = (text$: Observable<string>) => {
                  +		const debouncedText$ = text$.pipe(
                  +			debounceTime(200),
                  +			distinctUntilChanged()
                  +		);
                  +
                  +		const clicksWithClosedPopup$ = this.click$.pipe(
                  +			filter(() => !this.instance.isPopupOpen())
                  +		);
                  +
                  +		const inputFocus$ = this.focus$;
                  +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                  +			switchMap((term: string) => {
                  +				return this.filterService.getorganisationbyName(term);
                  +			}));
                  +	}
                  +	/**
                  +	* trigger for course typeahead. registers typing, focus, and click and searches the backend
                  +	* @param {Observable} text observable event with the filter text
                  +	*/
                  +	searchcourse = (text$: Observable<string>) => {
                  +		const debouncedText$ = text$.pipe(
                  +			debounceTime(200),
                  +			distinctUntilChanged()
                  +		);
                  +
                  +		const clicksWithClosedPopup$ = this.click3$.pipe(
                  +			filter(() => !this.instance3.isPopupOpen())
                  +		);
                  +
                  +		const inputFocus$ = this.focus3$;
                  +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                  +			switchMap((term: string) => {
                  +				this.coursenameError = false;
                  +				return this.filterService.getSpecializationFilters(term);
                  +			}));
                  +	}
                  +	/**
                  +	* trigger for accredited by typeahead. registers typing, focus, and click and searches the backend
                  +	* @param {Observable} text observable event with the filter text
                  +	*/
                  +	searchacreditedby = (text$: Observable<string>) => {
                  +		const debouncedText$ = text$.pipe(
                  +			debounceTime(200),
                  +			distinctUntilChanged()
                  +		);
                  +
                  +		const clicksWithClosedPopup$ = this.click4$.pipe(
                  +			filter(() => !this.instance.isPopupOpen())
                  +		);
                  +
                  +		const inputFocus$ = this.focus4$;
                  +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                  +			switchMap((term: string) => {
                  +				this.accreditedError = false;
                  +				return this.filterService.getAcreditedFilters(term);
                  +			}));
                  +	}
                  +/**
                  +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                  +	 * @param {Observable} text observable event with the filter text
                  +	 */
                  +	searchcounty = (text$: Observable<string>) => {
                  +		const debouncedText$ = text$.pipe(
                  +			debounceTime(200),
                  +			distinctUntilChanged()
                  +		);
                  +		const clicksWithClosedPopup$ = this.click1$.pipe(
                  +			filter(() => !this.instance1.isPopupOpen())
                  +		);
                  +		const inputFocus$ = this.focus1$;
                  +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                  +			switchMap((term: string) => this.citiesandCounties.getCounties(term))
                  +		);
                  +	}
                  +/**
                  +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                  +	 * @param {Observable} text observable event with the filter text
                  +	 */
                  +	searchcity = (text$: Observable<string>) => {
                  +		const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged());
                  +		const clicksWithClosedPopup$ = this.click2$.pipe(
                  +			filter(() => !this.instance2.isPopupOpen())
                  +		);
                  +		const inputFocus$ = this.focus2$;
                  +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                  +			map((term: string) => {
                  +				if (term === '') {
                  +					return this.cities;
                  +				} else {
                  +					return this.cities.filter(v => {
                  +						const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase();
                  +						return aux.indexOf(term.toLowerCase()) > -1;
                  +					}).slice(0, 20);
                  +				}
                  +			}));
                  +	}
                  +	/**
                  +	 * trigger for editing the county field. When activated, disable the static acreditor
                  +	 * @param {any} event to be verified for which key has been pressed
                  +	*/
                  +	courseKey(event: any) {
                  +		if (event.code !== 'Enter') {
                  +			this.coursenameError = true;
                  +			this.static_accreditor = false;
                  +			this.acreditedby = '';
                  +		}
                  +	}
                  +	/**
                  +	 * if error has appeared, when user changes input remove the error
                  +	 */
                  +	acreditorKey() {
                  +		this.accreditedError = false;
                  +	}
                  +/**
                  +	 * trigger for select course from course typeahead
                  +	 * @param {any} val result object from typeahead that needs to be stored
                  +	 */
                  +	selectedcourse(obj: any) {
                  +		if (obj.item.static_accreditor) {
                  +			this.acreditedby = obj.item.static_accreditor;
                  +			this.static_accreditor = true;
                  +		} else {
                  +			this.acreditedby = {
                  +			};
                  +			this.static_accreditor = false;
                  +		}
                  +		this.coursenameError = false;
                  +	}
                  +/**
                  +	 * trigger for add course from course table footer. willbe added to form and displayed in table
                  +	 */
                  +	addCourse() {
                  +		const now = new Date();
                  +		if (!this.acreditedby) {
                  +			this.accreditedError = true;
                  +		}
                  +		if (!this.coursename) {
                  +			this.coursenameError = true;
                  +		}
                  +		if (!this.obtained) {
                  +			this.dateError = true;
                  +		}
                  +		// if (this.obtained > now) {
                  +			if (!this.coursenameError && this.coursename && this.acreditedby) {
                  +				this.c.push(
                  +					this.fb.group({
                  +						course_name: this.coursename.name,
                  +						course_name_id: this.coursename._id,
                  +						obtained: moment(this.obtained).format('DD.MM.YYYY'),
                  +						accredited_by: this.acreditedby.hasOwnProperty('name') ? this.acreditedby.name : this.acreditedby
                  +					})
                  +				);
                  +				this.static_accreditor = false;
                  +				this.coursename = null;
                  +				this.acreditedby = null;
                  +				this.obtained = null;
                  +				this.dateError = false;
                  +				this.accreditedError = false;
                  +				this.coursenameError = false;
                  +			}
                  +		// } else {
                  +		// 	this.dateError = true;
                  +		// }
                  +	}
                  +	/**
                  +	* remove one of the courses from the table by index
                  +	* @param {number} index result object from typeahead that needs to be stored
                  +	*/
                  +	removeCourse(index: number) {
                  +		const control = <FormArray>this.form.controls.courses;
                  +		control.removeAt(index);
                  +	}
                  +	/**
                  +	 * trigger for select county from county typeahead. will unlock the city field
                  +	 * @param {any} val result object from typeahead that needs to be stored
                  +	 */
                  +	selectedCounty(val: any) {
                  +		this.form.controls.county.markAsTouched();
                  +		if (val.item && val.item._id) {
                  +
                  +			this.form.patchValue({county: val.item});
                  +			this.loadingCities = true;
                  +			this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => {
                  +				this.cities = res;
                  +				this.loadingCities = false;
                  +				this.form.controls.city.enable();
                  +			});
                  +			this.cityPlaceholder = 'Alegeți Orașul';
                  +		} else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) {
                  +			this.form.patchValue({county: '', city: ''});
                  +		}
                  +	}
                  +/**
                  +	 * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection
                  +	 * @param {any} event to be verified for which key has been pressed
                  +	*/
                  +	countykey(event: any) {
                  +		this.form.controls.county.markAsTouched();
                  +		if (event.code !== 'Enter') {
                  +			this.form.controls.city.disable();
                  +			this.form.controls.city.reset('');
                  +			this.cityPlaceholder = 'Selectați mai întâi județul';
                  +		}
                  +	}
                  +/**
                  +	 * trigger for select city from city typeahead
                  +	 * @param {any} val result object from typeahead that needs to be stored
                  +	 */
                  +	selectedCity(val: { item: any }) {
                  +		this.form.controls.city.markAsTouched();
                  +		this.form.patchValue({city: val.item});
                  +	}
                  +	/**
                  +	* trigger for select organisation from organisation typeahead.
                  +	* @param {any} val result object from typeahead that needs to be stored
                  +	*/
                  +	selectedorganisation(val: { item: any }) {
                  +		this.form.controls.organisation.markAsTouched();
                  +		this.form.patchValue({organisation: val.item});
                  +	}
                  +/**
                  +	 * Process form values and send data to server. If success close page
                  +	 */
                  +	onSubmit() {
                  +		this.loading = true;
                  +		const volunteer = {...this.form.value};
                  +		volunteer.ssn = volunteer.ssn.toString();
                  +		volunteer.county = volunteer.county._id;
                  +		volunteer.city = volunteer.city._id;
                  +		volunteer.organisation_id = this.form.controls.organisation.value._id;
                  +		this.volunteerService.addVolunteer(volunteer).subscribe(() => {
                  +			this.loading = false;
                  +			this.form.controls['email'].setErrors({});
                  +			this.location.back();
                  +		}, (obj: any) => {
                  +			this.loading = false;
                  +			if (obj.error.errors) {
                  +				if (obj.error.errors[0].indexOf('CNP') !== -1) {
                  +					this.form.controls['ssn'].setErrors({'ssn': 'CNP-ul introdus există deja în sistem.'});
                  +				} else {
                  +					this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'});
                  +				}
                  +			}
                  +		});
                  +	}
                  +}
                  +
                  +
                  + +
                  +
                  <div class="container wide-container mt-5">
                  +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                  +		<app-back-button></app-back-button>
                  +	</nav>
                  +	<div>
                  +		<p class="page-title">Adaugă un voluntar:</p>
                  +		<div class="note col-md-8">
                  +			<span>
                  +				Vrei să adaugi mai mulți voluntari simultan?
                  +				<a [routerLink]="['../import']">Importă o listă</a>.
                  +			</span>
                  +		</div>
                  +	</div>
                  +	<form [formGroup]="form" (ngSubmit)="onSubmit()">
                  +		<div class="row">
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div class="form-group">
                  +					<label>Nume și Prenume *</label>
                  +					<input
                  +						[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }"
                  +						formControlName="name"
                  +						class="form-control"
                  +						type="text"	/>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div class="form-group">
                  +					<label>CNP *</label>
                  +					<input
                  +						[ngClass]="{ 'error': form.controls.ssn.invalid && form.controls.ssn.touched }"
                  +						formControlName="ssn"
                  +						class="form-control"
                  +						type="number"	/>
                  +					<span class="error-message" *ngIf="form.controls.ssn.invalid && form.controls.ssn.touched">* {{form.controls.ssn.errors.ssn}}</span>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div class="form-group">
                  +					<label>Email *</label>
                  +					<input
                  +						[ngClass]="{ 'error': form.controls.email.invalid && form.controls.email.touched }"
                  +						formControlName="email"
                  +						class="form-control"
                  +						type="email"/>
                  +					<span class="error-message" *ngIf="form.controls.email.invalid && form.controls.email.touched">* {{form.controls.email.errors.email}}</span>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div class="form-group">
                  +					<label>Profesie</label>
                  +					<input
                  +						[ngClass]="{ 'error': form.controls.job.invalid && form.controls.job.touched }"
                  +						formControlName="job"
                  +						class="form-control"
                  +						type="text"	/>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div class="form-group">
                  +					<label>Telefon *</label>
                  +					<input
                  +						[ngClass]="{ 'error': form.controls.phone.invalid && form.controls.phone.touched }"
                  +						formControlName="phone"
                  +						class="form-control"
                  +						type="tel"	/>
                  +					<span class="error-message" *ngIf="form.controls.phone.invalid && form.controls.phone.touched">* {{form.controls.phone.errors.phone}}</span>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div class="form-group">
                  +					<label>Organizație *</label>
                  +					<input formControlName="organisation"
                  +						type="text"
                  +						[ngClass]="{ 'error': form.controls.organisation.invalid && form.controls.organisation.touched }"
                  +						(selectItem)="selectedorganisation($event)"
                  +						class="form-control"
                  +						[ngbTypeahead]="searchorganisation"
                  +						[resultFormatter]="formatter"
                  +						[inputFormatter]="formatter"
                  +						(focus)="focus$.next($event.target.value)"
                  +						(click)="click$.next($event.target.value)"
                  +						#instance="ngbTypeahead"/>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +					<div class="form-group">
                  +						<label>Județ *</label>
                  +						<input type="text" formControlName="county" (selectItem)="selectedCounty($event)" (blur)="selectedCounty($event.target.value)"
                  +							class="form-control" [ngbTypeahead]="searchcounty" (focus)="focus1$.next($event.target.value)"
                  +							[inputFormatter]="formatter" [resultFormatter]="formatter" (keyup)="countykey($event)"
                  +							[ngClass]="{ 'error': form.controls.county.invalid && form.controls.county.touched}"
                  +							(click)="click1$.next($event.target.value)" #instance="ngbTypeahead" />
                  +					</div>
                  +				</div>
                  +	
                  +				<div class="mt-4 col-md-4 col-sm-12">
                  +					<div class="form-group">
                  +						<label>Localitate *</label>
                  +						<input type="text" formControlName="city" class="form-control"
                  +							[ngbTypeahead]="searchcity" (selectItem)="selectedCity($event)"
                  +							[ngClass]="{ 'error': form.controls.city.invalid && form.controls.city.touched }"
                  +							placeholder="{{ cityPlaceholder }}" autocomplete="new-password" [inputFormatter]="formatter"
                  +							[resultFormatter]="formatter" (focus)="focus2$.next($event.target.value)"
                  +							(click)="click2$.next($event.target.value)" #instance="ngbTypeahead" />
                  +							<div class="spinner-border text-grey input-loader" role="status" *ngIf="loadingCities">
                  +								<span class="sr-only">Loading...</span>
                  +							</div>
                  +					</div>
                  +				</div>
                  +
                  +			<div class="mt-4 col-md-4 col-sm-12">
                  +				<div>
                  +					<div class="form-group">
                  +						<label>Adresă</label>
                  +						<input
                  +							formControlName="address"
                  +							[ngClass]="{ 'error': form.controls.address.invalid && form.controls.address.touched }"
                  +							class="form-control"
                  +							type="text"	/>
                  +					</div>
                  +				</div>
                  +			</div>
                  +
                  +			<div class="col-md-12 mt-4">
                  +				<table class="w-100 table table-bordered table-hover">
                  +					<thead>
                  +						<tr>
                  +							<th>
                  +								Specializare
                  +							</th>
                  +							<th>
                  +								Data acreditării
                  +							</th>
                  +							<th>
                  +								Acreditat de
                  +							</th>
                  +							<th></th>
                  +						</tr>
                  +					</thead>
                  +					<tbody>
                  +						<tr	*ngFor="let course of c.controls; let i = index"
                  +							[formGroup]="course"
                  +							class="mb-3">
                  +							<td style="padding-right:15px">
                  +								<div class="form-group">
                  +									<input
                  +									readonly
                  +										formControlName="course_name"
                  +										class="form-control"
                  +										type="text"	/>
                  +								</div>
                  +							</td>
                  +							<td style="padding-right:15px">
                  +								<div class="form-group">
                  +									<input	formControlName="obtained"
                  +									readonly
                  +										class="form-control"
                  +										/>
                  +								</div>
                  +							</td>
                  +							<td>
                  +								<div class="form-group">
                  +									<input formControlName="accredited_by"
                  +										class="form-control"
                  +										readonly
                  +										type="text"	/>
                  +								</div>
                  +							</td>
                  +							<td>
                  +								<button
                  +									placement="top" ngbTooltip="Șterge cursul"
                  +									(click)="removeCourse(i)"
                  +									class="btn-danger btn margin-auto-center"
                  +									type="button">
                  +									<span class="fa fa-trash"></span>
                  +								</button>
                  +							</td>
                  +						</tr>
                  +						<tr *ngIf="c.controls.length === 0">
                  +							<td colspan="4" class="text-center p-4">Nicio specializare adăugată. Vă rugăm completați formularul de mai jos și apăsați pe butonul "<span class="fa fa-plus-circle text-info"></span>"  pentru a salva acreditarea.</td>
                  +						</tr>
                  +					</tbody>
                  +					<tfoot>
                  +						<tr>
                  +							<td style="padding-right:15px">
                  +								<div class="form-group">
                  +									<input 
                  +										[(ngModel)]="coursename"
                  +										[ngModelOptions]="{ standalone: true }"
                  +										type="text"
                  +										class="form-control"
                  +										[ngClass]="{ 'error': coursenameError }"
                  +										(selectItem)="selectedcourse($event)"
                  +										(keyup)="courseKey($event)"
                  +										[ngbTypeahead]="searchcourse"
                  +										[resultFormatter]="formatter"
                  +										[inputFormatter]="formatter"
                  +										(focus)="focus3$.next($event.target.value)"
                  +										(click)="click3$.next($event.target.value)"
                  +										#instance="ngbTypeahead"/>
                  +								</div>
                  +								<span class="error-message" *ngIf="coursenameError">*Alegeți un curs din listă</span>
                  +							</td>
                  +							<td style="padding-right:15px">
                  +								<div class="form-group">
                  +									<div class="input-group datepicker">
                  +										<input class="form-control" placeholder="dd.mm.yyyy" [ngModelOptions]="{ standalone: true }"
                  +										readonly style="background: white;"
                  +										(focus)="d.open()"
                  +										name="dp" [(ngModel)]="obtained" ngbDatepicker [maxDate]="now" #d="ngbDatepicker">
                  +										<div class="input-group-append">
                  +											<button class="btn btn-outline-secondary calendar" (click)="d.toggle()" type="button"><i class="fa fa-calendar"></i></button>
                  +										</div>
                  +									</div>
                  +								</div>
                  +								<span class="error-message" *ngIf="dateError">*Data trebuie să fie anterioară</span>
                  +							</td>
                  +							<td>
                  +								<div class="form-group">
                  +									<input
                  +										[(ngModel)]="acreditedby"
                  +										[ngModelOptions]="{ standalone: true }"
                  +										type="text"
                  +										(keyup)="acreditorKey()"
                  +										[disabled]=static_accreditor
                  +										class="form-control"
                  +										[ngbTypeahead]="searchacreditedby"
                  +										[resultFormatter]="formatter"
                  +										[inputFormatter]="formatter"
                  +										(focus)="focus4$.next($event.target.value)"
                  +										(click)="click4$.next($event.target.value)"
                  +										#instance="ngbTypeahead"/>
                  +								</div>
                  +								<span class="error-message" *ngIf="accreditedError">*Acest câmp este obligatoriu</span>
                  +							</td>
                  +							<td>
                  +								<button	placement="top" ngbTooltip="Adaugă cursul"
                  +									(click)="addCourse()"
                  +									class="btn-info btn margin-auto-center"
                  +									type="button">
                  +									<span class="fa fa-plus-circle"></span>
                  +								</button>
                  +							</td>
                  +						</tr>
                  +					</tfoot>
                  +				</table>
                  +			</div>
                  +
                  +			<div class="mt-4 col-md-12">
                  +				<div class="form-group">
                  +					<label>Comentarii</label>
                  +					<textarea
                  +						class="form-control"
                  +						rows="3"
                  +						[ngClass]="{ 'error': form.controls.comments.invalid && form.controls.comments.touched }"
                  +						formControlName="comments"
                  +						type="text">
                  +					</textarea>
                  +				</div>
                  +			</div>
                  +		</div>
                  +		<button
                  +			[disabled]="form.invalid"
                  +			*ngIf="!loading"
                  +			class=" btn btn-info btn-rounded waves-effect waves-light mt-5 float-right mb-5"
                  +			type="submit">
                  +			Salvează
                  +		</button>
                  +		<div class="spinner-border text-green float-right mt-5" role="status" *ngIf="loading">
                  +			<span class="sr-only">Loading...</span>
                  +		</div>
                  +	</form>
                  +</div>
                  +
                  +
                  + +
                  +

                  + ./add-volunteer.component.scss +

                  +
                  .form-group {
                  +	margin: 0;
                  +}
                  +
                  +.page-title {
                  +	margin-bottom: 1.5rem;
                  +}
                  +
                  +.mx--15 {
                  +	margin-left: -15px;
                  +	margin-right: -15px;
                  +}
                  +
                  +.w-100 {
                  +	width: 100%;
                  +}
                  +
                  +.margin-auto-center {
                  +	margin: 0 auto;
                  +	display: block;
                  +}
                  +
                  +.border-spacing {
                  +	border-collapse: separate;
                  +	border-spacing: 10px;
                  +	border-collapse: expression('separate', cellSpacing = '10px');
                  +}
                  +::ng-deep .form-group .datepicker .dropdown-menu.show{
                  +	max-height: initial;
                  +}
                  +
                  + +
                  +
                  +
                  +
                  + Legend +
                  +
                  +
                  Html element +
                  +
                  +
                  Component +
                  +
                  +
                  Html element with directive +
                  +
                  +
                  + + +
                  + + + + + + + + + + + + + + + + + + + + + +
                  +
                  +

                  result-matching ""

                  +
                    +
                    +
                    +

                    No results matching ""

                    +
                    +
                    +
                    + +
                    +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/AppComponent.html b/documentation/components/AppComponent.html new file mode 100644 index 0000000..add8bb4 --- /dev/null +++ b/documentation/components/AppComponent.html @@ -0,0 +1,347 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                    +
                    + + +
                    +
                    + + + + + + + + +
                    +

                    +

                    File

                    +

                    +

                    + src/app/app.component.ts +

                    + + + + + +
                    +

                    Metadata

                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    selectorapp-root
                    styleUrls./app.component.scss
                    templateUrl./app.component.html
                    +
                    + +
                    +

                    Index

                    + + + + + + + + + + + + + + + +
                    +
                    Properties
                    +
                    + +
                    +
                    + +
                    +

                    Constructor

                    + + + + + + + + + + + + + +
                    +constructor() +
                    + +
                    +

                    Main application component

                    +
                    +
                    +
                    + + + + + + +
                    + +

                    + Properties +

                    + + + + + + + + + + + + + + + + + +
                    + + + + title + + +
                    + Type : string + +
                    + Default value : 'app' +
                    + +
                    +
                    + +
                    + + +
                    +
                    import { Component } from '@angular/core';
                    +import { AuthenticationService } from './core';
                    +import { Router, ActivatedRoute } from '@angular/router';
                    +
                    +@Component({
                    +	selector: 'app-root',
                    +	templateUrl: './app.component.html',
                    +	styleUrls: ['./app.component.scss']
                    +})
                    +export class AppComponent {
                    +	title = 'app';
                    +
                    +	/**
                    +	* Main application component
                    +	*/
                    +	constructor() {
                    +	}
                    +}
                    +
                    +
                    + +
                    +
                    <app-top-bar></app-top-bar>
                    +<router-outlet >
                    +  <app-spinner></app-spinner>
                    +</router-outlet>
                    +
                    +
                    + +
                    +

                    + ./app.component.scss +

                    +
                    router-outlet{
                    +    height: 100%;
                    +}
                    +
                    + +
                    +
                    +
                    +
                    + Legend +
                    +
                    +
                    Html element +
                    +
                    +
                    Component +
                    +
                    +
                    Html element with directive +
                    +
                    +
                    + + +
                    + + + + + + + + + + + + + + + + + + + + + +
                    +
                    +

                    result-matching ""

                    +
                      +
                      +
                      +

                      No results matching ""

                      +
                      +
                      +
                      + +
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/BackButtonComponent.html b/documentation/components/BackButtonComponent.html new file mode 100644 index 0000000..2a18795 --- /dev/null +++ b/documentation/components/BackButtonComponent.html @@ -0,0 +1,437 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                      +
                      + + +
                      +
                      + + + + + + + + +
                      +

                      +

                      File

                      +

                      +

                      + src/app/shared/back-button/back-button.component.ts +

                      + + + +

                      +

                      Implements

                      +

                      +

                      + OnInit +

                      + + +
                      +

                      Metadata

                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      selectorapp-back-button
                      styleUrls./back-button.component.scss
                      templateUrl./back-button.component.html
                      +
                      + +
                      +

                      Index

                      + + + + + + + + + + + + + + + +
                      +
                      Methods
                      +
                      + +
                      +
                      + +
                      +

                      Constructor

                      + + + + + + + + + + + + + +
                      +constructor(location: Location) +
                      + +
                      +

                      reusable back button component

                      +
                      +
                      + Parameters : + + + + + + + + + + + + + + + + + + +
                      NameTypeOptional
                      location + Location + + No +
                      +
                      +
                      +
                      + + + + + +
                      + +

                      + Methods +

                      + + + + + + + + + + + + + + + + + + + +
                      + + + + goBack + + + +
                      +goBack() +
                      + +
                      +

                      goes back in navigation history

                      +
                      + +
                      + Returns : void + +
                      +
                      + + + + + + + + + + + + + + + + + + + +
                      + + + + ngOnInit + + + +
                      +ngOnInit() +
                      + +
                      +

                      Angular ng on init

                      +
                      + +
                      + Returns : void + +
                      +
                      +
                      + +
                      + + +
                      +
                      import { Component, OnInit } from '@angular/core';
                      +import { Location } from '@angular/common';
                      +
                      +@Component({
                      +	selector: 'app-back-button',
                      +	templateUrl: './back-button.component.html',
                      +	styleUrls: ['./back-button.component.scss']
                      +})
                      +
                      +export class BackButtonComponent implements OnInit {
                      +
                      +	/**
                      +	 * reusable back button component
                      +	 */
                      +	constructor(private location: Location) { }
                      +
                      +	/**
                      +	 * Angular ng on init
                      +	 */
                      +	ngOnInit() { }
                      +
                      +	/**
                      +	 * goes back in navigation history
                      +	 */
                      +	goBack() {
                      +		this.location.back();
                      +	}
                      +
                      +}
                      +
                      +
                      + +
                      +
                      <a class="mb-2" (click)="goBack()" href="javascript:void(0);"> << Înapoi </a> 
                      +
                      +
                      + +
                      +

                      + ./back-button.component.scss +

                      +
                      +
                      + +
                      +
                      +
                      +
                      + Legend +
                      +
                      +
                      Html element +
                      +
                      +
                      Component +
                      +
                      +
                      Html element with directive +
                      +
                      +
                      + + +
                      + + + + + + + + + + + + + + + + + + + + + +
                      +
                      +

                      result-matching ""

                      +
                        +
                        +
                        +

                        No results matching ""

                        +
                        +
                        +
                        + +
                        +
                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/CurrentProfileComponent.html b/documentation/components/CurrentProfileComponent.html new file mode 100644 index 0000000..951dc8b --- /dev/null +++ b/documentation/components/CurrentProfileComponent.html @@ -0,0 +1,602 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                        +
                        + + +
                        +
                        + + + + + + + + +
                        +

                        +

                        File

                        +

                        +

                        + src/app/top-bar/components/current-profile/current-profile.component.ts +

                        + + + +

                        +

                        Implements

                        +

                        +

                        + OnInit +

                        + + +
                        +

                        Metadata

                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                        selectorapp-current-profile
                        styleUrls./current-profile.component.scss
                        templateUrl./current-profile.component.html
                        +
                        + +
                        +

                        Index

                        + + + + + + + + + + + + + + + + + + + + + +
                        +
                        Properties
                        +
                        + +
                        +
                        Methods
                        +
                        + +
                        +
                        + +
                        +

                        Constructor

                        + + + + + + + + + + + + + +
                        +constructor(authService: AuthenticationService) +
                        + +
                        +
                        + Parameters : + + + + + + + + + + + + + + + + + + +
                        NameTypeOptional
                        authService + AuthenticationService + + No +
                        +
                        +
                        +
                        + + + + + +
                        + +

                        + Methods +

                        + + + + + + + + + + + + + + + + + + + +
                        + + + + ngOnInit + + + +
                        +ngOnInit() +
                        + +
                        +

                        get current user from server

                        +
                        + +
                        + Returns : void + +
                        +
                        + + + + + + + + + + + + + + + + + + + +
                        + + + + parseRole + + + +
                        +parseRole(roleNumber: number) +
                        + +
                        +

                        parse roleNumber in order to display role abreviation

                        +
                        + +
                        + Parameters : + + + + + + + + + + + + + + + + + + +
                        NameTypeOptional
                        roleNumber + number + + No +
                        +
                        +
                        +
                        +
                        + Returns : string + +
                        +
                        + +
                        +
                        +
                        +
                        + +

                        + Properties +

                        + + + + + + + + + + + + + + +
                        + + + + Public + authService + + +
                        + Type : AuthenticationService + +
                        + +
                        + + + + + + + + + + + + + + + + + + + + +
                        + + + + user + + +
                        + Type : any + +
                        + Default value : { + 'email': 'no login' + } +
                        + +
                        +

                        user to be displayed

                        +
                        +
                        +
                        + +
                        + + +
                        +
                        import { Component, OnInit } from '@angular/core';
                        +import { AuthenticationService } from '@app/core';
                        +
                        +@Component({
                        +	selector: 'app-current-profile',
                        +	templateUrl: './current-profile.component.html',
                        +	styleUrls: ['./current-profile.component.scss']
                        +})
                        +export class CurrentProfileComponent implements OnInit {
                        +/**
                        +	 * user to be displayed
                        +	 */
                        +	user: any = {
                        +		'email': 'no login'
                        +	};
                        +
                        +	constructor(public authService: AuthenticationService) {}
                        +	/**
                        +	 * get current user from server
                        +	 */
                        +	ngOnInit() {
                        +		this.user = this.authService.user;
                        +	}
                        +/**
                        +	 * parse roleNumber in order to display role abreviation
                        +	 */
                        +	parseRole(roleNumber: number): string {
                        +		const roles = ['OFF', 'INS', 'NGO', 'DSU'];
                        +		return roles[roleNumber];
                        +	}
                        +}
                        +
                        +
                        + +
                        +
                        <a class="current-profile d-inline-flex">
                        +  <div class="frame">
                        +      <span class="helper"></span>
                        +    <img src="./../../../../assets/images/DSU_logo.PNG">
                        +  </div>
                        +  <div class="name">
                        +    <span>{{ user.name }}</span>
                        +    <span>{{ parseRole(user.role) }}</span>
                        +  </div>
                        +</a>
                        +
                        + +
                        +

                        + ./current-profile.component.scss +

                        +
                        .current-profile{
                        +    .frame {
                        +        white-space: nowrap;
                        +        text-align: center;
                        +        margin-right: 5px;
                        +        .helper {
                        +            display: inline-block;
                        +            height: 100%;
                        +            vertical-align: middle;
                        +        }
                        +    
                        +        img {
                        +           border-radius: 50%;
                        +            vertical-align: middle;
                        +            max-height: 25px;
                        +            max-width: 160px;
                        +        }
                        +    }
                        +    .name{
                        +        span {
                        +            display: block;
                        +            line-height: 20px;
                        +            margin-bottom: 0;
                        +            max-height: 40px;
                        +            max-width: 200px;
                        +            overflow: hidden;
                        +            white-space: pre-wrap;
                        +            width: 100%;
                        +            word-break: break-word;        
                        +            word-wrap: break-word;
                        +        }
                        +    }
                        +    
                        +}
                        +
                        +
                        + +
                        +
                        +
                        +
                        + Legend +
                        +
                        +
                        Html element +
                        +
                        +
                        Component +
                        +
                        +
                        Html element with directive +
                        +
                        +
                        + + +
                        + + + + + + + + + + + + + + + + + + + + + +
                        +
                        +

                        result-matching ""

                        +
                          +
                          +
                          +

                          No results matching ""

                          +
                          +
                          +
                          + +
                          +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/EditResourceComponent.html b/documentation/components/EditResourceComponent.html new file mode 100644 index 0000000..1cf747f --- /dev/null +++ b/documentation/components/EditResourceComponent.html @@ -0,0 +1,2433 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                          +
                          + + +
                          +
                          + + + + + + + + +
                          +

                          +

                          File

                          +

                          +

                          + src/app/pages/resources/resources/components/edit-resource/edit-resource.component.ts +

                          + + + +

                          +

                          Implements

                          +

                          +

                          + OnInit +

                          + + +
                          +

                          Metadata

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          selectorapp-edit-resource
                          styleUrls./edit-resource.component.scss
                          templateUrl./edit-resource.component.html
                          +
                          + +
                          +

                          Index

                          + + + + + + + + + + + + + + + + + + + + + +
                          +
                          Properties
                          +
                          + +
                          +
                          Methods
                          +
                          + +
                          +
                          + +
                          +

                          Constructor

                          + + + + + + + + + + + + + +
                          +constructor(resourcesService: ResourcesService, route: ActivatedRoute, location: Location, router: Router, citiesandCounties: CitiesCountiesService, fb: FormBuilder, utilService: UtilService, filterService: FiltersService, authService: AuthenticationService) +
                          + +
                          +
                          + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          NameTypeOptional
                          resourcesService + ResourcesService + + No +
                          route + ActivatedRoute + + No +
                          location + Location + + No +
                          router + Router + + No +
                          citiesandCounties + CitiesCountiesService + + No +
                          fb + FormBuilder + + No +
                          utilService + UtilService + + No +
                          filterService + FiltersService + + No +
                          authService + AuthenticationService + + No +
                          +
                          +
                          +
                          + + + + + +
                          + +

                          + Methods +

                          + + + + + + + + + + + + + + + + + + + +
                          + + + + countykey + + + +
                          +countykey(event: any) +
                          + +
                          +

                          trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection

                          +
                          + +
                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                          NameTypeOptionalDescription
                          event + any + + No + +

                          to be verified for which key has been pressed

                          + +
                          +
                          +
                          +
                          +
                          + Returns : void + +
                          +
                          + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + getResourceDetails + + + +
                          +getResourceDetails(resId: string) +
                          + +
                          +

                          get the details of the resource when edititing

                          +
                          + +
                          + Parameters : + + + + + + + + + + + + + + + + + + +
                          NameTypeOptional
                          resId + string + + No +
                          +
                          +
                          +
                          +
                          + Returns : void + +
                          +
                          + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + ngOnInit + + + +
                          +ngOnInit() +
                          + +
                          + +
                          + Returns : void + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + onSubmit + + + +
                          +onSubmit() +
                          + +
                          +

                          Process form values and send data to server. If success close page

                          +
                          + +
                          + Returns : void + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + selectedCategory + + + +
                          +selectedCategory() +
                          + +
                          +

                          trigger for select category from category typeahead. will unlock the subcategory field

                          +
                          + +
                          + Returns : void + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + selectedCity + + + +
                          +selectedCity(val: literal type) +
                          + +
                          +

                          trigger for select city from city typeahead

                          +
                          + +
                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                          NameTypeOptionalDescription
                          val + literal type + + No + +

                          result object from typeahead that needs to be stored

                          + +
                          +
                          +
                          +
                          +
                          + Returns : void + +
                          +
                          + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + selectedCounty + + + +
                          +selectedCounty(val: any) +
                          + +
                          +

                          trigger for select county from county typeahead. will unlock the city field

                          +
                          + +
                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                          NameTypeOptionalDescription
                          val + any + + No + +

                          result object from typeahead that needs to be stored

                          + +
                          +
                          +
                          +
                          +
                          + Returns : void + +
                          +
                          + +
                          +
                          + + + + + + + + + + + + + + + + + + + +
                          + + + + selectedOrganisation + + + +
                          +selectedOrganisation(val: any) +
                          + +
                          +

                          trigger for select organisation from organisation typeahead.

                          +
                          + +
                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                          NameTypeOptionalDescription
                          val + any + + No + +

                          result object from typeahead that needs to be stored

                          + +
                          +
                          +
                          +
                          +
                          + Returns : void + +
                          +
                          + +
                          +
                          +
                          +
                          + +

                          + Properties +

                          + + + + + + + + + + + + + + +
                          + + + + Public + authService + + +
                          + Type : AuthenticationService + +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + categories + + +
                          + Type : any[] + +
                          + Default value : [] +
                          + +
                          + + + + + + + + + + + + + + + + + + + + +
                          + + + + cities + + +
                          + Type : any[] + +
                          + Default value : [] +
                          + +
                          +

                          list of items to select from.

                          +
                          +
                          + + + + + + + + + + + + + + + + + + + + +
                          + + + + cityPlaceholder + + +
                          + Type : string + +
                          + Default value : 'Selectați mai întâi județul' +
                          + +
                          +

                          placeholders for HTML

                          +
                          +
                          + + + + + + + + + + + + + + +
                          + + + + click$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + click1$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + click2$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + click3$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + click4$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + focus$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + focus1$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + focus2$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + focus3$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + +
                          + + + + focus4$ + + +
                          + Default value : new Subject<string>() +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + form + + +
                          + Type : FormGroup + +
                          + +
                          +

                          form that holds data

                          +
                          +
                          + + + + + + + + + + + + + + +
                          + + + + formatter + + +
                          + Default value : () => {...} +
                          + +
                          + + + + + + + + + + + + + + + + + + + + +
                          + + + + instance + + +
                          + Type : NgbTypeahead + +
                          + Decorators : +
                          + + @ViewChild('instance', {static: true})
                          +
                          +
                          + +
                          +

                          references to NGBTypeahead for opening on focus or click

                          +
                          +
                          + + + + + + + + + + + + + + + + + +
                          + + + + instance1 + + +
                          + Type : NgbTypeahead + +
                          + Decorators : +
                          + + @ViewChild('instance', {static: true})
                          +
                          +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + instance2 + + +
                          + Type : NgbTypeahead + +
                          + Decorators : +
                          + + @ViewChild('instance', {static: true})
                          +
                          +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + instance3 + + +
                          + Type : NgbTypeahead + +
                          + Decorators : +
                          + + @ViewChild('instance', {static: true})
                          +
                          +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + instance4 + + +
                          + Type : NgbTypeahead + +
                          + Decorators : +
                          + + @ViewChild('instance', {static: true})
                          +
                          +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + loading + + +
                          + Default value : false +
                          + +
                          +

                          flag for HTML to display loading animation

                          +
                          +
                          + + + + + + + + + + + + + + +
                          + + + + loadingCities + + +
                          + Default value : false +
                          + +
                          + + + + + + + + + + + + + + + + + +
                          + + + + res + + +
                          + Type : any + +
                          + +
                          +

                          flag -> if user is editing then method is PUT, else POST

                          +
                          +
                          + + + + + + + + + + + + + + + + + +
                          + + + + resourcePlaceholder + + +
                          + Type : string + +
                          + Default value : 'Selectați mai întâi categoria' +
                          + +
                          + + + + + + + + + + + + + + + + + + + + +
                          + + + + searchcity + + +
                          + Default value : () => {...} +
                          + +
                          +

                          trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities

                          +
                          +
                          +
                          + Parameters : + + + + + + + + + + + + + +
                          NameDescription
                          text +

                          observable event with the filter text

                          +
                          +
                          +
                          +
                          + + + + + + + + + + + + + + + + + + + + +
                          + + + + searchcounty + + +
                          + Default value : () => {...} +
                          + +
                          +

                          trigger for county typeahead. registers typing, focus, and click and searches the backend

                          +
                          +
                          +
                          + Parameters : + + + + + + + + + + + + + +
                          NameDescription
                          text +

                          observable event with the filter text

                          +
                          +
                          +
                          +
                          + + + + + + + + + + + + + + + + + + + + +
                          + + + + searchOrganisation + + +
                          + Default value : () => {...} +
                          + +
                          +

                          trigger for city typeahead. registers typing, focus, and click and searches the backend

                          +
                          +
                          +
                          + Parameters : + + + + + + + + + + + + + +
                          NameDescription
                          text +

                          observable event with the filter text

                          +
                          +
                          +
                          +
                          + + + + + + + + + + + + + + + + + +
                          + + + + subCategories + + +
                          + Type : any[] + +
                          + Default value : [] +
                          + +
                          +
                          + +
                          + + +
                          +
                          import { Component, OnInit, ViewChild } from '@angular/core';
                          +import { FormGroup, FormBuilder, Validators } from '@angular/forms';
                          +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
                          +import { Subject, Observable, merge } from 'rxjs';
                          +import { ResourcesService } from '@app/pages/resources/resources.service';
                          +import { ActivatedRoute, Router } from '@angular/router';
                          +import { Location } from '@angular/common';
                          +import { CitiesCountiesService, UtilService, FiltersService, AuthenticationService } from '@app/core';
                          +import { LocationValidation } from '@app/core/validators/location-validation';
                          +import { debounceTime, distinctUntilChanged, filter, switchMap, map } from 'rxjs/operators';
                          +
                          +@Component({
                          +	selector: 'app-edit-resource',
                          +	templateUrl: './edit-resource.component.html',
                          +	styleUrls: ['./edit-resource.component.scss']
                          +})
                          +export class EditResourceComponent implements OnInit {
                          +	/**
                          +	* form that holds data
                          +	*/
                          +	form: FormGroup;
                          +	/**
                          +	* flag -> if user is editing then method is PUT, else POST
                          +	*/
                          +	res: any;
                          +	/**
                          +	*  list of items to select from.
                          +	*/
                          +	cities: any[] = [];
                          +	categories: any[] = [];
                          +	subCategories: any[] = [];
                          +	/**
                          +	 * flag for HTML to display loading animation
                          +	 */
                          +	loading = false;
                          +	loadingCities = false;
                          +
                          +	/**
                          +	* placeholders for HTML
                          +	*/
                          +	cityPlaceholder = 'Selectați mai întâi județul';
                          +	resourcePlaceholder = 'Selectați mai întâi categoria';
                          +
                          +	/**
                          +	* references to NGBTypeahead for opening on focus or click
                          +	*/
                          +	@ViewChild('instance', { static: true }) instance: NgbTypeahead;
                          +	focus$ = new Subject<string>();
                          +	click$ = new Subject<string>();
                          +	@ViewChild('instance', { static: true }) instance1: NgbTypeahead;
                          +	focus1$ = new Subject<string>();
                          +	click1$ = new Subject<string>();
                          +	@ViewChild('instance', { static: true }) instance2: NgbTypeahead;
                          +	focus2$ = new Subject<string>();
                          +	click2$ = new Subject<string>();
                          +	@ViewChild('instance', { static: true }) instance3: NgbTypeahead;
                          +	focus3$ = new Subject<string>();
                          +	click3$ = new Subject<string>();
                          +	@ViewChild('instance', { static: true }) instance4: NgbTypeahead;
                          +	focus4$ = new Subject<string>();
                          +	click4$ = new Subject<string>();
                          +
                          +	constructor(private resourcesService: ResourcesService,
                          +		private route: ActivatedRoute,
                          +		private location: Location, private router: Router,
                          +		private citiesandCounties: CitiesCountiesService,
                          +		private fb: FormBuilder, private utilService: UtilService,
                          +		private filterService: FiltersService,
                          +		public authService: AuthenticationService) {}
                          +
                          +	ngOnInit() {
                          +
                          +		const navigation = this.router.getCurrentNavigation();
                          +		let fixedOrg: any = null;
                          +		this.filterService.getSubCategories('0', '').subscribe((elem: any) => {
                          +			this.categories = elem;
                          +		});
                          +		if (navigation && navigation.extras && navigation.extras.state) {
                          +			fixedOrg = navigation.extras.state.ngo;
                          +		}
                          +
                          +		this.form = this.fb.group({
                          +			subCategory: [{value: '', disabled: true}],
                          +			name: ['', Validators.required],
                          +			address: '',
                          +			resource_type: ['', Validators.required],
                          +			category:  ['', Validators.required],
                          +			organisation: this.authService.is('NGO') ?
                          +								[{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id},
                          +									disabled: true }, Validators.required]
                          +								:	fixedOrg ?
                          +									[{value: {name: fixedOrg.name, _id: fixedOrg._id},
                          +										disabled: false }, Validators.required]
                          +										:	[{value: '' , disabled: false }, Validators.required],
                          +			quantity: ['', [Validators.required, Validators.min(1)]],
                          +			city: [{ value: '', disabled: true }, Validators.required],
                          +			county: ['', Validators.required],
                          +			comments: ''
                          +		});
                          +		if (this.route.snapshot.paramMap.get('id')) {
                          +			this.getResourceDetails(this.route.snapshot.paramMap.get('id'));
                          +		}
                          +	}
                          +	/**
                          +	 * get the details of the resource when edititing
                          +	 * @param {string} id of the edited NGO
                          +	 */
                          +	getResourceDetails(resId: string) {
                          +		if (resId) {
                          +			this.resourcesService.getResource(resId).subscribe(data => {
                          +				this.res = data;
                          +				this.form = this.fb.group({
                          +					name: this.res.name,
                          +					subCategory: '',
                          +					address: this.res.address,
                          +					resource_type: [this.res.resource_type, Validators.required],
                          +					category: ['', Validators.required],
                          +					organisation: [{value: this.res.organisation, disabled: this.authService.is('NGO')} , Validators.required],
                          +					quantity: [this.res.quantity, [Validators.required, Validators.min(0)]],
                          +					city: ['', [Validators.required, LocationValidation.locationValidation]],
                          +					county: ['', [Validators.required, LocationValidation.locationValidation]],
                          +					comments: this.res.comments
                          +				});
                          +				if (this.res.categories && this.res.categories[0] && this.res.categories[0]._id) {
                          +					this.form.patchValue({category: this.res.categories[0]._id});
                          +					if (this.res.categories[1]) {
                          +						this.filterService.getSubCategories(this.res.categories[0]._id, '').subscribe(resp => {
                          +							this.form.controls.subCategory.enable();
                          +							this.subCategories = resp;
                          +							this.form.patchValue({subCategory: this.res.categories[1]._id});
                          +						});
                          +					}
                          +				}
                          +				this.selectedCounty({item: this.res.county});
                          +				this.selectedCity({item: this.res.city});
                          +			});
                          +		}
                          +	}
                          +
                          +	formatter = (result: { name: string }) => result.name;
                          +	/**
                          +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                          +	 * @param {Observable} text observable event with the filter text
                          +	 */
                          +	searchcounty = (text$: Observable<string>) => {
                          +
                          +		const debouncedText$ = text$.pipe(
                          +			debounceTime(200),
                          +			distinctUntilChanged()
                          +		);
                          +		const clicksWithClosedPopup$ = this.click1$.pipe(
                          +			filter(() => !this.instance1.isPopupOpen())
                          +		);
                          +		const inputFocus$ = this.focus1$;
                          +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                          +			switchMap((term: string) => this.citiesandCounties.getCounties(term))
                          +		);
                          +	}
                          +/**
                          +	 * trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities
                          +	 * @param {Observable} text observable event with the filter text
                          +	 */
                          +	searchcity = (text$: Observable<string>) => {
                          +		const debouncedText$ = text$.pipe(
                          +			debounceTime(200),
                          +			distinctUntilChanged()
                          +		);
                          +		const clicksWithClosedPopup$ = this.click2$.pipe(
                          +			filter(() => !this.instance2.isPopupOpen())
                          +		);
                          +		const inputFocus$ = this.focus2$;
                          +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                          +			map((term: string) => {
                          +				if (term === '') {
                          +					return this.cities;
                          +				} else {
                          +					return this.cities.filter(v => {
                          +						const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase();
                          +						return aux.indexOf(term.toLowerCase()) > -1;
                          +					}).slice(0, 20);
                          +				}
                          +			}));
                          +	}
                          +	/**
                          +	 * trigger for city typeahead. registers typing, focus, and click and searches the backend
                          +	 * @param {Observable} text observable event with the filter text
                          +	 */
                          +	searchOrganisation = (text$: Observable<string>) => {
                          +		const debouncedText$ = text$.pipe(
                          +			debounceTime(200),
                          +			distinctUntilChanged()
                          +		);
                          +
                          +		const clicksWithClosedPopup$ = this.click$.pipe(
                          +			filter(() => !this.instance.isPopupOpen())
                          +		);
                          +
                          +		const inputFocus$ = this.focus$;
                          +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                          +			switchMap((term: string) => {
                          +				return this.filterService.getorganisationbyName(term);
                          +		}));
                          +	}
                          +/**
                          +	 * trigger for select county from county typeahead. will unlock the city field
                          +	 * @param {any} val result object from typeahead that needs to be stored
                          +	 */
                          +	selectedCounty(val: any) {
                          +		this.form.controls.county.markAsTouched();
                          +		if (val.item && val.item._id) {
                          +			this.form.patchValue({county: val.item});
                          +			this.loadingCities = true;
                          +			this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => {
                          +				this.cities = res;
                          +				this.loadingCities = false;
                          +				this.form.controls.city.enable();
                          +			});
                          +			this.cityPlaceholder = 'Alegeți Orașul';
                          +		} else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) {
                          +			this.form.patchValue({county: '', city: ''});
                          +		}
                          +	}
                          +/**
                          +	 * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection
                          +	 * @param {any} event to be verified for which key has been pressed
                          +	*/
                          +	countykey(event: any) {
                          +		this.form.controls.county.markAsTouched();
                          +		if (event.code !== 'Enter') {
                          +			this.cities = [];
                          +			this.form.controls.city.disable();
                          +			this.form.controls.city.reset('');
                          +			this.cityPlaceholder = 'Selectați mai întâi județul';
                          +		}
                          +	}
                          +/**
                          +	 * trigger for select city from city typeahead
                          +	 * @param {any} val result object from typeahead that needs to be stored
                          +	 */
                          +	selectedCity(val: { item: any }) {
                          +		this.form.controls.city.markAsTouched();
                          +		this.form.patchValue({city: val.item});
                          +	}
                          +	/**
                          +	 * trigger for select organisation from organisation typeahead.
                          +	 * @param {any} val result object from typeahead that needs to be stored
                          +	 */
                          +	selectedOrganisation(val: any) {
                          +		this.form.controls.organisation.markAsTouched();
                          +		if (val.item && val.item._id) {
                          +			this.form.patchValue({organisation: val.item});
                          +		} else if (this.form.controls.organisation.value.name && val !== this.form.controls.organisation.value.name) {
                          +			this.form.patchValue({organisation: ''});
                          +		}
                          +	}
                          +	/**
                          +	 * trigger for select category from category typeahead. will unlock the subcategory field
                          +	 */
                          +	selectedCategory() {
                          +		this.form.controls.category.markAsTouched();
                          +		if (this.form.value.category) {
                          +			this.filterService.getSubCategories(this.form.value.category, '').subscribe(resp => {
                          +				if (resp.length > 0) {
                          +					this.form.controls.subCategory.enable();
                          +					this.resourcePlaceholder = 'Alegeți Categoria';
                          +					this.subCategories = resp;
                          +				} else {
                          +					this.form.controls.subCategory.disable();
                          +					this.form.controls.subCategory.reset('');
                          +					this.resourcePlaceholder = 'Selectați mai întâi categoria';
                          +				}
                          +			});
                          +		}
                          +	}
                          +
                          +
                          +	/**
                          +	 * Process form values and send data to server. If success close page
                          +	 */
                          +	onSubmit() {
                          +		this.loading = true;
                          +		const resource = this.form.value;
                          +		resource.organisation_id = this.form.controls['organisation'].value._id;
                          +		resource.county = resource.county._id;
                          +		resource.city = resource.city._id;
                          +		resource.categories = [resource.category];
                          +		if (resource.subCategory) {
                          +			resource.categories.push(resource.subCategory);
                          +		}
                          +		this.resourcesService.editResource(this.res._id, resource)
                          +			.subscribe((element: any) => {
                          +				this.loading = false;
                          +				this.location.back();
                          +			}, () => {
                          +				this.loading = false;
                          +		});
                          +	}
                          +
                          +}
                          +
                          +
                          + +
                          +
                          <div class="container mt-5">
                          +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                          +		<app-back-button></app-back-button>
                          +	</nav>
                          +	<p class="page-title">Modifică resursă:</p>
                          +	<form [formGroup]="form" (ngSubmit)="onSubmit()">
                          +		<div class="row">
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Nume resursă *</label>
                          +					<input formControlName="name"
                          +						[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }"
                          +						class="form-control" type="text" />
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Categorie *</label>
                          +					<select class="form-control" (change)="selectedCategory()" formControlName="category">
                          +						<option *ngFor="let category of categories; let i=index" [value]="category._id">
                          +							{{category.name}}</option>
                          +					</select>
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Subcategorie</label>
                          +					<select class="form-control" formControlName="subCategory">
                          +						<option *ngFor="let subCat of subCategories; let i=index" [value]="subCat._id">
                          +							{{subCat.name}}
                          +						</option>
                          +					</select>
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Cantitate *</label>
                          +					<input formControlName="quantity"
                          +						[ngClass]="{ 'error': form.controls.quantity.invalid && form.controls.quantity.touched }"
                          +						class="form-control" type="number" />
                          +					<span class="error-message"
                          +						*ngIf="form.controls.quantity.invalid && form.controls.quantity.touched">* Cantitatea trebuie să
                          +						fie mai mare decât 0.</span>
                          +				</div>
                          +			</div>
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Tip *</label>
                          +					<select class="form-control" formControlName="resource_type"
                          +						[ngClass]="{ 'error': form.controls.resource_type.invalid && form.controls.resource_type.touched }"
                          +						class="form-control">
                          +						<option>Perisabil</option>
                          +						<option>Neperisabil</option>
                          +					</select>
                          +					<span class="error-message"
                          +						*ngIf="form.controls.resource_type.invalid && form.controls.resource_type.touched">* Trebuie sa
                          +						alegeți un tip.</span>
                          +				</div>
                          +			</div>
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Organizație *</label>
                          +					<input formControlName="organisation" type="text"
                          +						[ngClass]="{ 'error': form.controls.organisation.invalid && form.controls.organisation.touched }"
                          +						(selectItem)="selectedOrganisation($event)" class="form-control"
                          +						[ngbTypeahead]="searchOrganisation" [resultFormatter]="formatter" [inputFormatter]="formatter"
                          +						(focus)="focus$.next($event.target.value)" (click)="click$.next($event.target.value)"
                          +						#instance="ngbTypeahead" />
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Județ *</label>
                          +					<input type="text" formControlName="county" (selectItem)="selectedCounty($event)"
                          +						(blur)="selectedCounty($event.target.value)" class="form-control" [ngbTypeahead]="searchcounty"
                          +						(focus)="focus1$.next($event.target.value)" [inputFormatter]="formatter"
                          +						[resultFormatter]="formatter" (keyup)="countykey($event)"
                          +						[ngClass]="{ 'error': form.controls.county.invalid && form.controls.county.touched}"
                          +						(click)="click1$.next($event.target.value)" #instance="ngbTypeahead" />
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Localitate *</label>
                          +					<input type="text" formControlName="city" class="form-control" [ngbTypeahead]="searchcity"
                          +						(selectItem)="selectedCity($event)"
                          +						[ngClass]="{ 'error': form.controls.city.invalid && form.controls.city.touched }"
                          +						placeholder="{{ cityPlaceholder }}" autocomplete="new-password" [inputFormatter]="formatter"
                          +						[resultFormatter]="formatter" (focus)="focus2$.next($event.target.value)"
                          +						(click)="click2$.next($event.target.value)" #instance="ngbTypeahead" />
                          +					<div class="spinner-border text-grey input-loader" role="status" *ngIf="loadingCities">
                          +						<span class="sr-only">Loading...</span>
                          +					</div>
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-4 col-sm-12">
                          +				<div class="form-group">
                          +					<label>Adresă</label>
                          +					<input formControlName="address" class="form-control"
                          +						[ngClass]="{ 'error': form.controls.address.invalid && form.controls.address.touched }"
                          +						type="text" />
                          +				</div>
                          +			</div>
                          +
                          +			<div class="mt-4 col-md-12">
                          +				<div class="form-group">
                          +					<label>Comentarii</label>
                          +					<textarea rows="3" formControlName="comments"
                          +						[ngClass]="{ 'error': form.controls.comments.invalid && form.controls.comments.touched }"
                          +						class="form-control" type="text"></textarea>
                          +				</div>
                          +			</div>
                          +		</div>
                          +		<button *ngIf="!loading" [disabled]="form.invalid"
                          +			class="btn btn-info btn-rounded waves-effect waves-light mt-5 float-right" type="submit">
                          +			Salvează
                          +		</button>
                          +		<div class="spinner-border text-green float-right" role="status" *ngIf="loading">
                          +			<span class="sr-only">Loading...</span>
                          +		</div>
                          +	</form>
                          +</div>
                          +
                          + +
                          +

                          + ./edit-resource.component.scss +

                          +
                          +
                          + +
                          +
                          +
                          +
                          + Legend +
                          +
                          +
                          Html element +
                          +
                          +
                          Component +
                          +
                          +
                          Html element with directive +
                          +
                          +
                          + + +
                          + + + + + + + + + + + + + + + + + + + + + +
                          +
                          +

                          result-matching ""

                          +
                            +
                            +
                            +

                            No results matching ""

                            +
                            +
                            +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/EditUserComponent.html b/documentation/components/EditUserComponent.html new file mode 100644 index 0000000..6fee81a --- /dev/null +++ b/documentation/components/EditUserComponent.html @@ -0,0 +1,1594 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                            +
                            + + +
                            +
                            + + + + + + + + +
                            +

                            +

                            File

                            +

                            +

                            + src/app/pages/users/users/components/edit-user/edit-user.component.ts +

                            + + + +

                            +

                            Implements

                            +

                            +

                            + OnInit +

                            + + +
                            +

                            Metadata

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            selectorapp-edit-user
                            styleUrls./edit-user.component.scss
                            templateUrl./edit-user.component.html
                            +
                            + +
                            +

                            Index

                            + + + + + + + + + + + + + + + + + + + + + +
                            +
                            Properties
                            +
                            + +
                            +
                            Methods
                            +
                            + +
                            +
                            + +
                            +

                            Constructor

                            + + + + + + + + + + + + + +
                            +constructor(fb: FormBuilder, router: Router, filterService: FiltersService, route: ActivatedRoute, authService: AuthenticationService, usersService: UsersService, location: Location) +
                            + +
                            +
                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeOptional
                            fb + FormBuilder + + No +
                            router + Router + + No +
                            filterService + FiltersService + + No +
                            route + ActivatedRoute + + No +
                            authService + AuthenticationService + + No +
                            usersService + UsersService + + No +
                            location + Location + + No +
                            +
                            +
                            +
                            + + + + + +
                            + +

                            + Methods +

                            + + + + + + + + + + + + + + + + + + + +
                            + + + + editForm + + + +
                            +editForm() +
                            + +
                            +

                            add existing volunteer data in form for displaying

                            +
                            + +
                            + Returns : void + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + getData + + + +
                            +getData(id: string) +
                            + +
                            +

                            get user data by id

                            +
                            + +
                            + Parameters : + + + + + + + + + + + + + + + + + + + + +
                            NameTypeOptionalDescription
                            id + string + + No + +

                            of the user to be edited

                            + +
                            +
                            +
                            +
                            +
                            + Returns : void + +
                            +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + ngOnInit + + + +
                            +ngOnInit() +
                            + +
                            + +
                            + Returns : void + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + onSubmit + + + +
                            +onSubmit() +
                            + +
                            +

                            Process form values and send data to server. If success close page

                            +
                            + +
                            + Returns : void + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + selectedInstitut + + + +
                            +selectedInstitut(val: literal type) +
                            + +
                            +

                            trigger for select county from county typeahead. will unlock the city field

                            +
                            + +
                            + Parameters : + + + + + + + + + + + + + + + + + + + + +
                            NameTypeOptionalDescription
                            val + literal type + + No + +

                            result object from typeahead that needs to be stored

                            + +
                            +
                            +
                            +
                            +
                            + Returns : void + +
                            +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + setDuplicateEmailError + + + +
                            +setDuplicateEmailError() +
                            + +
                            +

                            Set error if email already exists

                            +
                            + +
                            + Returns : void + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + setInstitutions + + + +
                            +setInstitutions() +
                            + +
                            +

                            set institution form if needed

                            +
                            + +
                            + Returns : void + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + setOrganisations + + + +
                            +setOrganisations() +
                            + +
                            +

                            set organisation form if needed

                            +
                            + +
                            + Returns : void + +
                            +
                            + + + + + + + + + + + + + + + + + + + +
                            + + + + setPageByRoles + + + +
                            +setPageByRoles() +
                            + +
                            +

                            call function to complete form depending on the role of the user

                            +
                            + +
                            + Returns : void + +
                            +
                            +
                            +
                            + +

                            + Properties +

                            + + + + + + + + + + + + + + +
                            + + + + Public + authService + + +
                            + Type : AuthenticationService + +
                            + +
                            + + + + + + + + + + + + + + +
                            + + + + click$ + + +
                            + Default value : new Subject<string>() +
                            + +
                            + + + + + + + + + + + + + + + + + +
                            + + + + displayInstitution + + +
                            + Default value : false +
                            + +
                            +

                            FLAG form HTML to display form according to role

                            +
                            +
                            + + + + + + + + + + + + + + +
                            + + + + displayOrganisation + + +
                            + Default value : false +
                            + +
                            + + + + + + + + + + + + + + +
                            + + + + focus$ + + +
                            + Default value : new Subject<string>() +
                            + +
                            + + + + + + + + + + + + + + + + + +
                            + + + + form + + +
                            + Type : FormGroup + +
                            + +
                            +

                            form that holds data

                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + +
                            + + + + instance + + +
                            + Type : NgbTypeahead + +
                            + Decorators : +
                            + + @ViewChild('instance', {static: true})
                            +
                            +
                            + +
                            +

                            references to NGBTypeahead for opening on focus or click

                            +
                            +
                            + + + + + + + + + + + + + + + + + + + + +
                            + + + + institutions + + +
                            + Type : any[] + +
                            + Default value : [] +
                            + +
                            +

                            list of institutions to pe parsed

                            +
                            +
                            + + + + + + + + + + + + + + + + + +
                            + + + + loading + + +
                            + Default value : false +
                            + +
                            +

                            flag for HTML to display loading animation

                            +
                            +
                            + + + + + + + + + + + + + + + + + +
                            + + + + organisations + + +
                            + Type : any[] + +
                            + Default value : [] +
                            + +
                            + + + + + + + + + + + + + + + + + +
                            + + + + role + + +
                            + Type : string + +
                            + +
                            +

                            role of user that will be created

                            +
                            +
                            + + + + + + + + + + + + + + +
                            + + + + Public + route + + +
                            + Type : ActivatedRoute + +
                            + +
                            + + + + + + + + + + + + + + + + + + + + +
                            + + + + user + + +
                            + Type : any + +
                            + Default value : {} +
                            + +
                            +

                            user data

                            +
                            +
                            +
                            + +
                            + + +
                            +
                            import { Component, OnInit, ViewChild } from '@angular/core';
                            +import { FormBuilder, Validators, FormGroup } from '@angular/forms';
                            +import { Router, ActivatedRoute } from '@angular/router';
                            +import { UsersService } from '@app/core/service/users.service';
                            +import { EmailValidation } from '@app/core/validators/email-validation';
                            +import { PhoneValidation } from '@app/core/validators/phone-validation';
                            +import { AuthenticationService, FiltersService } from '@app/core';
                            +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
                            +import { Subject } from 'rxjs';
                            +import { Location } from '@angular/common';
                            +
                            +@Component({
                            +	selector: 'app-edit-user',
                            +	templateUrl: './edit-user.component.html',
                            +	styleUrls: ['./edit-user.component.scss']
                            +})
                            +export class EditUserComponent implements OnInit {
                            +
                            +	/**
                            +	* form that holds data
                            +	*/
                            +	form: FormGroup;
                            +	/**
                            +	* role of user that will be created
                            +	*/
                            +	role: string;
                            +	/**
                            +	* user data
                            +	*/
                            +	user: any = {};
                            +/**
                            +	 * flag for HTML to display loading animation
                            +	 */
                            +	loading = false;
                            +	/**
                            +	* references to NGBTypeahead for opening on focus or click
                            +	*/
                            +	@ViewChild('instance', { static: true }) instance: NgbTypeahead;
                            +	focus$ = new Subject<string>();
                            +	click$ = new Subject<string>();
                            +	/**
                            +	* list of institutions to pe parsed
                            +	*/
                            +	institutions: any[] = [];
                            +	organisations: any[] = [];
                            +	/**
                            +	* FLAG form HTML to display form according to role
                            +	*/
                            +	displayInstitution = false;
                            +	displayOrganisation = false;
                            +
                            +	constructor(private fb: FormBuilder,
                            +		private router: Router,
                            +		private filterService: FiltersService,
                            +		public route: ActivatedRoute,
                            +		public authService: AuthenticationService,
                            +		private usersService: UsersService,
                            +		private location: Location) { }
                            +
                            +	ngOnInit() {
                            +		this.form = this.fb.group({
                            +			name: ['', Validators.required],
                            +			email: ['', [ Validators.required, EmailValidation.emailValidation ]],
                            +			phone: ['', [ Validators.required, PhoneValidation.phoneValidation ]],
                            +			institution: [''],
                            +			organisation: ['']
                            +		});
                            +
                            +		if (this.route.snapshot.paramMap.get('id')) {
                            +			this.getData(this.route.snapshot.paramMap.get('id'));
                            +		}
                            +	}
                            +/**
                            +	 * call function to complete form depending on the role of the user
                            +	 */
                            +	setPageByRoles() {
                            +		if (this.user.role === '1' || this.user.role === '0') {
                            +			this.form.controls['institution'].setValue(this.user.institution._id);
                            +
                            +			if (this.authService.is('INS')) {
                            +				this.form.controls['institution'].disable();
                            +			}
                            +
                            +			this.setInstitutions();
                            +		}
                            +
                            +		if (this.user.role === '2') {
                            +			this.form.controls['organisation'].setValue(this.user.organisation._id);
                            +
                            +			if (this.authService.is('NGO')) {
                            +				this.form.controls['organisation'].disable();
                            +			}
                            +
                            +			this.setOrganisations();
                            +		}
                            +	}
                            +/**
                            +	 * set organisation form if needed
                            +	 */
                            +	setOrganisations() {
                            +		this.filterService.getorganisationbyName().subscribe(response => {
                            +			this.organisations = response;
                            +		});
                            +
                            +		this.displayOrganisation = true;
                            +		this.form.controls['organisation'].setValidators(Validators.required);
                            +	}
                            +/**
                            +	 * set institution form if needed
                            +	 *
                            +	 */
                            +	setInstitutions() {
                            +		this.filterService.getInstitutionFilters().subscribe(response => {
                            +			this.institutions = response;
                            +		});
                            +
                            +		this.displayInstitution = true;
                            +		this.form.controls['institution'].setValidators(Validators.required);
                            +	}
                            +/**
                            +	 * get user data by id
                            +	 * @param {string} id of the user to be edited
                            +	 */
                            +	getData(id: string) {
                            +		this.usersService.getUser(id).subscribe(response => {
                            +			this.user = response;
                            +			this.role = this.user.role;
                            +			this.setPageByRoles();
                            +			this.editForm();
                            +		});
                            +	}
                            +
                            +	/**
                            +	 * trigger for select county from county typeahead. will unlock the city field
                            +	 * @param {any} val result object from typeahead that needs to be stored
                            +	 */
                            +	selectedInstitut(val: { item: any }) {
                            +		this.form.controls.institution.markAsTouched();
                            +		this.form.patchValue({institution: val.item});
                            +	}
                            +
                            +	/**
                            +	 * add existing volunteer data in form for displaying
                            +	 */
                            +	editForm() {
                            +		this.form.controls['name'].setValue(this.user.name);
                            +		this.form.controls['email'].setValue(this.user.email);
                            +		this.form.controls['phone'].setValue(this.user.phone);
                            +	}
                            +
                            +	/**
                            +	 * Process form values and send data to server. If success close page
                            +	 */
                            +	onSubmit() {
                            +		this.loading = true;
                            +		this.user.name = this.form.value.name;
                            +		this.user.email = this.form.value.email;
                            +		this.user.phone = this.form.value.phone;
                            +
                            +		if (this.role) {
                            +			this.user.role = this.role;
                            +
                            +			if (this.role === '1' || this.role === '0') {
                            +				this.user.institution = this.form.value.institution;
                            +			}
                            +
                            +			if (this.role === '2') {
                            +				this.user.organisation = this.form.value.organisation;
                            +			}
                            +		}
                            +
                            +		this.usersService.updateUser(this.user).subscribe((response) => {
                            +			this.loading = false;
                            +			this.location.back();
                            +		}, () => {
                            +			this.setDuplicateEmailError();
                            +			this.loading = false;
                            +		});
                            +	}
                            +	/**
                            +	 * Set error if email already exists
                            +	 */
                            +	setDuplicateEmailError() {
                            +		this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'});
                            +	}
                            +}
                            +
                            +
                            + +
                            +
                            
                            +<div class="container mt-5">
                            +		<nav
                            +			class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                            +			<app-back-button></app-back-button>
                            +		</nav>
                            +		<p class="page-title">Modifică utilizatorul:</p>
                            +		
                            +		<form [formGroup]="form" (ngSubmit)="onSubmit()">
                            +			<div class="row">
                            +				<div class="mt-4 col-md-4 col-sm-12">
                            +					<div class="form-group">
                            +						<label>Nume și Prenume *</label>
                            +						<input
                            +							[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }"
                            +							formControlName="name"
                            +							class="form-control"
                            +							type="text"/>
                            +					</div>
                            +				</div>
                            +	
                            +				<div class="mt-4 col-md-4 col-sm-12">
                            +					<div class="form-group">
                            +						<label>Email *</label>
                            +						<input
                            +							[ngClass]="{ 'error': form.controls.email.invalid && form.controls.email.touched }"
                            +							formControlName="email"
                            +							class="form-control"
                            +							type="email"
                            +						/>
                            +						<span class="error-message" *ngIf="form.controls.email.invalid && form.controls.email.touched">* {{form.controls.email.errors.email}}</span>
                            +					</div>
                            +				</div>
                            +	
                            +				<div class="mt-4 col-md-4 col-sm-12">
                            +					<div class="form-group">
                            +						<label>Telefon *</label>
                            +						<input
                            +							[ngClass]="{ 'error': form.controls.phone.invalid && form.controls.phone.touched }"
                            +							formControlName="phone"
                            +							class="form-control"
                            +							type="tel"
                            +						/>
                            +						<span class="error-message" *ngIf="form.controls.phone.invalid && form.controls.phone.touched">* {{form.controls.phone.errors.phone}}</span>
                            +					</div>
                            +				</div>
                            +	
                            +				<div class="mt-4 col-md-4" [ngStyle]="{'display': displayInstitution ? 'initial' : 'none'}" >
                            +						<div class="form-group">
                            +							<label>Insituție *</label>
                            +							<select class="form-control" formControlName="institution">
                            +								<option *ngFor="let institution of institutions; let i=index" [value]="institution._id">
                            +									{{institution.name}}
                            +								</option>
                            +							</select>
                            +						</div>
                            +					</div>
                            +	
                            +				<div class="mt-4 col-md-4" [ngStyle]="{'display': displayOrganisation ? 'initial' : 'none'}" >
                            +					<div class="form-group">
                            +						<label>Organizație *</label>
                            +						<select class="form-control" formControlName="organisation">
                            +							<option *ngFor="let organisation of organisations; let i=index" [value]="organisation._id">
                            +								{{organisation.name}}
                            +							</option>
                            +						</select>
                            +					</div>
                            +				</div>
                            +	
                            +			</div>
                            +			<button
                            +				*ngIf="!loading"
                            +				class="btn btn-info btn-rounded waves-effect waves-light mt-5 float-right"
                            +				type="submit"
                            +				[disabled]="form.invalid">
                            +				Salvează
                            +			</button>
                            +			<div class="spinner-border text-green float-right" role="status" *ngIf="loading">
                            +				<span class="sr-only">Loading...</span>
                            +			</div>
                            +		</form>
                            +	</div>
                            +
                            + +
                            +

                            + ./edit-user.component.scss +

                            +
                            +
                            + +
                            +
                            +
                            +
                            + Legend +
                            +
                            +
                            Html element +
                            +
                            +
                            Component +
                            +
                            +
                            Html element with directive +
                            +
                            +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + +
                            +
                            +

                            result-matching ""

                            +
                              +
                              +
                              +

                              No results matching ""

                              +
                              +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/EditVolunteerComponent.html b/documentation/components/EditVolunteerComponent.html new file mode 100644 index 0000000..675aea3 --- /dev/null +++ b/documentation/components/EditVolunteerComponent.html @@ -0,0 +1,3368 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                              +
                              + + +
                              +
                              + + + + + + + + +
                              +

                              +

                              File

                              +

                              +

                              + src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.ts +

                              + + + +

                              +

                              Implements

                              +

                              +

                              + OnInit +

                              + + +
                              +

                              Metadata

                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              selectorapp-edit-volunteer
                              styleUrls./edit-volunteer.component.scss
                              templateUrl./edit-volunteer.component.html
                              +
                              + +
                              +

                              Index

                              + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              +
                              Properties
                              +
                              + +
                              +
                              Methods
                              +
                              + +
                              +
                              Accessors
                              +
                              +
                                +
                              • + f +
                              • +
                              • + c +
                              • +
                              +
                              +
                              + +
                              +

                              Constructor

                              + + + + + + + + + + + + + +
                              +constructor(volunteerService: VolunteerService, filterService: FiltersService, router: Router, utilService: UtilService, route: ActivatedRoute, location: Location, fb: FormBuilder, citiesandCounties: CitiesCountiesService, authService: AuthenticationService) +
                              + +
                              +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptional
                              volunteerService + VolunteerService + + No +
                              filterService + FiltersService + + No +
                              router + Router + + No +
                              utilService + UtilService + + No +
                              route + ActivatedRoute + + No +
                              location + Location + + No +
                              fb + FormBuilder + + No +
                              citiesandCounties + CitiesCountiesService + + No +
                              authService + AuthenticationService + + No +
                              +
                              +
                              +
                              + + + + + +
                              + +

                              + Methods +

                              + + + + + + + + + + + + + + + + + + + +
                              + + + + acreditorKey + + + +
                              +acreditorKey() +
                              + +
                              +

                              if error has appeared, when user changes input remove the error

                              +
                              + +
                              + Returns : void + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + addCourse + + + +
                              +addCourse() +
                              + +
                              +

                              trigger for add course from course table footer. willbe added to form and displayed in table

                              +
                              + +
                              + Returns : void + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + countykey + + + +
                              +countykey(event: any) +
                              + +
                              +

                              trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptionalDescription
                              event + any + + No + +

                              to be verified for which key has been pressed

                              + +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + courseKey + + + +
                              +courseKey(event: any) +
                              + +
                              +

                              trigger for editing the county field. When activated, disable the static acreditor

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptionalDescription
                              event + any + + No + +

                              to be verified for which key has been pressed

                              + +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + getVolunteerDetails + + + +
                              +getVolunteerDetails(volId: string) +
                              + +
                              +

                              get the details of the volunteer when edititing

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + +
                              NameTypeOptional
                              volId + string + + No +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + ngOnInit + + + +
                              +ngOnInit() +
                              + +
                              + +
                              + Returns : void + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + onSubmit + + + +
                              +onSubmit() +
                              + +
                              +

                              Process form values and send data to server. If success close page

                              +
                              + +
                              + Returns : void + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + removeCourse + + + +
                              +removeCourse(index: number) +
                              + +
                              +

                              remove one of the courses from the table by index

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptionalDescription
                              index + number + + No + +

                              result object from typeahead that needs to be stored

                              + +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + selectedCity + + + +
                              +selectedCity(val: literal type) +
                              + +
                              +

                              trigger for select city from city typeahead

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptionalDescription
                              val + literal type + + No + +

                              result object from typeahead that needs to be stored

                              + +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + selectedCounty + + + +
                              +selectedCounty(val: any) +
                              + +
                              +

                              trigger for select county from county typeahead. will unlock the city field

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptionalDescription
                              val + any + + No + +

                              result object from typeahead that needs to be stored

                              + +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + selectedcourse + + + +
                              +selectedcourse(obj: any) +
                              + +
                              +

                              trigger for select course from course typeahead

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + +
                              NameTypeOptional
                              obj + any + + No +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + +
                              + + + + selectedorganisation + + + +
                              +selectedorganisation(val: literal type) +
                              + +
                              +

                              trigger for select organisation from organisation typeahead.

                              +
                              + +
                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                              NameTypeOptionalDescription
                              val + literal type + + No + +

                              result object from typeahead that needs to be stored

                              + +
                              +
                              +
                              +
                              +
                              + Returns : void + +
                              +
                              + +
                              +
                              +
                              +
                              + +

                              + Properties +

                              + + + + + + + + + + + + + + +
                              + + + + accreditedError + + +
                              + Default value : false +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + acreditedby + + +
                              + Type : any + +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + Public + authService + + +
                              + Type : AuthenticationService + +
                              + +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + cities + + +
                              + Type : any[] + +
                              + Default value : [] +
                              + +
                              +

                              list of cities to pe parsed. edited when the user selects a county or edits this NGO

                              +
                              +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + cityPlaceholder + + +
                              + Type : string + +
                              + Default value : 'Selectați mai întâi județul' +
                              + +
                              +

                              placeholder for disabled city field

                              +
                              +
                              + + + + + + + + + + + + + + +
                              + + + + click$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + click1$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + click2$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + click3$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + click4$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + coursename + + +
                              + Type : any + +
                              + +
                              +

                              courses values and errors

                              +
                              +
                              + + + + + + + + + + + + + + +
                              + + + + coursenameError + + +
                              + Default value : false +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + dateError + + +
                              + Default value : false +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + focus$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + focus1$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + focus2$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + focus3$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + +
                              + + + + focus4$ + + +
                              + Default value : new Subject<string>() +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + form + + +
                              + Type : FormGroup + +
                              + +
                              +

                              form that holds data

                              +
                              +
                              + + + + + + + + + + + + + + + + + +
                              + + + + formatter + + +
                              + Default value : () => {...} +
                              + +
                              +

                              formater to display only name from object

                              +
                              +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + instance + + +
                              + Type : NgbTypeahead + +
                              + Decorators : +
                              + + @ViewChild('instance', {static: true})
                              +
                              +
                              + +
                              +

                              references to NGBTypeahead for opening on focus or click

                              +
                              +
                              + + + + + + + + + + + + + + + + + +
                              + + + + instance1 + + +
                              + Type : NgbTypeahead + +
                              + Decorators : +
                              + + @ViewChild('instance', {static: true})
                              +
                              +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + instance2 + + +
                              + Type : NgbTypeahead + +
                              + Decorators : +
                              + + @ViewChild('instance', {static: true})
                              +
                              +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + instance3 + + +
                              + Type : NgbTypeahead + +
                              + Decorators : +
                              + + @ViewChild('instance', {static: true})
                              +
                              +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + instance4 + + +
                              + Type : NgbTypeahead + +
                              + Decorators : +
                              + + @ViewChild('instance', {static: true})
                              +
                              +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + loading + + +
                              + Default value : false +
                              + +
                              +

                              flag -> if information is beeing loaded show loader elements in frontend

                              +
                              +
                              + + + + + + + + + + + + + + +
                              + + + + loadingCities + + +
                              + Default value : false +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + + + now + + +
                              + Type : any + +
                              + +
                              +

                              date object to force course acreditation date in the past

                              +
                              +
                              + + + + + + + + + + + + + + +
                              + + + + obtained + + +
                              + Type : Date + +
                              + +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + searchacreditedby + + +
                              + Default value : () => {...} +
                              + +
                              +

                              trigger for accredited by typeahead. registers typing, focus, and click and searches the backend

                              +
                              +
                              +
                              + Parameters : + + + + + + + + + + + + + +
                              NameDescription
                              text +

                              observable event with the filter text

                              +
                              +
                              +
                              +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + searchcity + + +
                              + Default value : () => {...} +
                              + +
                              +

                              trigger for county typeahead. registers typing, focus, and click and searches the backend

                              +
                              +
                              +
                              + Parameters : + + + + + + + + + + + + + +
                              NameDescription
                              text +

                              observable event with the filter text

                              +
                              +
                              +
                              +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + searchcounty + + +
                              + Default value : () => {...} +
                              + +
                              +

                              trigger for county typeahead. registers typing, focus, and click and searches the backend

                              +
                              +
                              +
                              + Parameters : + + + + + + + + + + + + + +
                              NameDescription
                              text +

                              observable event with the filter text

                              +
                              +
                              +
                              +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + searchcourse + + +
                              + Default value : () => {...} +
                              + +
                              +

                              trigger for course typeahead. registers typing, focus, and click and searches the backend

                              +
                              +
                              +
                              + Parameters : + + + + + + + + + + + + + +
                              NameDescription
                              text +

                              observable event with the filter text

                              +
                              +
                              +
                              +
                              + + + + + + + + + + + + + + + + + + + + +
                              + + + + searchorganisation + + +
                              + Default value : () => {...} +
                              + +
                              +

                              trigger for organistion typeahead. registers typing, focus, and click and searches the backend

                              +
                              +
                              +
                              + Parameters : + + + + + + + + + + + + + +
                              NameDescription
                              text +

                              observable event with the filter text

                              +
                              +
                              +
                              +
                              + + + + + + + + + + + + + + + + + +
                              + + + + static_accreditor + + +
                              + Default value : false +
                              + +
                              +

                              date object to force course acreditation date in the past

                              +
                              +
                              + + + + + + + + + + + + + + +
                              + + + + Public + volunteerService + + +
                              + Type : VolunteerService + +
                              + +
                              +
                              + +
                              +

                              + Accessors +

                              + + + + + + + + + + + + + + + + + +
                              + + f +
                              + getf() +
                              + +
                              +

                              wrapper for the form' controls

                              +
                              + +
                              + + + + + + + + + + + + + + + + + +
                              + + c +
                              + getc() +
                              + +
                              +

                              wrapper for the form's controls courses array

                              +
                              + +
                              +
                              +
                              + + +
                              +
                              import { Component, OnInit, ViewChild } from '@angular/core';
                              +import { FormGroup, Validators, FormBuilder, FormArray } from '@angular/forms';
                              +import { VolunteerService } from '../../../volunteers.service';
                              +import { Router, ActivatedRoute } from '@angular/router';
                              +import { Observable, merge, Subject } from 'rxjs';
                              +import {
                              +	debounceTime,
                              +	distinctUntilChanged,
                              +	map,
                              +	filter,
                              +	switchMap,
                              +} from 'rxjs/operators';
                              +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
                              +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
                              +import { AuthenticationService, FiltersService, UtilService } from '@app/core';
                              +import { EmailValidation } from '@app/core/validators/email-validation';
                              +import { PhoneValidation } from '@app/core/validators/phone-validation';
                              +import { Location } from '@angular/common';
                              +import { SsnValidation } from '@app/core/validators/ssn-validation';
                              +import * as moment from 'moment';
                              +
                              +
                              +@Component({
                              +	selector: 'app-edit-volunteer',
                              +	templateUrl: './edit-volunteer.component.html',
                              +	styleUrls: ['./edit-volunteer.component.scss']
                              +})
                              +export class EditVolunteerComponent implements OnInit {
                              +	/**
                              +	* form that holds data
                              +	*/
                              +	form: FormGroup;
                              +	/**
                              +	* courses values and errors
                              +	*/
                              +	coursename: any;
                              +	coursenameError = false;
                              +	acreditedby: any;
                              +	accreditedError = false;
                              +	obtained: Date;
                              +	dateError = false;
                              +
                              +/**
                              +	* placeholder for disabled city field
                              +	*/
                              +	cityPlaceholder = 'Selectați mai întâi județul';
                              +/**
                              +	* references to NGBTypeahead for opening on focus or click
                              +	*/
                              +	@ViewChild('instance', { static: true }) instance: NgbTypeahead;
                              +	focus$ = new Subject<string>();
                              +	click$ = new Subject<string>();
                              +
                              +	@ViewChild('instance', { static: true }) instance1: NgbTypeahead;
                              +	focus1$ = new Subject<string>();
                              +	click1$ = new Subject<string>();
                              +
                              +	@ViewChild('instance', { static: true }) instance2: NgbTypeahead;
                              +	focus2$ = new Subject<string>();
                              +	click2$ = new Subject<string>();
                              +
                              +	@ViewChild('instance', { static: true }) instance3: NgbTypeahead;
                              +	focus3$ = new Subject<string>();
                              +	click3$ = new Subject<string>();
                              +
                              +	@ViewChild('instance', { static: true }) instance4: NgbTypeahead;
                              +	focus4$ = new Subject<string>();
                              +	click4$ = new Subject<string>();
                              +
                              +	/**
                              +	* flag -> if information is beeing loaded show loader elements in frontend
                              +	*/
                              +	loading = false;
                              +	loadingCities = false;
                              +	/**
                              +	* list of cities to pe parsed. edited when the user selects a county or edits this NGO
                              +	*/
                              +	cities: any[] = [];
                              +	/**
                              +	* date object to force course acreditation date in the past
                              +	*/
                              +	now: any;
                              +	/**
                              +	* date object to force course acreditation date in the past
                              +	*/
                              +	static_accreditor = false;
                              +	constructor(
                              +		public volunteerService: VolunteerService,
                              +		private filterService: FiltersService,
                              +		private router: Router, private utilService: UtilService,
                              +		private route: ActivatedRoute, private location: Location,
                              +		private fb: FormBuilder,
                              +		private citiesandCounties: CitiesCountiesService,
                              +		public authService: AuthenticationService) {
                              +			const dateObj = new Date();
                              +			const month = dateObj.getUTCMonth() + 1; // months from 1-12
                              +			const day = dateObj.getUTCDate();
                              +			const year = dateObj.getUTCFullYear();
                              +			this.now = {day: day, month: month, year: year};
                              +		}
                              +
                              +	ngOnInit() {
                              +		const navigation = this.router.getCurrentNavigation();
                              +
                              +		let fixedOrg: any;
                              +		if (navigation && navigation.extras && navigation.extras.state) {
                              +			fixedOrg = navigation.extras.state.ngo;
                              +		}
                              +		this.form = this.fb.group({
                              +			name: ['', Validators.required],
                              +			ssn: ['', [Validators.required, SsnValidation.ssnValidation]],
                              +			email: ['', [Validators.required, EmailValidation.emailValidation]],
                              +			phone: ['', [Validators.required, PhoneValidation.phoneValidation]],
                              +			address: [''],
                              +			job: [''],
                              +			county: ['', Validators.required],
                              +			city: [{ value: '', disabled: true }, Validators.required],
                              +			organisation: this.authService.is('NGO') ?
                              +								[{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id},
                              +									disabled: true }, Validators.required]
                              +								:	fixedOrg ?
                              +									[{value: {name: fixedOrg.name, _id: fixedOrg._id},
                              +										disabled: false }, Validators.required]
                              +										:	[{value: '' , disabled: false }, Validators.required],
                              +			courses: this.fb.array([]),
                              +			comments: ['']
                              +		});
                              +
                              +		if (this.route.snapshot.paramMap.get('id')) {
                              +			this.getVolunteerDetails(this.route.snapshot.paramMap.get('id'));
                              +		}
                              +	}
                              +/**
                              +	 * get the details of the volunteer when edititing
                              +	 * @param {string} id of the edited volunteer
                              +	 */
                              +	getVolunteerDetails(volId: string) {
                              +		if (volId) {
                              +			this.volunteerService.getVolunteer(volId).subscribe(data => {
                              +				const aux = data.courses.map((element: any) => {
                              +					return this.fb.group({
                              +						course_name: element.course_name.name,
                              +						course_name_id: element.course_name._id,
                              +						obtained: moment(element.obtained).format('DD.MM.YYYY'),
                              +						accredited_by: element.accredited.name
                              +					});
                              +				});
                              +				this.form = this.fb.group({
                              +					name: [data.name, Validators.required],
                              +					ssn: [data.ssn, [Validators.required, Validators.minLength(13), Validators.maxLength(13)]],
                              +					email: [data.email, [Validators.required, EmailValidation.emailValidation]],
                              +					phone: [data.phone, [Validators.required, PhoneValidation.phoneValidation]],
                              +					address: data.address,
                              +					job: data.job,
                              +					courses:  this.fb.array(aux),
                              +					county: ['', Validators.required],
                              +					city: ['', Validators.required],
                              +					organisation: [{value: data.organisation, disabled: this.authService.is('NGO') }, Validators.required],
                              +					comments: data.comments
                              +				});
                              +				this.selectedCounty({item: data.county});
                              +				this.selectedCity({item: data.city});
                              +			});
                              +		}
                              +	}
                              +/**
                              +	 * wrapper for the form' controls
                              +	 */
                              +	get f() {
                              +		return this.form.controls;
                              +	}
                              +/**
                              +	 * wrapper for the form's controls courses array
                              +	 */
                              +	get c() {
                              +		return this.f.courses as FormArray;
                              +	}
                              +/**
                              +	 * formater to display only name from object
                              +	 */
                              +	formatter = (result: { name: string }) => result.name;
                              +/**
                              +	* trigger for organistion typeahead. registers typing, focus, and click and searches the backend
                              +	* @param {Observable} text observable event with the filter text
                              +	*/
                              +	searchorganisation = (text$: Observable<string>) => {
                              +		const debouncedText$ = text$.pipe(
                              +			debounceTime(200),
                              +			distinctUntilChanged()
                              +		);
                              +
                              +		const clicksWithClosedPopup$ = this.click$.pipe(
                              +			filter(() => !this.instance.isPopupOpen())
                              +		);
                              +
                              +		const inputFocus$ = this.focus$;
                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                              +			switchMap((term: string) => {
                              +				return this.filterService.getorganisationbyName(term);
                              +			}));
                              +	}
                              +/**
                              +	* trigger for course typeahead. registers typing, focus, and click and searches the backend
                              +	* @param {Observable} text observable event with the filter text
                              +	*/
                              +	searchcourse = (text$: Observable<string>) => {
                              +		const debouncedText$ = text$.pipe(
                              +			debounceTime(200),
                              +			distinctUntilChanged()
                              +		);
                              +
                              +		const clicksWithClosedPopup$ = this.click3$.pipe(
                              +			filter(() => !this.instance3.isPopupOpen())
                              +		);
                              +
                              +		const inputFocus$ = this.focus3$;
                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                              +			switchMap((term: string) => {
                              +				this.coursenameError = false;
                              +				return this.filterService.getSpecializationFilters(term);
                              +			}));
                              +	}
                              +/**
                              +	* trigger for accredited by typeahead. registers typing, focus, and click and searches the backend
                              +	* @param {Observable} text observable event with the filter text
                              +	*/
                              +	searchacreditedby = (text$: Observable<string>) => {
                              +		const debouncedText$ = text$.pipe(
                              +			debounceTime(200),
                              +			distinctUntilChanged()
                              +		);
                              +
                              +		const clicksWithClosedPopup$ = this.click4$.pipe(
                              +			filter(() => !this.instance.isPopupOpen())
                              +		);
                              +
                              +		const inputFocus$ = this.focus4$;
                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                              +			switchMap((term: string) => {
                              +				this.accreditedError = false;
                              +				return this.filterService.getAcreditedFilters(term);
                              +			}));
                              +	}
                              +/**
                              +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                              +	 * @param {Observable} text observable event with the filter text
                              +	 */
                              +	searchcounty = (text$: Observable<string>) => {
                              +		const debouncedText$ = text$.pipe(
                              +			debounceTime(200),
                              +			distinctUntilChanged()
                              +		);
                              +		const clicksWithClosedPopup$ = this.click1$.pipe(
                              +			filter(() => !this.instance1.isPopupOpen())
                              +		);
                              +		const inputFocus$ = this.focus1$;
                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                              +			switchMap((term: string) => this.citiesandCounties.getCounties(term))
                              +		);
                              +	}
                              +/**
                              +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                              +	 * @param {Observable} text observable event with the filter text
                              +	 */
                              +	searchcity = (text$: Observable<string>) => {
                              +		const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged());
                              +		const clicksWithClosedPopup$ = this.click2$.pipe(
                              +			filter(() => !this.instance2.isPopupOpen())
                              +		);
                              +		const inputFocus$ = this.focus2$;
                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                              +			map((term: string) => {
                              +				if (term === '') {
                              +					return this.cities;
                              +				} else {
                              +					return this.cities.filter(v => {
                              +						const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase();
                              +						return aux.indexOf(term.toLowerCase()) > -1;
                              +					}).slice(0, 20);
                              +				}
                              +			}));
                              +	}
                              +	/**
                              +	 * trigger for editing the county field. When activated, disable the static acreditor
                              +	 * @param {any} event to be verified for which key has been pressed
                              +	*/
                              +	courseKey(event: any) {
                              +		if (event.code !== 'Enter') {
                              +			this.coursenameError = true;
                              +			this.static_accreditor = false;
                              +			this.acreditedby = '';
                              +		}
                              +	}
                              +	/**
                              +	 * if error has appeared, when user changes input remove the error
                              +	 */
                              +	acreditorKey() {
                              +		this.accreditedError = false;
                              +	}
                              +	/**
                              +	 * trigger for select course from course typeahead
                              +	 * @param {any} val result object from typeahead that needs to be stored
                              +	 */
                              +	selectedcourse(obj: any) {
                              +		if (obj.item.static_accreditor) {
                              +			this.acreditedby = obj.item.static_accreditor;
                              +			this.static_accreditor = true;
                              +		} else {
                              +			this.acreditedby = {
                              +			};
                              +			this.static_accreditor = false;
                              +		}
                              +		this.coursenameError = false;
                              +	}
                              +	/**
                              +	 * trigger for add course from course table footer. willbe added to form and displayed in table
                              +	 */
                              +	addCourse() {
                              +		const now = new Date();
                              +		if (!this.acreditedby) {
                              +			this.accreditedError = true;
                              +		}
                              +		if (!this.coursename) {
                              +			this.coursenameError = true;
                              +		}
                              +		if (!this.obtained) {
                              +			this.dateError = true;
                              +		}
                              +		// if (this.obtained > now) {
                              +			if (!this.coursenameError && this.coursename && this.acreditedby) {
                              +				this.c.push(
                              +					this.fb.group({
                              +						course_name: this.coursename.name,
                              +						course_name_id: this.coursename._id,
                              +						obtained: moment(this.obtained).format('DD.MM.YYYY'),
                              +						accredited_by: this.acreditedby.hasOwnProperty('name') ? this.acreditedby.name : this.acreditedby
                              +					})
                              +				);
                              +				this.static_accreditor = false;
                              +				this.coursename = null;
                              +				this.acreditedby = null;
                              +				this.obtained = null;
                              +				this.dateError = false;
                              +				this.accreditedError = false;
                              +				this.coursenameError = false;
                              +			}
                              +		// } else {
                              +		// 	this.dateError = true;
                              +		// }
                              +	}
                              +/**
                              +	* remove one of the courses from the table by index
                              +	* @param {number} index result object from typeahead that needs to be stored
                              +	*/
                              +	removeCourse(index: number) {
                              +		const control = <FormArray>this.form.controls.courses;
                              +		control.removeAt(index);
                              +	}
                              +/**
                              +	 * trigger for select county from county typeahead. will unlock the city field
                              +	 * @param {any} val result object from typeahead that needs to be stored
                              +	 */
                              +	selectedCounty(val: any) {
                              +		this.form.controls.county.markAsTouched();
                              +		if (val.item && val.item._id) {
                              +
                              +			this.form.patchValue({county: val.item});
                              +			this.loadingCities = true;
                              +			this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => {
                              +				this.cities = res;
                              +				this.loadingCities = false;
                              +				this.form.controls.city.enable();
                              +			});
                              +			this.cityPlaceholder = 'Alegeți Orașul';
                              +		} else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) {
                              +			this.form.patchValue({county: '', city: ''});
                              +		}
                              +	}
                              +/**
                              +	 * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection
                              +	 * @param {any} event to be verified for which key has been pressed
                              +	*/
                              +	countykey(event: any) {
                              +		this.form.controls.county.markAsTouched();
                              +		if (event.code !== 'Enter') {
                              +			this.form.controls.city.disable();
                              +			this.form.controls.city.reset('');
                              +			this.cityPlaceholder = 'Selectați mai întâi județul';
                              +		}
                              +	}
                              +/**
                              +	 * trigger for select city from city typeahead
                              +	 * @param {any} val result object from typeahead that needs to be stored
                              +	 */
                              +	selectedCity(val: { item: any }) {
                              +		this.form.controls.city.markAsTouched();
                              +		this.form.patchValue({city: val.item});
                              +	}
                              +	/**
                              +	* trigger for select organisation from organisation typeahead.
                              +	* @param {any} val result object from typeahead that needs to be stored
                              +	*/
                              +	selectedorganisation(val: { item: any }) {
                              +		this.form.controls.organisation.markAsTouched();
                              +		this.form.patchValue({organisation: val.item});
                              +	}
                              +/**
                              +	 * Process form values and send data to server. If success close page
                              +	 */
                              +	onSubmit() {
                              +		this.loading = true;
                              +		const volunteer = {...this.form.value};
                              +		volunteer.ssn = volunteer.ssn.toString();
                              +		volunteer.county = volunteer.county._id;
                              +		volunteer.city = volunteer.city._id;
                              +		volunteer.organisation_id = this.form.controls.organisation.value._id;
                              +
                              +		this.volunteerService.editVolunteer(this.route.snapshot.paramMap.get('id'), volunteer).subscribe(() => {
                              +			this.loading = false;
                              +			this.location.back();
                              +		}, (obj: any) => {
                              +			this.loading = false;
                              +			if (obj.error.errors) {
                              +				if (obj.error.errors[0].indexOf('CNP') !== -1) {
                              +					this.form.controls['ssn'].setErrors({'ssn': 'CNP-ul introdus există deja în sistem.'});
                              +				} else {
                              +					this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'});
                              +				}
                              +			}
                              +		});
                              +	}
                              +}
                              +
                              +
                              + +
                              +
                              <div class="container wide-container mt-5">
                              +		<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                              +			<app-back-button></app-back-button>
                              +		</nav>
                              +		<p class="page-title">Modifică voluntarul:</p>
                              +		<form [formGroup]="form" (ngSubmit)="onSubmit()">
                              +			<div class="row">
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div class="form-group">
                              +						<label>Nume și Prenume *</label>
                              +						<input
                              +							[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }"
                              +							formControlName="name"
                              +							class="form-control"
                              +							type="text"	/>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div class="form-group">
                              +						<label>CNP *</label>
                              +						<input
                              +							[ngClass]="{ 'error': form.controls.ssn.invalid && form.controls.ssn.touched }"
                              +							formControlName="ssn"
                              +							class="form-control"
                              +							type="number"	/>
                              +						<span class="error-message" *ngIf="form.controls.ssn.invalid && form.controls.ssn.touched">* {{form.controls.ssn.errors.ssn}}</span>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div class="form-group">
                              +						<label>Email *</label>
                              +						<input
                              +							[ngClass]="{ 'error': form.controls.email.invalid && form.controls.email.touched }"
                              +							formControlName="email"
                              +							class="form-control"
                              +							type="email"/>
                              +						<span class="error-message" *ngIf="form.controls.email.invalid && form.controls.email.touched">* {{form.controls.email.errors.email}}</span>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div class="form-group">
                              +						<label>Profesie</label>
                              +						<input
                              +							[ngClass]="{ 'error': form.controls.job.invalid && form.controls.job.touched }"
                              +							formControlName="job"
                              +							class="form-control"
                              +							type="text"	/>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div class="form-group">
                              +						<label>Telefon *</label>
                              +						<input
                              +							[ngClass]="{ 'error': form.controls.phone.invalid && form.controls.phone.touched }"
                              +							formControlName="phone"
                              +							class="form-control"
                              +							type="tel"	/>
                              +						<span class="error-message" *ngIf="form.controls.phone.invalid && form.controls.phone.touched">* {{form.controls.phone.errors.phone}}</span>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div class="form-group">
                              +						<label>Organizație *</label>
                              +						<input formControlName="organisation"
                              +							type="text"
                              +							[ngClass]="{ 'error': form.controls.organisation.invalid && form.controls.organisation.touched }"
                              +							(selectItem)="selectedorganisation($event)"
                              +							class="form-control"
                              +							[ngbTypeahead]="searchorganisation"
                              +							[resultFormatter]="formatter"
                              +							[inputFormatter]="formatter"
                              +							(focus)="focus$.next($event.target.value)"
                              +							(click)="click$.next($event.target.value)"
                              +							#instance="ngbTypeahead"/>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +						<div class="form-group">
                              +							<label>Județ *</label>
                              +							<input type="text" formControlName="county" (selectItem)="selectedCounty($event)" (blur)="selectedCounty($event.target.value)"
                              +								class="form-control" [ngbTypeahead]="searchcounty" (focus)="focus1$.next($event.target.value)"
                              +								[inputFormatter]="formatter" [resultFormatter]="formatter" (keyup)="countykey($event)"
                              +								[ngClass]="{ 'error': form.controls.county.invalid && form.controls.county.touched}"
                              +								(click)="click1$.next($event.target.value)" #instance="ngbTypeahead" />
                              +						</div>
                              +					</div>
                              +		
                              +					<div class="mt-4 col-md-4 col-sm-12">
                              +						<div class="form-group">
                              +							<label>Localitate *</label>
                              +							<input type="text" formControlName="city" class="form-control"
                              +								[ngbTypeahead]="searchcity" (selectItem)="selectedCity($event)"
                              +								[ngClass]="{ 'error': form.controls.city.invalid && form.controls.city.touched }"
                              +								placeholder="{{ cityPlaceholder }}" autocomplete="new-password" [inputFormatter]="formatter"
                              +								[resultFormatter]="formatter" (focus)="focus2$.next($event.target.value)"
                              +								(click)="click2$.next($event.target.value)" #instance="ngbTypeahead" />
                              +								<div class="spinner-border text-grey input-loader" role="status" *ngIf="loadingCities">
                              +									<span class="sr-only">Loading...</span>
                              +								</div>
                              +						</div>
                              +					</div>
                              +	
                              +				<div class="mt-4 col-md-4 col-sm-12">
                              +					<div>
                              +						<div class="form-group">
                              +							<label>Adresă</label>
                              +							<input
                              +								formControlName="address"
                              +								[ngClass]="{ 'error': form.controls.address.invalid && form.controls.address.touched }"
                              +								class="form-control"
                              +								type="text"	/>
                              +						</div>
                              +					</div>
                              +				</div>
                              +	
                              +				<div class="col-md-12 mt-4">
                              +					<table class="w-100 table table-bordered table-hover">
                              +						<thead>
                              +							<tr>
                              +								<th>
                              +									Specializare
                              +								</th>
                              +								<th>
                              +									Data acreditării
                              +								</th>
                              +								<th>
                              +									Acreditat de
                              +								</th>
                              +								<th></th>
                              +							</tr>
                              +						</thead>
                              +						<tbody>
                              +							<tr	*ngFor="let course of c.controls; let i = index"
                              +								[formGroup]="course"
                              +								class="mb-3">
                              +								<td style="padding-right:15px">
                              +									<div class="form-group">
                              +											<!-- [ngClass]="{ 'error': course.controls.name.invalid && course.controls.name.touched }" -->
                              +										<input
                              +										readonly
                              +											formControlName="course_name"
                              +											class="form-control"
                              +											type="text"	/>
                              +									</div>
                              +								</td>
                              +								<td style="padding-right:15px">
                              +									<div class="form-group">
                              +										<input	formControlName="obtained"
                              +										readonly
                              +											class="form-control"
                              +											/>
                              +									</div>
                              +								</td>
                              +								<td>
                              +									<div class="form-group">
                              +										<input formControlName="accredited_by"
                              +											class="form-control"
                              +											readonly
                              +											type="text"	/>
                              +									</div>
                              +								</td>
                              +								<td>
                              +									<button
                              +										placement="top" ngbTooltip="Șterge cursul"
                              +										(click)="removeCourse(i)"
                              +										class="btn-danger btn margin-auto-center"
                              +										type="button">
                              +										<span class="fa fa-trash"></span>
                              +									</button>
                              +								</td>
                              +							</tr>
                              +							<tr *ngIf="c.controls.length === 0">
                              +								<td colspan="4" class="text-center p-4">Nicio specializare adăugată. Vă rugăm completați formularul de mai jos și apăsați pe butonul "<span class="fa fa-plus-circle text-info"></span>"  pentru a salva acreditarea.</td>
                              +							</tr>
                              +						</tbody>
                              +						<tfoot>
                              +							<tr>
                              +								<td style="padding-right:15px">
                              +									<div class="form-group">
                              +										<input 
                              +											[(ngModel)]="coursename"
                              +											[ngModelOptions]="{ standalone: true }"
                              +											type="text"
                              +											class="form-control"
                              +											[ngClass]="{ 'error': coursenameError }"
                              +											(selectItem)="selectedcourse($event)"
                              +											(keyup)="courseKey($event)"
                              +											[ngbTypeahead]="searchcourse"
                              +											[resultFormatter]="formatter"
                              +											[inputFormatter]="formatter"
                              +											(focus)="focus3$.next($event.target.value)"
                              +											(click)="click3$.next($event.target.value)"
                              +											#instance="ngbTypeahead"/>
                              +									</div>
                              +									<span class="error-message" *ngIf="coursenameError">*Alegeți un curs din listă</span>
                              +								</td>
                              +								<td style="padding-right:15px">
                              +									<div class="form-group">
                              +										<div class="input-group datepicker">
                              +											<input class="form-control" placeholder="dd.mm.yyyy" [ngModelOptions]="{ standalone: true }"
                              +											readonly style="background: white;"
                              +											(focus)="d.open()"
                              +											name="dp" [(ngModel)]="obtained" ngbDatepicker [maxDate]="now" #d="ngbDatepicker">
                              +											<div class="input-group-append">
                              +												<button class="btn btn-outline-secondary calendar" (click)="d.toggle()" type="button"><i class="fa fa-calendar"></i></button>
                              +											</div>
                              +										</div>
                              +									</div>
                              +									<span class="error-message" *ngIf="dateError">*Data trebuie să fie anterioară</span>
                              +								</td>
                              +								<td>
                              +									<div class="form-group">
                              +										<input
                              +											[(ngModel)]="acreditedby"
                              +											[ngModelOptions]="{ standalone: true }"
                              +											type="text"
                              +											(keyup)="acreditorKey()"
                              +											[disabled]=static_accreditor
                              +											class="form-control"
                              +											[ngbTypeahead]="searchacreditedby"
                              +											[resultFormatter]="formatter"
                              +											[inputFormatter]="formatter"
                              +											(focus)="focus4$.next($event.target.value)"
                              +											(click)="click4$.next($event.target.value)"
                              +											#instance="ngbTypeahead"/>
                              +									</div>
                              +									<span class="error-message" *ngIf="accreditedError">*Acest câmp este obligatoriu</span>
                              +								</td>
                              +								<td>
                              +									<button	placement="top" ngbTooltip="Adaugă cursul"
                              +										(click)="addCourse()"
                              +										class="btn-info btn margin-auto-center"
                              +										type="button">
                              +										<span class="fa fa-plus-circle"></span>
                              +									</button>
                              +								</td>
                              +							</tr>
                              +						</tfoot>
                              +					</table>
                              +				</div>
                              +	
                              +				<div class="mt-4 col-md-12">
                              +					<div class="form-group">
                              +						<label>Comentarii</label>
                              +						<textarea
                              +							class="form-control"
                              +							rows="3"
                              +							[ngClass]="{ 'error': form.controls.comments.invalid && form.controls.comments.touched }"
                              +							formControlName="comments"
                              +							type="text">
                              +						</textarea>
                              +					</div>
                              +				</div>
                              +			</div>
                              +			<button
                              +				[disabled]="form.invalid"
                              +				*ngIf="!loading"
                              +				class=" btn btn-info btn-rounded waves-effect waves-light mt-5 float-right mb-5"
                              +				type="submit">
                              +				Salvează
                              +			</button>
                              +			<div class="spinner-border text-green float-right mt-5" role="status" *ngIf="loading">
                              +				<span class="sr-only">Loading...</span>
                              +			</div>
                              +		</form>
                              +	</div>
                              +	
                              +
                              + +
                              +

                              + ./edit-volunteer.component.scss +

                              +
                              .form-group {
                              +	margin: 0;
                              +}
                              +
                              +.page-title {
                              +	margin-bottom: 1.5rem;
                              +}
                              +
                              +.mx--15 {
                              +	margin-left: -15px;
                              +	margin-right: -15px;
                              +}
                              +
                              +.w-100 {
                              +	width: 100%;
                              +}
                              +
                              +.margin-auto-center {
                              +	margin: 0 auto;
                              +	display: block;
                              +}
                              +
                              +.border-spacing {
                              +	border-collapse: separate;
                              +	border-spacing: 10px;
                              +	border-collapse: expression('separate', cellSpacing = '10px');
                              +}
                              +::ng-deep .form-group .datepicker .dropdown-menu.show{
                              +	max-height: initial;
                              +}
                              +
                              + +
                              +
                              +
                              +
                              + Legend +
                              +
                              +
                              Html element +
                              +
                              +
                              Component +
                              +
                              +
                              Html element with directive +
                              +
                              +
                              + + +
                              + + + + + + + + + + + + + + + + + + + + + +
                              +
                              +

                              result-matching ""

                              +
                                +
                                +
                                +

                                No results matching ""

                                +
                                +
                                +
                                + +
                                +
                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ImportResourcesComponent.html b/documentation/components/ImportResourcesComponent.html new file mode 100644 index 0000000..5198166 --- /dev/null +++ b/documentation/components/ImportResourcesComponent.html @@ -0,0 +1,1033 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                +
                                + + +
                                +
                                + + + + + + + + +
                                +

                                +

                                File

                                +

                                +

                                + src/app/pages/resources/resources/components/import-resources/import-resources.component.ts +

                                + + + +

                                +

                                Implements

                                +

                                +

                                + OnInit +

                                + + +
                                +

                                Metadata

                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                selectorapp-import-resources
                                styleUrls./import-resources.component.scss
                                templateUrl./import-resources.component.html
                                +
                                + +
                                +

                                Index

                                + + + + + + + + + + + + + + + + + + + + + +
                                +
                                Properties
                                +
                                + +
                                +
                                Methods
                                +
                                + +
                                +
                                + +
                                +

                                Constructor

                                + + + + + + + + + + + + + +
                                +constructor(resourceService: ResourcesService, filterService: FiltersService, router: Router, authService: AuthenticationService) +
                                + +
                                +
                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                NameTypeOptional
                                resourceService + ResourcesService + + No +
                                filterService + FiltersService + + No +
                                router + Router + + No +
                                authService + AuthenticationService + + No +
                                +
                                +
                                +
                                + + + + + +
                                + +

                                + Methods +

                                + + + + + + + + + + + + + + + + + + + +
                                + + + + fileReset + + + +
                                +fileReset() +
                                + +
                                +

                                reset file input and response records

                                +
                                + +
                                +
                                +
                                + Returns : void + +
                                +
                                +

                                observable with response

                                + +
                                +
                                + + + + + + + + + + + + + + + + + + + +
                                + + + + isValidCSVFile + + + +
                                +isValidCSVFile(file: any) +
                                + +
                                +

                                check if file is ending with csv

                                +
                                + +
                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                NameTypeOptionalDescription
                                file + any + + No + +

                                that will be uploaded

                                + +
                                +
                                +
                                +
                                +
                                + Returns : any + +
                                +
                                + +
                                +
                                + + + + + + + + + + + + + + + + + + + +
                                + + + + ngOnInit + + + +
                                +ngOnInit() +
                                + +
                                + +
                                + Returns : void + +
                                +
                                + + + + + + + + + + + + + + + + + + + +
                                + + + + uploadListener + + + +
                                +uploadListener($event: any) +
                                + +
                                +

                                send file to service and upload to server

                                +
                                + +
                                + Parameters : + + + + + + + + + + + + + + + + + + +
                                NameTypeOptional
                                $event + any + + No +
                                +
                                +
                                +
                                +
                                + Returns : void + +
                                +
                                + +
                                +
                                +
                                +
                                + +

                                + Properties +

                                + + + + + + + + + + + + + + +
                                + + + + Public + authService + + +
                                + Type : AuthenticationService + +
                                + +
                                + + + + + + + + + + + + + + + + + + + + +
                                + + + + csvReader + + +
                                + Type : any + +
                                + Decorators : +
                                + + @ViewChild('csvReader', {static: true})
                                +
                                +
                                + +
                                +

                                csv reader input reference

                                +
                                +
                                + + + + + + + + + + + + + + + + + + + + +
                                + + + + file + + +
                                + Type : any + +
                                + Default value : null +
                                + +
                                +

                                the file that will be extracted from file input

                                +
                                +
                                + + + + + + + + + + + + + + + + + +
                                + + + + loading + + +
                                + Default value : false +
                                + +
                                +

                                flag for HTML to display loading animation

                                +
                                +
                                + + + + + + + + + + + + + + + + + + + + +
                                + + + + NGOValues + + +
                                + Type : any[] + +
                                + Default value : [] +
                                + +
                                +

                                list of all the NGO from which the DSU can select

                                +
                                +
                                + + + + + + + + + + + + + + + + + + + + +
                                + + + + organisation_id + + +
                                + Type : any + +
                                + Default value : '' +
                                + +
                                +

                                id of the org to which the resources will be added

                                +
                                +
                                + + + + + + + + + + + + + + + + + + + + +
                                + + + + Public + resp + + +
                                + Type : any + +
                                + Default value : {} +
                                + +
                                +

                                response from server. contains all errors

                                +
                                +
                                +
                                + +
                                + + +
                                +
                                import { Component, OnInit, ViewChild } from '@angular/core';
                                +import { ResourcesService } from '@app/pages/resources/resources.service';
                                +import { FiltersService, AuthenticationService } from '@app/core';
                                +import { Location } from '@angular/common';
                                +import { Router } from '@angular/router';
                                +
                                +@Component({
                                +	selector: 'app-import-resources',
                                +	templateUrl: './import-resources.component.html',
                                +	styleUrls: ['./import-resources.component.scss']
                                +})
                                +export class ImportResourcesComponent implements OnInit {
                                +	/**
                                +	 * csv reader input reference
                                +	 */
                                +	@ViewChild('csvReader', { static: true }) csvReader: any;
                                +	/**
                                +	 * the file that will be extracted from file input
                                +	 */
                                +	file: any = null;
                                +	/**
                                +	 * flag for HTML to display loading animation
                                +	 */
                                +	loading = false;
                                +	/**
                                +	 * id of the org to which the resources will be added
                                +	 */
                                +	organisation_id: any = '';
                                +	/**
                                +	 * list of all the NGO from which the DSU can select
                                +	 */
                                +	NGOValues: any[] = [];
                                +	/**
                                +	 * response from server. contains all errors
                                +	 */
                                +	public resp: any = {};
                                +	constructor(private resourceService: ResourcesService,
                                +		private filterService: FiltersService,
                                +		private router: Router,
                                +		public authService: AuthenticationService) {
                                +			this.resp.has_errors = false;
                                +			if (authService.is('NGO')) {
                                +				this.organisation_id = this.authService.user.organisation._id;
                                +			}
                                +		}
                                +
                                +	ngOnInit() {
                                +		this.filterService.getorganisationbyName('').subscribe((data) => {
                                +			this.NGOValues = data;
                                +		});
                                +	}
                                +/**
                                +	 * send file to service and upload to server
                                +	 * @param {any} event contains the file
                                +	 */
                                +	uploadListener($event: any): void {
                                +		const files = $event.srcElement.files;
                                +		this.loading = true;
                                +
                                +		if (this.isValidCSVFile(files[0])) {
                                +			const input = $event.target;
                                +			this.file = input.files[0];
                                +			this.resourceService.importCsv(this.file, this.organisation_id).subscribe((response: any) => {
                                +				this.resp = response;
                                +				if (!this.resp.has_errors) {
                                +					this.loading = false;
                                +					this.router.navigateByUrl('/resources');
                                +				} else {
                                +					this.loading = false;
                                +				}
                                +			}, error => {
                                +				this.loading = false;
                                +			});
                                +		} else {
                                +			alert('Vă rog introduceți un fișier CSV valid.');
                                +			this.fileReset();
                                +		}
                                +	}
                                +/**
                                +	 * check if file is ending with csv
                                +	 * @param {any} file that will be uploaded
                                +	 * @returns {boolead}
                                +	 */
                                +	isValidCSVFile(file: any) {
                                +		return file.name.endsWith('.csv');
                                +	}
                                +/**
                                +	 * reset file input and response records
                                +	 * @returns observable with response
                                +	 */
                                +	fileReset() {
                                +		this.csvReader.nativeElement.value = '';
                                +	}
                                +}
                                +
                                +
                                + +
                                +
                                <div class="container mt-5">
                                +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                +		<app-back-button></app-back-button>
                                +	</nav>
                                +	<p class="page-title">Adaugă resurse:</p>
                                +
                                +	<div class="note col-md-7">
                                +		<span>
                                +			Vrei să adaugi resurse individual?
                                +			<a ref="javascript:void(0)" [routerLink]="['../add']">Adaugă o resursa</a>.
                                +		</span>
                                +	</div>
                                +
                                +	<p class="m-2" *ngIf="!!file">{{ file.name }}</p>
                                +
                                +	<div *ngIf="!loading" class="col-md-7">
                                +		<select class="form-control mt-2" *ngIf="authService.is('DSU')" [(ngModel)]="organisation_id">
                                +			<option value="" selected disabled>Vă rugăm să selectați o organizație la care să adaugați</option>
                                +			<option *ngFor="let org of NGOValues; let i=index" [value]="org._id">
                                +				{{org.name}}
                                +			</option>
                                +		</select>
                                +		<div class="import-box" >
                                +			<button class="btn btn-info mt-4 btn-import" [disabled]="organisation_id==''">
                                +				Importați un fișier CSV
                                +			</button>
                                +			<input type="file" #csvReader name="Upload CSV" id="txtFileUpload" (change)="uploadListener($event)" [disabled]="organisation_id==''"
                                +				accept=".csv" class="import-csv" />
                                +		</div>
                                +	</div>
                                +	<div class="spinner-border text-green" role="status" *ngIf="loading">
                                +		<span class="sr-only">Loading...</span>
                                +	</div>
                                +	<div class="error-table" *ngIf="resp.has_errors">
                                +		<span>Au fost importate {{resp.rows_imported}} rânduri din {{resp.rows_discovered}}. Au apărut erori la unele rânduri:</span>
                                +		<div class="col-md-12" *ngFor="let err of resp.errors">
                                +			<span>Rândul {{err.line}}: </span>
                                +			<div *ngFor="let ex of err.error">
                                +				<span>{{ex.value}} &nbsp; - &nbsp; {{ex.error}}</span>
                                +			</div>
                                +		</div>
                                +	</div>
                                +</div>
                                +
                                + +
                                +

                                + ./import-resources.component.scss +

                                +
                                .error-table {
                                +    margin-top: 100px;
                                +}
                                +
                                + +
                                +
                                +
                                +
                                + Legend +
                                +
                                +
                                Html element +
                                +
                                +
                                Component +
                                +
                                +
                                Html element with directive +
                                +
                                +
                                + + +
                                + + + + + + + + + + + + + + + + + + + + + +
                                +
                                +

                                result-matching ""

                                +
                                  +
                                  +
                                  +

                                  No results matching ""

                                  +
                                  +
                                  +
                                  + +
                                  +
                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ImportVolunteersComponent.html b/documentation/components/ImportVolunteersComponent.html new file mode 100644 index 0000000..67f89f6 --- /dev/null +++ b/documentation/components/ImportVolunteersComponent.html @@ -0,0 +1,1032 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                  +
                                  + + +
                                  +
                                  + + + + + + + + +
                                  +

                                  +

                                  File

                                  +

                                  +

                                  + src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.ts +

                                  + + + +

                                  +

                                  Implements

                                  +

                                  +

                                  + OnInit +

                                  + + +
                                  +

                                  Metadata

                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  selectorapp-import-volunteers
                                  styleUrls./import-volunteers.component.scss
                                  templateUrl./import-volunteers.component.html
                                  +
                                  + +
                                  +

                                  Index

                                  + + + + + + + + + + + + + + + + + + + + + +
                                  +
                                  Properties
                                  +
                                  + +
                                  +
                                  Methods
                                  +
                                  + +
                                  +
                                  + +
                                  +

                                  Constructor

                                  + + + + + + + + + + + + + +
                                  +constructor(volunteerService: VolunteerService, filterService: FiltersService, router: Router, authService: AuthenticationService) +
                                  + +
                                  +
                                  + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  NameTypeOptional
                                  volunteerService + VolunteerService + + No +
                                  filterService + FiltersService + + No +
                                  router + Router + + No +
                                  authService + AuthenticationService + + No +
                                  +
                                  +
                                  +
                                  + + + + + +
                                  + +

                                  + Methods +

                                  + + + + + + + + + + + + + + + + + + + +
                                  + + + + fileReset + + + +
                                  +fileReset() +
                                  + +
                                  +

                                  reset file input and response records

                                  +
                                  + +
                                  +
                                  +
                                  + Returns : void + +
                                  +
                                  +

                                  observable with response

                                  + +
                                  +
                                  + + + + + + + + + + + + + + + + + + + +
                                  + + + + isValidCSVFile + + + +
                                  +isValidCSVFile(file: any) +
                                  + +
                                  +

                                  check if file is ending with csv

                                  +
                                  + +
                                  + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                  NameTypeOptionalDescription
                                  file + any + + No + +

                                  that will be uploaded

                                  + +
                                  +
                                  +
                                  +
                                  +
                                  + Returns : any + +
                                  +
                                  + +
                                  +
                                  + + + + + + + + + + + + + + + + + + + +
                                  + + + + ngOnInit + + + +
                                  +ngOnInit() +
                                  + +
                                  + +
                                  + Returns : void + +
                                  +
                                  + + + + + + + + + + + + + + + + + + + +
                                  + + + + uploadListener + + + +
                                  +uploadListener($event: any) +
                                  + +
                                  +

                                  send file to service and upload to server

                                  +
                                  + +
                                  + Parameters : + + + + + + + + + + + + + + + + + + +
                                  NameTypeOptional
                                  $event + any + + No +
                                  +
                                  +
                                  +
                                  +
                                  + Returns : void + +
                                  +
                                  + +
                                  +
                                  +
                                  +
                                  + +

                                  + Properties +

                                  + + + + + + + + + + + + + + +
                                  + + + + Public + authService + + +
                                  + Type : AuthenticationService + +
                                  + +
                                  + + + + + + + + + + + + + + + + + + + + +
                                  + + + + csvReader + + +
                                  + Type : any + +
                                  + Decorators : +
                                  + + @ViewChild('csvReader', {static: true})
                                  +
                                  +
                                  + +
                                  +

                                  csv reader input reference

                                  +
                                  +
                                  + + + + + + + + + + + + + + + + + + + + +
                                  + + + + file + + +
                                  + Type : any + +
                                  + Default value : null +
                                  + +
                                  +

                                  the file that will be extracted from file input

                                  +
                                  +
                                  + + + + + + + + + + + + + + + + + +
                                  + + + + loading + + +
                                  + Default value : false +
                                  + +
                                  +

                                  flag for HTML to display loading animation

                                  +
                                  +
                                  + + + + + + + + + + + + + + + + + + + + +
                                  + + + + NGOValues + + +
                                  + Type : any[] + +
                                  + Default value : [] +
                                  + +
                                  +

                                  list of all the NGO from which the DSU can select

                                  +
                                  +
                                  + + + + + + + + + + + + + + + + + + + + +
                                  + + + + organisation_id + + +
                                  + Type : any + +
                                  + Default value : '' +
                                  + +
                                  +

                                  id of the org to which the resources will be added

                                  +
                                  +
                                  + + + + + + + + + + + + + + + + + + + + +
                                  + + + + Public + resp + + +
                                  + Type : any + +
                                  + Default value : {} +
                                  + +
                                  +

                                  response from server. contains all errors

                                  +
                                  +
                                  +
                                  + +
                                  + + +
                                  +
                                  import { Component, OnInit, ViewChild } from '@angular/core';
                                  +import { VolunteerService } from '@app/pages/volunteers/volunteers.service';
                                  +import { FiltersService, AuthenticationService } from '@app/core';
                                  +import { Location } from '@angular/common';
                                  +import { Router } from '@angular/router';
                                  +
                                  +@Component({
                                  +	selector: 'app-import-volunteers',
                                  +	templateUrl: './import-volunteers.component.html',
                                  +	styleUrls: ['./import-volunteers.component.scss']
                                  +})
                                  +export class ImportVolunteersComponent implements OnInit {
                                  +	/**
                                  +	 * csv reader input reference
                                  +	 */
                                  +	@ViewChild('csvReader', { static: true }) csvReader: any;
                                  +	/**
                                  +	 * the file that will be extracted from file input
                                  +	 */
                                  +	file: any = null;
                                  +	/**
                                  +	 * flag for HTML to display loading animation
                                  +	 */
                                  +	loading = false;
                                  +	/**
                                  +	 * id of the org to which the resources will be added
                                  +	 */
                                  +	organisation_id: any = '';
                                  +	/**
                                  +	 * list of all the NGO from which the DSU can select
                                  +	 */
                                  +	NGOValues: any[] = [];
                                  +	/**
                                  +	 * response from server. contains all errors
                                  +	 */
                                  +	public resp: any = {};
                                  +	constructor(private volunteerService: VolunteerService,
                                  +		private filterService: FiltersService,
                                  +		private router: Router,
                                  +		public authService: AuthenticationService) {
                                  +			this.resp.has_errors = false;
                                  +			if (authService.is('NGO')) {
                                  +				this.organisation_id = this.authService.user.organisation._id;
                                  +			}
                                  +		}
                                  +
                                  +	ngOnInit() {
                                  +		this.filterService.getorganisationbyName('').subscribe((data) => {
                                  +			this.NGOValues = data;
                                  +		});
                                  +	}
                                  +/**
                                  +	 * send file to service and upload to server
                                  +	 * @param {any} event contains the file
                                  +	 */
                                  +	uploadListener($event: any): void {
                                  +		const files = $event.srcElement.files;
                                  +		this.loading = true;
                                  +		if (this.isValidCSVFile(files[0])) {
                                  +			const input = $event.target;
                                  +			this.file = input.files[0];
                                  +			this.volunteerService.importCsv(this.file, this.organisation_id).subscribe((response: any) => {
                                  +				this.resp = response;
                                  +				if (!this.resp.has_errors) {
                                  +					this.loading = false;
                                  +					this.router.navigateByUrl('/volunteers');
                                  +				} else {
                                  +					this.loading = false;
                                  +				}
                                  +			}, error => {
                                  +				this.loading = false;
                                  +			});
                                  +		} else {
                                  +			alert('Vă rog introduceți un fișier CSV valid.');
                                  +			this.fileReset();
                                  +			this.loading = false;
                                  +		}
                                  +	}
                                  +/**
                                  +	 * check if file is ending with csv
                                  +	 * @param {any} file that will be uploaded
                                  +	 * @returns {boolead}
                                  +	 */
                                  +	isValidCSVFile(file: any) {
                                  +		return file.name.endsWith('.csv');
                                  +	}
                                  +/**
                                  +	 * reset file input and response records
                                  +	 * @returns observable with response
                                  +	 */
                                  +	fileReset() {
                                  +		this.csvReader.nativeElement.value = '';
                                  +	}
                                  +}
                                  +
                                  +
                                  + +
                                  +
                                  <div class="container mt-5">
                                  +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                  +		<app-back-button></app-back-button>
                                  +	</nav>
                                  +	<p class="page-title">Adaugă voluntar:</p>
                                  +
                                  +	<div class="note col-md-7">
                                  +		<span>
                                  +			Vrei să adaugi voluntari individual?
                                  +			<a href="javascript:void(0)" [routerLink]="['../add']">Adaugă un voluntar</a>.
                                  +		</span>
                                  +	</div>
                                  +
                                  +	<p class="m-2" *ngIf="!!file">{{ file.name }}</p>
                                  +
                                  +	<div *ngIf="!loading" class="col-md-7">
                                  +		<select class="form-control mt-2" *ngIf="authService.is('DSU')" [(ngModel)]="organisation_id">
                                  +			<option value="" selected disabled>Vă rugăm să selectați o organizație la care să adaugați</option>
                                  +			<option *ngFor="let org of NGOValues; let i=index" [value]="org._id">
                                  +				{{org.name}}</option>
                                  +		</select>
                                  +		<div class="import-box" >
                                  +			<button class="btn btn-info mt-4 btn-import" [disabled]="organisation_id==''">
                                  +				Importați un fișier CSV
                                  +			</button>
                                  +			<input type="file" #csvReader name="Upload CSV" id="txtFileUpload" (change)="uploadListener($event)" [disabled]="organisation_id==''"
                                  +				accept=".csv" class="import-csv" />
                                  +		</div>
                                  +	</div>
                                  +	<div class="spinner-border text-green" role="status" *ngIf="loading">
                                  +		<span class="sr-only">Loading...</span>
                                  +	</div>
                                  +	<div class="error-table" *ngIf="resp.has_errors">
                                  +		<span>Au fost importate {{resp.rows_imported}} rânduri din {{resp.rows_discovered}}. Au apărut erori la unele rânduri:</span>
                                  +		<div class="col-md-12" *ngFor="let err of resp.errors">
                                  +			<span>Rândul {{err.line}}: </span>
                                  +			<div *ngFor="let ex of err.error">
                                  +				<span>{{ex.value}} &nbsp; - &nbsp; {{ex.error}}</span>				
                                  +			</div>
                                  +		</div>
                                  +	</div>
                                  +</div>
                                  +
                                  + +
                                  +

                                  + ./import-volunteers.component.scss +

                                  +
                                  .error-table {
                                  +    margin-top: 100px;
                                  +}
                                  +
                                  + +
                                  +
                                  +
                                  +
                                  + Legend +
                                  +
                                  +
                                  Html element +
                                  +
                                  +
                                  Component +
                                  +
                                  +
                                  Html element with directive +
                                  +
                                  +
                                  + + +
                                  + + + + + + + + + + + + + + + + + + + + + +
                                  +
                                  +

                                  result-matching ""

                                  +
                                    +
                                    +
                                    +

                                    No results matching ""

                                    +
                                    +
                                    +
                                    + +
                                    +
                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/InfoComponent.html b/documentation/components/InfoComponent.html new file mode 100644 index 0000000..33ee6f5 --- /dev/null +++ b/documentation/components/InfoComponent.html @@ -0,0 +1,406 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                    +
                                    + + +
                                    +
                                    + + + + + + + + +
                                    +

                                    +

                                    File

                                    +

                                    +

                                    + src/app/pages/info/info/info.component.ts +

                                    + + + +

                                    +

                                    Implements

                                    +

                                    +

                                    + OnInit +

                                    + + +
                                    +

                                    Metadata

                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                    selectorapp-info
                                    styleUrls./info.component.scss
                                    templateUrl./info.component.html
                                    +
                                    + +
                                    +

                                    Index

                                    + + + + + + + + + + + + + + + +
                                    +
                                    Methods
                                    +
                                    + +
                                    +
                                    + +
                                    +

                                    Constructor

                                    + + + + + + + + + + + + + +
                                    +constructor() +
                                    + +
                                    +

                                    Component to show on info page. All data is static

                                    +
                                    +
                                    +
                                    + + + + + +
                                    + +

                                    + Methods +

                                    + + + + + + + + + + + + + + + + + + + +
                                    + + + + ngOnInit + + + +
                                    +ngOnInit() +
                                    + +
                                    + +
                                    + Returns : void + +
                                    +
                                    +
                                    + +
                                    + + +
                                    +
                                    import { Component, OnInit } from '@angular/core';
                                    +
                                    +@Component({
                                    +	selector: 'app-info',
                                    +	templateUrl: './info.component.html',
                                    +	styleUrls: ['./info.component.scss']
                                    +})
                                    +
                                    +export class InfoComponent implements OnInit {
                                    +	/**
                                    +	* Component to show on info page. All data is static
                                    +	*/
                                    +	constructor() { }
                                    +
                                    +	ngOnInit() {
                                    +	}
                                    +
                                    +}
                                    +
                                    +
                                    + +
                                    +
                                    <div class="container">
                                    +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                    +        <h4 class="navtitle mb-2"> Despre Aplicație </h4> 
                                    +    </nav>
                                    +
                                    +    <div>
                                    +        <p>
                                    +            Resource and Volunteer Management este o aplicație menită să ofere sprijin în eventualitatea unei calamități majore care ar avea loc în România. RVM este un instrument de administrare de voluntari și resurse pe care le pune la dispoziție societatea civilă către Departamentul de Situații de Urgență în cazul unui seism major sau al unui alt dezastru natural. Aplicația permite managementul stocurilor de resurse disponibile, menținerea unei situații clare cu privire la cantități, tipuri de materiale și locurile în care acestea sunt depozitate, precum și statusul voluntarilor organizați pe specializări distincte.
                                    +        </p>
                                    +        <p>
                                    +            RVM are două componente principale:
                                    +        </p>
                                    +        <ul>
                                    +            <li>
                                    +                Aplicația web care permite gestionarea resurselor și a voluntarilor specializați în oferirea de prim-ajutor, dar și de intervenție de orice alt tip
                                    +            </li>
                                    +            <li>
                                    +                Aplicația mobilă care permite ofițerilor de intervenție din teren să mobilizeze voluntari sau să valideze identitatea unor voluntari deja existenți în platformă. 
                                    +            </li>
                                    +        </ul>
                                    +        <p>
                                    +            Sistemul are patru tipuri de utilizatori: 
                                    +        </p>
                                    +        <ul>
                                    +            <li>
                                    +                Administratorul DSU care are capacitatea de a urmări simplu care este nivelul de resurse disponibile din teren la orice moment și de a cere organizațiilor situații actualizate, poate da acces altor instituții în platformă și poate administra organizațiile, respectiv resursele centralizate în platformă.
                                    +            </li>
                                    +            <li>
                                    +                Administratorul ONG care are un cont dedicat unde își poate ține evidența resurselor pe care le poate face disponibile în cazul în care situația o cere.
                                    +            </li>
                                    +            <li>
                                    +                Administratorul instituțional care poate să listeze în platformă efectivele de intervenție ca aceștia să poată beneficia de aplicație pe teren în caz de dezastru.
                                    +            </li>
                                    +            <li>
                                    +                Ofițerul de intervenție care poate fi un angajat DSU, al Poliției, Jandarmeriei sau al altei instituții care intervine în caz de urgență și are nevoie să mobilizeze voluntari sau să valideze identitatea unor voluntari deja existenți în platformă.
                                    +            </li>
                                    +        </ul>
                                    +        <p>
                                    +            Aplicația RVM este dezvoltată de Code for Romania, în parteneriat cu Departamentul pentru Situații de Urgență și cu sprijinul World Bank.
                                    +        </p>
                                    +
                                    +        <div class="row justify-content-between logo-group">
                                    +            <img src="../../../../assets/images/DSU_logo.PNG" class="col-md-3"/>
                                    +            <img src="../../../../assets/images/code_4_romania_logo.svg" class="col-md-3"/>
                                    +            <img src="../../../../assets/images/world_bank_logo.JPG" class="col-md-3"/>
                                    +            <img src="../../../../assets/images/GFDPR_logo.jpg" class="col-md-3"/>
                                    +        </div>
                                    +    </div>
                                    +
                                    +</div>
                                    +
                                    +
                                    +
                                    + +
                                    +

                                    + ./info.component.scss +

                                    +
                                    .logo-group img {
                                    +    object-fit: contain;
                                    +}
                                    +
                                    + +
                                    +
                                    +
                                    +
                                    + Legend +
                                    +
                                    +
                                    Html element +
                                    +
                                    +
                                    Component +
                                    +
                                    +
                                    Html element with directive +
                                    +
                                    +
                                    + + +
                                    + + + + + + + + + + + + + + + + + + + + + +
                                    +
                                    +

                                    result-matching ""

                                    +
                                      +
                                      +
                                      +

                                      No results matching ""

                                      +
                                      +
                                      +
                                      + +
                                      +
                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/LoginComponent.html b/documentation/components/LoginComponent.html new file mode 100644 index 0000000..7f0b2af --- /dev/null +++ b/documentation/components/LoginComponent.html @@ -0,0 +1,777 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                      +
                                      + + +
                                      +
                                      + + + + + + + + +
                                      +

                                      +

                                      File

                                      +

                                      +

                                      + src/app/pages/authentication/login/login.component.ts +

                                      + + + +

                                      +

                                      Implements

                                      +

                                      +

                                      + OnInit +

                                      + + +
                                      +

                                      Metadata

                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      selectorapp-login
                                      styleUrls./login.component.scss
                                      templateUrl./login.component.html
                                      +
                                      + +
                                      +

                                      Index

                                      + + + + + + + + + + + + + + + + + + + + + +
                                      +
                                      Properties
                                      +
                                      + +
                                      +
                                      Methods
                                      +
                                      + +
                                      +
                                      + +
                                      +

                                      Constructor

                                      + + + + + + + + + + + + + +
                                      +constructor(router: Router, authenticationService: AuthenticationService) +
                                      + +
                                      +
                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      NameTypeOptional
                                      router + Router + + No +
                                      authenticationService + AuthenticationService + + No +
                                      +
                                      +
                                      +
                                      + + + + + +
                                      + +

                                      + Methods +

                                      + + + + + + + + + + + + + + + + + + + +
                                      + + + + Public + changeErrorMessage + + + +
                                      + + changeErrorMessage() +
                                      + +
                                      +

                                      On error broadcast message to ngb-alert. +After DeboundeTime we set errorMessage to null

                                      +
                                      + +
                                      + Returns : void + +
                                      +
                                      + + + + + + + + + + + + + + + + + + + +
                                      + + + + login + + + +
                                      +login() +
                                      + +
                                      +

                                      Login with username and password obtained from form loginForm.

                                      +

                                      On success redirects to dashboard

                                      +
                                      + +
                                      + Returns : void + +
                                      +
                                      + + + + + + + + + + + + + + + + + + + +
                                      + + + + ngOnInit + + + +
                                      +ngOnInit() +
                                      + +
                                      + +
                                      + Returns : void + +
                                      +
                                      +
                                      +
                                      + +

                                      + Properties +

                                      + + + + + + + + + + + + + + +
                                      + + + + Private + _success + + +
                                      + Default value : new Subject<string>() +
                                      + +
                                      + + + + + + + + + + + + + + + + + +
                                      + + + + errorMessage + + +
                                      + Type : string + +
                                      + +
                                      +

                                      Message to be displaied on error

                                      +
                                      +
                                      + + + + + + + + + + + + + + + + + +
                                      + + + + isLoading + + +
                                      + Default value : false +
                                      + +
                                      +

                                      Flag for html loader

                                      +
                                      +
                                      + + + + + + + + + + + + + + + + + +
                                      + + + + loginForm + + +
                                      + Type : FormGroup + +
                                      + +
                                      +

                                      Form that stores login data

                                      +
                                      +
                                      + + + + + + + + + + + + + + +
                                      + + + + Public + router + + +
                                      + Type : Router + +
                                      + +
                                      +
                                      + +
                                      + + +
                                      +
                                      import { Component, OnInit } from '@angular/core';
                                      +import { FormGroup, Validators, FormControl } from '@angular/forms';
                                      +import { Router } from '@angular/router';
                                      +import { AuthenticationService } from '@app/core';
                                      +import { finalize, debounceTime } from 'rxjs/operators';
                                      +import { Subject } from 'rxjs/internal/Subject';
                                      +
                                      +@Component({
                                      +	selector: 'app-login',
                                      +	templateUrl: './login.component.html',
                                      +	styleUrls: ['./login.component.scss']
                                      +})
                                      +export class LoginComponent implements OnInit {
                                      +	/**
                                      +	 * Form that stores login data
                                      +	 */
                                      +	loginForm: FormGroup;
                                      +	/**
                                      +	 * Flag for html loader
                                      +	 */
                                      +	isLoading = false;
                                      +	/**
                                      +	 * Message to be displaied on error
                                      +	 */
                                      +	errorMessage: string;
                                      +	constructor(
                                      +		public router: Router,
                                      +		private authenticationService: AuthenticationService) {
                                      +		this.loginForm = new FormGroup({
                                      +			email: new FormControl('', [Validators.required]),
                                      +			password: new FormControl('', [Validators.required])
                                      +		});
                                      +	}
                                      +	private _success = new Subject<string>();
                                      +
                                      +	ngOnInit() {
                                      +		this._success.subscribe(message => (this.errorMessage = message));
                                      +		this._success
                                      +			.pipe(debounceTime(5000))
                                      +			.subscribe(() => (this.errorMessage = null));
                                      +	}
                                      +	/**
                                      +	 * On error broadcast message to ngb-alert.
                                      +	 * After DeboundeTime we set errorMessage to null
                                      +	 */
                                      +	public changeErrorMessage() {
                                      +		this._success.next(
                                      +			'Nu s-a putut realiza autentificarea, vă rugăm verificați datele și reîncercați'
                                      +		);
                                      +	}
                                      +	/**
                                      +	 * Login with username and password obtained from form {@link loginForm}.
                                      +	 *
                                      +	 * On success redirects to dashboard
                                      +	 */
                                      +	login() {
                                      +		this.router.navigate(['/'], { replaceUrl: true });
                                      +		this.isLoading = true;
                                      +		this.authenticationService
                                      +			.login(this.loginForm.value)
                                      +			.pipe(
                                      +				finalize(() => {
                                      +					this.loginForm.markAsPristine();
                                      +					this.isLoading = false;
                                      +				})
                                      +			)
                                      +			.subscribe(
                                      +				(credentials: any) => {
                                      +					if (credentials.user.role !== '0') {
                                      +						this.router.navigate(['/'], {
                                      +							replaceUrl: true
                                      +						});
                                      +					} else {
                                      +						this.changeErrorMessage();
                                      +					}
                                      +				},
                                      +				(error: any) => {
                                      +					this.changeErrorMessage();
                                      +					console.log('Login error: ', error);
                                      +				}
                                      +			);
                                      +	}
                                      +}
                                      +
                                      +
                                      + +
                                      +
                                      <section id="wrapper" class="login-register login-sidebar">
                                      +	<!-- <div class="col-md-2 col-sm-1">&nbsp;</div> -->
                                      +	<div class="logo-container col-md-12 col-sm-12 col-xs-12">
                                      +		<img src="./../../../../assets/images/DSU_logo.PNG" />
                                      +	</div>
                                      +	<!-- <div class="col-md-2 col-sm-1">&nbsp;</div> -->
                                      +	<div class="login-box col-md-12 col-sm-12 col-xs-12">
                                      +		<div class="card-body">
                                      +			<form autocomplete="off" [formGroup]="loginForm" (ngSubmit)="login()" class="form-horizontal form-material"
                                      +				id="loginform" novalidate>
                                      +				<div class="form-group mt-4">
                                      +					<div class="col-xs-12">
                                      +						<input formControlName="email" autocomplete="new-password" class="form-control" type="text"
                                      +							placeholder="Nume Utilizator" />
                                      +					</div>
                                      +				</div>
                                      +				<div class="form-group">
                                      +					<div class="col-xs-12">
                                      +						<input autocomplete="new-password" formControlName="password" class="form-control"
                                      +							type="password" placeholder="Parola" />
                                      +					</div>
                                      +				</div>
                                      +				<ngb-alert *ngIf="errorMessage" class="error-message" type="success" (close)="successMessage = null">
                                      +					{{ errorMessage }}</ngb-alert>
                                      +				<div class="form-group text-center mt-4">
                                      +					<div class="col-xs-12">
                                      +						<button class="btn button-login btn-lg btn-block text-uppercase waves-effect waves-light"
                                      +							type="submit" [disabled]="loginForm.invalid || isLoading">
                                      +							<app-button-loader [isLoading]="isLoading" [label]="'Login'"></app-button-loader>
                                      +						</button>
                                      +					</div>
                                      +				</div>
                                      +			</form>
                                      +		</div>
                                      +	</div>
                                      +
                                      +	<div class="d-flex my-5">
                                      +		<a [routerLink]="['/recover']" class="navigation">
                                      +			Am uitat parola
                                      +		</a>
                                      +	</div>
                                      +</section>
                                      +
                                      + +
                                      +

                                      + ./login.component.scss +

                                      +
                                      :host ::ng-deep .help-block {
                                      +	color: white;
                                      +}
                                      +
                                      + +
                                      +
                                      +
                                      +
                                      + Legend +
                                      +
                                      +
                                      Html element +
                                      +
                                      +
                                      Component +
                                      +
                                      +
                                      Html element with directive +
                                      +
                                      +
                                      + + +
                                      + + + + + + + + + + + + + + + + + + + + + +
                                      +
                                      +

                                      result-matching ""

                                      +
                                        +
                                        +
                                        +

                                        No results matching ""

                                        +
                                        +
                                        +
                                        + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/MapComponent.html b/documentation/components/MapComponent.html new file mode 100644 index 0000000..ec8b799 --- /dev/null +++ b/documentation/components/MapComponent.html @@ -0,0 +1,1521 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                        +
                                        + + +
                                        +
                                        + + + + + + + + +
                                        +

                                        +

                                        File

                                        +

                                        +

                                        + src/app/pages/map/map/map.component.ts +

                                        + + + +

                                        +

                                        Implements

                                        +

                                        +

                                        + OnInit +

                                        + + +
                                        +

                                        Metadata

                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        selectorapp-map
                                        styleUrls./map.component.scss
                                        templateUrl./map.component.html
                                        +
                                        + +
                                        +

                                        Index

                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        +
                                        Properties
                                        +
                                        + +
                                        +
                                        Methods
                                        +
                                        + +
                                        +
                                        HostListeners
                                        +
                                        + +
                                        +
                                        + +
                                        +

                                        Constructor

                                        + + + + + + + + + + + + + +
                                        +constructor(mapservice: MapService) +
                                        + +
                                        +
                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                        NameTypeOptional
                                        mapservice + MapService + + No +
                                        +
                                        +
                                        +
                                        + + + + +
                                        +

                                        HostListeners

                                        + + + + + + + + + + + + + + + + + + + + + +
                                        + + + + click + + + +
                                        + Arguments : '$event' +
                                        +click(event: any) +
                                        + +
                                        +

                                        Click listener to check if user has clicked on map or outside of it

                                        +
                                        + +
                                        +
                                        +
                                        + +

                                        + Methods +

                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + deselectCountybyId + + + +
                                        +deselectCountybyId(e: any) +
                                        + +
                                        + +
                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                        NameTypeOptional
                                        e + any + + No +
                                        +
                                        +
                                        +
                                        +
                                        + Returns : void + +
                                        +
                                        + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + ngOnInit + + + +
                                        +ngOnInit() +
                                        + +
                                        + +
                                        + Returns : void + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + selectCountybyId + + + +
                                        +selectCountybyId(id: any, e: any) +
                                        + +
                                        + +
                                        + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        NameTypeOptional
                                        id + any + + No +
                                        e + any + + No +
                                        +
                                        +
                                        +
                                        +
                                        + Returns : void + +
                                        +
                                        + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + setIcon + + + +
                                        +setIcon(i: any) +
                                        + +
                                        + +
                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                        NameTypeOptional
                                        i + any + + No +
                                        +
                                        +
                                        +
                                        +
                                        + Returns : void + +
                                        +
                                        + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + setIcons + + + +
                                        +setIcons() +
                                        + +
                                        + +
                                        + Returns : void + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + tooltip + + + +
                                        +tooltip(x: any, y: any, txt: string) +
                                        + +
                                        + +
                                        + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        NameTypeOptional
                                        x + any + + No +
                                        y + any + + No +
                                        txt + string + + No +
                                        +
                                        +
                                        +
                                        +
                                        + Returns : void + +
                                        +
                                        + +
                                        +
                                        + + + + + + + + + + + + + + + + + + + +
                                        + + + + tooltipOut + + + +
                                        +tooltipOut() +
                                        + +
                                        + +
                                        + Returns : void + +
                                        +
                                        +
                                        +
                                        + +

                                        + Properties +

                                        + + + + + + + + + + + + + + + + + + + + +
                                        + + + + adjustments + + +
                                        + Type : any + +
                                        + Default value : { + 'Dambovita': { + vol_x: -15, + vol_y: 20, + res_x: -5, + res_y: -10 + }, + 'Tulcea': { + vol_x: -35, + vol_y: 0, + res_x: -35, + res_y: 0 + }, + 'Ialomita': { + vol_x: 0, + vol_y: -5, + res_x: 0, + res_y: -5 + }, + 'Constanta': { + vol_x: 15, + vol_y: 0, + res_x: 15, + res_y: 0 + }, + 'Alba': { + vol_x: 10, + vol_y: -20, + res_x: 10, + res_y: -20, + }, + 'Timis': { + vol_x: 0, + vol_y: -10, + res_x: 0, + res_y: -10, + }, + 'Cluj': { + vol_x: 0, + vol_y: 20, + res_x: 0, + res_y: 20, + }, + 'Neamt': { + vol_x: -10, + vol_y: 0, + res_x: -10, + res_y: 0, + }, + 'Brasov': { + vol_x: -20, + vol_y: 0, + res_x: -20, + res_y: 0, + }, + 'Ilfov': { + vol_x: -15, + vol_y: 10, + res_x: 10, + res_y: -15 + }, + 'Harghita': { + vol_x: 0, + vol_y: 15, + res_x: 0, + res_y: 15 + }, + 'Mehedinti': { + vol_x: 0, + vol_y: 20, + res_x: 10, + res_y: -25 + }, + 'Salaj': { + vol_x: -10, + vol_y: 0, + res_x: -10, + res_y: 0 + }, + 'Olt': { + vol_x: 10, + vol_y: 0, + res_x: 10, + res_y: 0 + }, + } +
                                        + +
                                        +

                                        Adjustments to align the icons so that they will fit within the county border

                                        +
                                        +
                                        + + + + + + + + + + + + + + + + + +
                                        + + + + hasclicked + + +
                                        + Default value : false +
                                        + +
                                        +

                                        Flag to check if a county is selected

                                        +
                                        +
                                        + + + + + + + + + + + + + + + + + +
                                        + + + + ids + + +
                                        + Type : any[] + +
                                        + +
                                        +

                                        Array of counties and county data

                                        +
                                        +
                                        + + + + + + + + + + + + + + + + + +
                                        + + + + previous + + +
                                        + Type : any + +
                                        + +
                                        +

                                        Var with the previous selected county

                                        +
                                        +
                                        +
                                        + +
                                        + + +
                                        +
                                        import { Component, OnInit, AfterViewInit, HostListener } from '@angular/core';
                                        +import { MapService } from '../map.service';
                                        +
                                        +@Component({
                                        +	selector: 'app-map',
                                        +	templateUrl: './map.component.html',
                                        +	styleUrls: ['./map.component.scss']
                                        +})
                                        +export class MapComponent implements OnInit {
                                        +	/**
                                        +	* Array of counties and county data
                                        +	*/
                                        +	ids: any[];
                                        +	/**
                                        +	* Adjustments to align the icons so that they will fit within the county border
                                        +	*/
                                        +	adjustments: any =	{
                                        +			'Dambovita': {
                                        +				vol_x: -15,
                                        +				vol_y: 20,
                                        +				res_x: -5,
                                        +				res_y: -10
                                        +			},
                                        +			'Tulcea': {
                                        +				vol_x: -35,
                                        +				vol_y: 0,
                                        +				res_x: -35,
                                        +				res_y: 0
                                        +			},
                                        +			'Ialomita': {
                                        +				vol_x: 0,
                                        +				vol_y: -5,
                                        +				res_x: 0,
                                        +				res_y: -5
                                        +			},
                                        +			'Constanta': {
                                        +				vol_x: 15,
                                        +				vol_y: 0,
                                        +				res_x: 15,
                                        +				res_y: 0
                                        +			},
                                        +			'Alba': {
                                        +				vol_x: 10,
                                        +				vol_y: -20,
                                        +				res_x: 10,
                                        +				res_y: -20,
                                        +			},
                                        +			'Timis': {
                                        +				vol_x: 0,
                                        +				vol_y: -10,
                                        +				res_x: 0,
                                        +				res_y: -10,
                                        +			},
                                        +			'Cluj': {
                                        +				vol_x: 0,
                                        +				vol_y: 20,
                                        +				res_x: 0,
                                        +				res_y: 20,
                                        +			},
                                        +			'Neamt': {
                                        +				vol_x: -10,
                                        +				vol_y: 0,
                                        +				res_x: -10,
                                        +				res_y: 0,
                                        +			},
                                        +			'Brasov': {
                                        +				vol_x: -20,
                                        +				vol_y: 0,
                                        +				res_x: -20,
                                        +				res_y: 0,
                                        +			},
                                        +			'Ilfov': {
                                        +				vol_x: -15,
                                        +				vol_y: 10,
                                        +				res_x: 10,
                                        +				res_y: -15
                                        +			},
                                        +			'Harghita': {
                                        +				vol_x: 0,
                                        +				vol_y: 15,
                                        +				res_x: 0,
                                        +				res_y: 15
                                        +			},
                                        +			'Mehedinti': {
                                        +				vol_x: 0,
                                        +				vol_y: 20,
                                        +				res_x: 10,
                                        +				res_y: -25
                                        +			},
                                        +			'Salaj': {
                                        +				vol_x: -10,
                                        +				vol_y: 0,
                                        +				res_x: -10,
                                        +				res_y: 0
                                        +			},
                                        +			'Olt': {
                                        +				vol_x: 10,
                                        +				vol_y: 0,
                                        +				res_x: 10,
                                        +				res_y: 0
                                        +			},
                                        +		};
                                        +	/**
                                        +	* Flag to check if a county is selected
                                        +	*/
                                        +	hasclicked = false;
                                        +	/**
                                        +	* Var with the previous selected county
                                        +	*/
                                        +	previous: any;
                                        +		/**
                                        +	* Click listener to check if user has clicked on map or outside of it
                                        +	*/
                                        +	@HostListener('click', ['$event']) onClick(event: any) {
                                        +		/*
                                        +		* If a county is already selected
                                        +		*/
                                        +		if (this.hasclicked) {
                                        +			/*
                                        +			* if the user has clicked inside the rect of a county
                                        +			*/
                                        +			if (event.target.nodeName === 'path') {
                                        +					/*
                                        +				* if there is a previously selected county, it must be deselected
                                        +				*/
                                        +				if (this.previous && this.previous.event) {
                                        +					this.deselectCountybyId(this.previous.event);
                                        +				}
                                        +					/*
                                        +				* Select the new county
                                        +				*/
                                        +				this.selectCountybyId(event.target.getAttribute('id'), event);
                                        +			} else {
                                        +				/*
                                        +				* User has clicked ouside the map and there already is a selected county. must deslect the county
                                        +				*/
                                        +				if (this.previous && this.previous.id) {
                                        +					this.deselectCountybyId(this.previous.event);
                                        +				}
                                        +				this.hasclicked = false;
                                        +			}
                                        +		} else {
                                        +				/*
                                        +			* First time click. If inside a county select the county
                                        +			*/
                                        +			if (event.target.nodeName === 'path') {
                                        +				this.hasclicked = true;
                                        +				this.selectCountybyId(event.target.getAttribute('id'), event);
                                        +			}
                                        +		}
                                        +	}
                                        +
                                        +	constructor(private mapservice: MapService) {
                                        +	}
                                        +
                                        +	ngOnInit() {
                                        +			/*
                                        +			* Get nr of resources and nr of volunteers per county
                                        +			*/
                                        +		this.mapservice.getMapFilters().subscribe((res: any) => {
                                        +			res.map((elem: any) => {
                                        +
                                        +				elem.id = elem._id;
                                        +				elem.icons = [];
                                        +				if (elem.nrResurse !== 0) {
                                        +					elem.icons.push('res');
                                        +				}
                                        +				if (elem.nrVoluntari !== 0) {
                                        +					elem.icons.push('vol');
                                        +				}
                                        +				return elem;
                                        +			});
                                        +			this.ids = res;
                                        +			setTimeout(() => {
                                        +				this.setIcons();
                                        +			}, 0);
                                        +		});
                                        +	}
                                        +	/*
                                        +			* If there are volunteers or resources in a county, render icons over said county
                                        +			*/
                                        +	setIcons() {
                                        +		for (let i = 0; i < this.ids.length; i++) {
                                        +			if (this.ids[i].name !== 'București' && this.ids[i].name !== 'Ilfov') {
                                        +				this.setIcon(i);
                                        +			}
                                        +		}
                                        +	}
                                        +/*
                                        +			* Add icons over a specific county
                                        +			* @param {any} i the id of the county
                                        +			*/
                                        +	setIcon(i: any) {
                                        +		const p = (document.getElementById(this.ids[i].id) as any).getBBox();
                                        +		const cx = p.x + p.width / 2;
                                        +		const cy = p.y + p.height / 2;
                                        +		const adjust = this.adjustments[this.ids[i].slug];
                                        +		if (this.ids[i].icons.includes('res')) {
                                        +			const res = document.getElementById('icon_res_' + this.ids[i].id);
                                        +			res.setAttribute('x',  String(cx - 20 + (adjust ? adjust.res_x : 0)));
                                        +			res.setAttribute('y',  String(cy - 10 + (adjust ? adjust.res_y : 0)));
                                        +			res.setAttribute('width', '20');
                                        +			res.setAttribute('height', '20');
                                        +		}
                                        +		if (this.ids[i].icons.includes('vol')) {
                                        +			const vol = document.getElementById('icon_vol_' + this.ids[i].id);
                                        +			vol.setAttribute('x',  String(cx + 5 + (adjust ? adjust.vol_x : 0)));
                                        +			vol.setAttribute('y',  String(cy - 10 + (adjust ? adjust.vol_y : 0)));
                                        +			vol.setAttribute('width', '20');
                                        +			vol.setAttribute('height', '20');
                                        +		}
                                        +	}
                                        +/*
                                        +			* highlight county and add label over it
                                        +			* @param {any} i the id of the county
                                        +			*/
                                        +	selectCountybyId(id: any, e: any) {
                                        +		if (e.target && e.target.nodeName === 'path') {
                                        +			this.previous = {id: id, event: e};
                                        +			const p = e.target.getBBox();
                                        +			const cx = p.x + p.width / 2;
                                        +			const cy = p.y + p.height / 2;
                                        +			this.tooltip(cx, cy,
                                        +				this.ids.find(x => x.id === id).name +
                                        +				'<br/> Resurse: ' + this.ids.find(x => x.id === id).nrResurse +
                                        +				'<br/> Voluntari: ' + this.ids.find(x => x.id === id).nrVoluntari);
                                        +			e.target.setAttribute('fill', '#264998');
                                        +		}
                                        +	}
                                        +/*
                                        +			* add tooltip on the provided coordinates
                                        +			* @param {any} x the x coord
                                        +			* @param {any} y the y coord
                                        +			* @param {any} txt the string to be shown
                                        +			*/
                                        +	tooltip(x: any, y: any, txt: string) {
                                        +		const text: any = document.getElementById('recttext');
                                        +		text.innerHTML = txt;
                                        +		const p = text.getBBox();
                                        +		setTimeout(function() {
                                        +			text.setAttribute('width', p.width - 110);
                                        +			text.setAttribute('height', p.height + 110);
                                        +			text.setAttribute('x', String(x - p.width / 2 - p.x));
                                        +			text.setAttribute('y',  String(y - p.height / 2 - p.y));
                                        +			text.setAttribute('fill', '#000000');
                                        +			const rect = document.getElementById('recttest');
                                        +			rect.setAttribute('x',   String(x - (p.width / 2) - 5));
                                        +			rect.setAttribute('y',   String(y - (p.height / 2) - 5));
                                        +			rect.setAttribute('width', p.width + 10);
                                        +			rect.setAttribute('height', p.height + 10);
                                        +			rect.setAttribute('fill', '#ffffff');
                                        +		}, 0);
                                        +
                                        +	}
                                        +/*
                                        +			* delete tooltip
                                        +			*
                                        +			*/
                                        +	tooltipOut() {
                                        +		const text = document.getElementById('recttext');
                                        +		text.innerHTML = '';
                                        +		text.setAttribute('x', '0');
                                        +		text.setAttribute('y', '0');
                                        +
                                        +		const rect = document.getElementById('recttest');
                                        +		rect.setAttribute('x', '0');
                                        +		rect.setAttribute('y', '0');
                                        +		rect.setAttribute('width', '0');
                                        +		rect.setAttribute('height', '0');
                                        +	}
                                        +/*
                                        +			* dehighlight county by id
                                        +			* @param {any} e the rect of the county
                                        +			*/
                                        +	deselectCountybyId(e: any) {
                                        +		if (e.target && e.target.nodeName === 'path') {
                                        +			// const p = e.target.getBBox();
                                        +			// const cx = p.x + p.width / 2;
                                        +			// const cy = p.y + p.height / 2;
                                        +
                                        +			this.tooltipOut();
                                        +
                                        +			e.target.setAttribute('fill', '#f3d973');
                                        +		}
                                        +	}
                                        +}
                                        +
                                        +
                                        + +
                                        +
                                        <div class="container container-ph mt-2">
                                        +    <div class="svg-box">
                                        +<svg 
                                        +    class="svg-box-content"
                                        +    viewBox="0 0 1000 705"
                                        + preserveAspectRatio="none"
                                        +    version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
                                        +    <path fill="#f3d973" stroke="#fff" 
                                        +    d="m373.8 546.1l0.8 3.5 0.1 1.2 0.5 1.3 0.8 1.1 1.9 1.1 1.6 0.7 3.5 2.2 1 0.9 1 1.3 2.1 7.3 1.3 2.3 1.7 2.6 3 3.1-4 4.7-1.4 2.6-0.1 2.2 0.4 1.1 0.9 1 4.2 2.5 1.2 1.2 2.8 4 0.8 1 2.3 0.6 1.3 0.7 1.5 1.6 1.4 2.9 1.2 1.9 1.3 1.4 2.4 1.9 1 1.2 1.8 3.9 1.1 1.6 1.1 1.3 3.8 2.5 2.7 1 1.2 0.9 2 2.1 0.6 1.4 0 1.2-0.9 2.1-0.2 1.9 0.2 2.2 0.8 3.6 2.2 4 0 0.9-0.7 0.3-3.6-0.7-1 0.1-1.1 1.1-0.1 2.5-1.1 5 0.2 0.9 0.6 0.9 1.8 0.7 3.3 0.2 1.4 0.3 1.4 1.2 0.5 1.4 0.2 1.5-0.2 1.3-0.4 0.9-2 1.2-1 0.7-0.5 1.3 0.2 1.2 1.5 2.5 0.3 1.2-0.2 1-1.3 4-0.6 1-1.5 1.1-0.3 0.7-0.3 1.7-0.5 0.8-1.9 1.5-0.7 1.1-5.8 12.3-36.9-9.3-6-3.6-2.4-0.4-8.9 2-4.6-0.8-11.4-6.3-16.8-0.9-9.6 1.4-3.9 2.1-3.7 0.8-3.2 1.4-22.4 2-3.3-0.8-2.6-2.3-1.3-2.8-0.1-3.3 2.6-11 1.1-3.3 2.1-1.4 2.2-0.3 4.2-1.4 2.3-0.3 3.7-2.1 1.8-4.5-1-4.5-2.3-1.1 8.6-9.1 3.3-0.9 1.1 0.2 0.8-0.5 0.4-1.8 0-1.7-0.3-1.8-0.7-2.4-0.2-1.9 0.3-1.7 2.2-4.8 0.3-1.2 0.5-3.7 0.5-2.6 0.6-1.9 0.9-1.3 5.6-3.2 1.4-0.2 2.1 0.4 0.6-0.2 0.2-1-0.3-0.8-1.4-1.1-3.3-0.4-1.2-0.3-0.8-0.6-0.4-1 0-1 0.8-3.2 0.2-1.2 0.4-0.8 0.8-0.8 2.1-0.7 1.6-0.8 1.4-1.6 1.4-2.1 2.3-2 0-0.6-2.4-0.9 0.4-0.5 1.4-0.7 6.6-0.4 1.3-0.9 1.7-0.7 2.6-0.6 5.8 0.3 1.5-1.7 9.7-6.8 10-3.2 5-0.3 0.9-0.6 0.5-0.8 0-2.2-0.4-2.7 0.4-2.2 0.1-1.7-0.5-3.8 0.3-2.2 0.5-0.6 1.3-0.1 1.4 0.6 1 1.1z" id="county_romania_dolj_0" name="Dolj">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff"  
                                        +    d="m373.8 546.1l-1-1.1-1.4-0.6-1.3 0.1-0.5 0.6-0.3 2.2 0.5 3.8-0.1 1.7-0.4 2.2 0.4 2.7 0 2.2-0.5 0.8-0.9 0.6-5 0.3-10 3.2-9.7 6.8-1.7-3.6-1.1-1.5-5.9-5.9-6.8-4.7-2.5-1.1-18.3-5.3-2-1-2.4-1.7-8.1-7.7-9.4-10.7-0.7-1.7-0.3-1.6-0.4-3.2-1-4-0.2-2.7 0.5-2.5 0.5-1.3 0-1.3-0.5-1.3-1.3-1.3-2.7-1.7-1.7-1.6-1.2-1.4-0.8-1.3-1-1-1.3-0.6-2-0.3-5 0.6-1.6-0.4-1.9-1-4.6-5.9-4.1-1.9 0.6-3.2-0.6-1.2-0.7-0.9-1-0.3-4-0.2-1.3-0.5-0.9-0.7-0.4-1.2 0.2-1.5 0.9-2.1 3-4 7.2-6.4 22.4-8.2 1.1-0.2 1.4 0.7 0.7 1 1 0.8 1.2 0.4 4.6 0.3 0.9 0.4 1.7 1.6 1.1 0.4 1.6-0.1 6.8-2.9 2.6-0.2 1.6 0.2 3.2 1.5 1.3 0 1.7-0.4 5.7-3.5 1.7-0.6 4.7-1 3.6-1.8 2-0.6 2.7 0.1 1.6 0.4 1.5 0.8 1.9 1.4 0.9 0.1 1.1-0.4 1.8-1.5 6-3.3 6.6-2.2 3.2 1 5.1 0 1.2 0.4 2 1.1 1.6 0.3 1.9 0.1 6.5-0.7 1.8 0.4 1.8 1.4 0.8 1.2 0.5 1.7-1.4 5.8-0.2 2.9 0.8 4.1 1.1 2.7 0.5 2.1-0.2 1.8-1.7 5-0.4 2.2 0.4 5.1-0.1 2-2.9 11.7-1.2 3.3-0.5 2-0.2 2.9 1.5 17.1-0.4 7.9-1.5 8.6z" id="county_romania_gorj_32" name="Gorj">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff"  
                                        +    d="m343.6 571.6l-1.5 1.7-5.8-0.3-2.6 0.6-1.7 0.7-1.3 0.9-6.6 0.4-1.4 0.7-0.4 0.5 2.4 0.9 0 0.6-2.3 2-1.4 2.1-1.4 1.6-1.6 0.8-2.1 0.7-0.8 0.8-0.4 0.8-0.2 1.2-0.8 3.2 0 1 0.4 1 0.8 0.6 1.2 0.3 3.3 0.4 1.4 1.1 0.3 0.8-0.2 1-0.6 0.2-2.1-0.4-1.4 0.2-5.6 3.2-0.9 1.3-0.6 1.9-0.5 2.6-0.5 3.7-0.3 1.2-2.2 4.8-0.3 1.7 0.2 1.9 0.7 2.4 0.3 1.8 0 1.7-0.4 1.8-0.8 0.5-1.1-0.2-3.3 0.9-8.6 9.1-2.2-0.9-4.8-0.7-3.8-1.7-22.8-15.6-0.5-2.1 0.4-7.1-0.8-2-2-1-4.4-0.6-4.1-1.8-3.5-3.1-2.8-3.8-1.9-4.3-0.1-1.1 0.3-2.4-0.1-1.1-0.5-1-2.2-2.1-0.3-1.2 0-1.9 0.3-2 0.4-1.4 0.8-0.6 0.9-0.3 3.8-0.2 1.3-0.6 0.9-1.5 0.3-2.5 0.6-2.5 1.6-1.5 2.1-0.6 2.2 0 2.2 0.9 3.8 2.6 2.3 0.6 2.1-0.4 2.3-1.1 1.9-1.9 0.6-2.7-5.3-5.9-1.6-1.2-8.3-1-3.6-1.7-3.6-3-7.3-8.1-1.6-0.9-1.9-0.5-2.6-0.1-1.1 0.9-3.7 4.1-2 1.2-4.4 1-1.6 1.2-0.6 2.3-12 21.8-1.4 1.4-2.5 0.7-2.3-0.3-2.4-1-1.8-1.8-1.1-4.3-1-1-1.2-0.7-1.1-1.1-0.6-1.1-0.5-2.9 5.7-1 1.4 0.2 2.6 0.7 2.5-0.1 1.1-0.6 0.9-1 0.5-1.9-0.1-1.8-0.5-2.1-0.8-2.5-0.1-1.9 0.2-1.9 0.4-1.8 0.7-2.2 1.1-2.5 2.4-4.1 0.9-2.4 0.6-2 0-1.2 0.3-1 0.6-0.8 1.6-0.3 1.1 0.2 1 0.5 3.6 3.7 1.5 0.9 1.1 0.1 3.4-0.1 0.9 0.2 1.5 1.1 1.2 2.3 0.8 0.4 1.1 0.1 1.6-0.3 1.1-0.9 1.1-1.7 1-3.3 1.6-7.1 2.6-6.7 4.5-7.4 1.1-3.5 0.6-2.4 0.5-3.5 0.4-1.8 0.8-2.2 3.4-5.4 4.5-4.8 4.1 1.9 4.6 5.9 1.9 1 1.6 0.4 5-0.6 2 0.3 1.3 0.6 1 1 0.8 1.3 1.2 1.4 1.7 1.6 2.7 1.7 1.3 1.3 0.5 1.3 0 1.3-0.5 1.3-0.5 2.5 0.2 2.7 1 4 0.4 3.2 0.3 1.6 0.7 1.7 9.4 10.7 8.1 7.7 2.4 1.7 2 1 18.3 5.3 2.5 1.1 6.8 4.7 5.9 5.9 1.1 1.5 1.7 3.6z" id="county_romania_mehedinti_36" name="mehedinti">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff"  
                                        +    d="m443.7 527.1l1.2 3.6 0.7 0.6 1 0.3 0.9-0.4 4.3-3.6 0.7-0.9 1.4-3.6 1.2-1.7 0.9-0.6 1 0.2 0.5 0.8 0.3 1.2-0.3 2.7 0.1 1.7 0.8 2 4.7 9.9 1.2 1.6 2.1 2.1 1.7 0.5 1.7 0 1.6-0.4 1.9 0.2 0.8 0.6 0.5 0.8-0.6 0.9-1.9 0.8-0.9 0.7-0.9 1.6 0.3 1.4 2.6 4.3 0.8 2.3 0.5 3.3 0.2 1.8 1.1 3.8 1 6.7-0.1 1-0.6 1.9-0.1 2.6 1.3 4.9 0.4 6.5 0.6 2.3 0.7 1.2 1 0.7 5.1 0.4 2.3 1.6-1.4 3.4-0.2 3.8 0.9 6.5 0.3 7-0.3 3.3-1.2 5-0.1 3.9 0.2 2.5 0.5 2.2 0.2 2.8-0.7 1.3-1.3 0.9-3.6 0.7-1.4 0.5-1.2 0.9-3.1 3.4-1.1 0.6-1.5 0.4-1.8 0.1-1.8 0.6-1.9 1-2.2 3-0.6 2.1 0.1 2.8 3.2 8.4 3.8 7.6 4.5 7.6 0.6 2.2-0.2 1.1-0.9 0.8-3 1.5-1.4 1-1.2 1.2-2.3 3.1-17-6.4-3.6-0.5-3.7 1.2-5.9 4.5-1.8 0.5-21 1.1-1-0.3 5.8-12.3 0.7-1.1 1.9-1.5 0.5-0.8 0.3-1.7 0.3-0.7 1.5-1.1 0.6-1 1.3-4 0.2-1-0.3-1.2-1.5-2.5-0.2-1.2 0.5-1.3 1-0.7 2-1.2 0.4-0.9 0.2-1.3-0.2-1.5-0.5-1.4-1.4-1.2-1.4-0.3-3.3-0.2-1.8-0.7-0.6-0.9-0.2-0.9 1.1-5 0.1-2.5 1.1-1.1 1-0.1 3.6 0.7 0.7-0.3 0-0.9-2.2-4-0.8-3.6-0.2-2.2 0.2-1.9 0.9-2.1 0-1.2-0.6-1.4-2-2.1-1.2-0.9-2.7-1-3.8-2.5-1.1-1.3-1.1-1.6-1.8-3.9-1-1.2-2.4-1.9-1.3-1.4-1.2-1.9-1.4-2.9-1.5-1.6-1.3-0.7-2.3-0.6-0.8-1-2.8-4-1.2-1.2-4.2-2.5-0.9-1-0.4-1.1 0.1-2.2 1.4-2.6 4-4.7 4-2.5 2.5-0.6 1.2 0.2 2.1 1.2 0.8 1.1 1 1.7 0.8 0.7 0.8 0.1 1.3-0.6 3.3-4.8 1.1-1.2 1.3-0.7 1.1-0.2 1.4 0 2.5 0.7 2.1-0.2 3.1-1.8 0.8-1.1 0.7-3.1 0.5-1.3 1.3-1 1 0 0.9 0.9-0.2 2.5 0.8 2 0.8 1 1 0.5 1.6-1.4-0.3-2.7-0.8-3.4-1.2-2.8-1.2-1.9 0.4-2.5-1.4-6.4-0.5-3.2 0-1.3 2-2.1 1.7-2.6 0.9-1.9 0.6-1.6 0.8-3.3 0.2-2 0.9-3.5 3-5.3 1.6-2 1.1-0.6 1-0.1 1.1 0.3 1.3 2.3-0.2 6.9z" id="county_romania_olt_41" name="Olt">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m557.2 578.2l2.3 1.8 0.2 1 0 1.2-1.9 3.2-2.2 5.6-0.5 1.9 0.4 1.2 1.8 3.4 1.4 4 1.1 1.7 1.3 1.1 9.3 1.2 1.5 0.5 3 2.8 2.1 1.5 0.9 1 0.6 1.6 0.4 2.3 0.1 3.8-0.3 2.2 0.5 4.2 0 2.2-0.2 1.7-0.9 0.7-3.1 0.9-1 0.7-0.4 1.2-0.5 3.1-0.5 1.5-1.2 2.7-0.6 1.8-0.2 2 0 2.3 0.9 8.4 2.7 15.3 1.3 3.6 2.5 3.6 0.6 1.9 1.8 15-6.5 0.2-1.9 1.3-1.6 1.6-2.3 1.4-2.4 1-2 0.5-1.9 1-2.4 0.3-4.8-0.3-2.2 0.4-4.4 2-2.4 0.6-4.6-0.6-3.9-2.3-3.6-2.8-3.8-2.3-4.4-1-13.6-1.1-12.5-4.4-22.3 1.5-4.9-0.7-4.7-1.7 2.3-3.1 1.2-1.2 1.4-1 3-1.5 0.9-0.8 0.2-1.1-0.6-2.2-4.5-7.6-3.8-7.6-3.2-8.4-0.1-2.8 0.6-2.1 2.2-3 1.9-1 1.8-0.6 1.8-0.1 1.5-0.4 1.1-0.6 3.1-3.4 1.2-0.9 1.4-0.5 3.6-0.7 1.3-0.9 0.7-1.3-0.2-2.8-0.5-2.2-0.2-2.5 0.1-3.9 1.2-5 0.3-3.3-0.3-7-0.9-6.5 0.2-3.8 1.4-3.4 4.5-1.2 5.7 1.5 1.9-0.1 1.6-0.4 1.9-1.3 1.3-1.6 1.1-0.8 1-0.2 3.3 0.5 2.6-0.7 1.5-0.6 2.3-2.3 2.2-1.3 4.8-0.9 2.4 0 1.8 0.2 1.7 0.5 3.4 1.7 2.3 0.9 1.2-0.1 1.8-0.6 2.1-2 1.1-1.6 1.6-2.8 2.1-2.6 0.5-0.8 0-0.9-0.8-1.5-0.1-0.9 0.6-0.5 1.5-0.3 2.4 0.5 5.9 2.8 2.6 0.2z" id="county_romania_teleorman_11" name="Teleorman">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" id="county_romania_bucuresti_8" name="Bucharest"
                                        +    d="m630.8 588.8l-1.6 4.7-5-1.6-0.8 2.3 3.3 8.1-2.8 2.5-5.1-6.7-5.8-1.3-7-7.5 0-4.7 7-0.6 0-4.7-5.6-2.4 5.1-8.9 7.1-2.6 0.9 9.9 8.3 2-2.6 7.6 4.6 3.9z" >
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m822 600.6l-3 7.4-2.8 3.5-3.5 2.2-15.3 3.8-3.8 3.1-2.1 1.3-4.4 0.8-8.8-0.1-4.1 1.4-5.6 3.4-1 1.1-0.8 1.4-1.8 1.5-2.2 1.1-1.7 0.6-16.1-2.6-2.9 2.5-1.3 1.9-2.8 0.2-2.2-1.3-11.1-2.2-7.7-4.8-2.7 1.7-12.4 1.3-10 6-3.8 1.1-4.7 0-1.2 0.3-2.1 1.3-1.1 0.3-2.1 0.3-3.5 1.2-20.9 3.1-0.2-2.1 0.3-1.5 0.8-1.8 3-4.4 0.7-2 0.3-2.4-0.3-3.6-0.9-3.2-1.4-2.9-2.4-2.6-9.4-5.6-4.9-5.8 1.2-3.9 2.7-4.3 2.7-3.6 1.8-1.8 2-1.4 6.3-3 1.2-1.3 1.2-2.4-0.1-0.8-0.6-0.6-2-0.7-1.5-0.9-1-1.1 0.1-1.9 0.4-0.9 1.9-1.3 8.4-4.4 1.7-0.3 1.5 0.4 1.5 0.8 3.3 2.5 1.3 0.5 1.5 0.2 1.8-0.3 2.6-0.9 1.9-1.4 1.6-2.1 0.7-0.6 1-0.3 0.9 0.4 3.4 3.4 1.8 1.1 2 0.6 2.6 0 1.7-0.3 1.6-0.1 1.2 0.4 3.1 1.8 2 0.4 6.1-1.1 2.1 0.2 2.4 0.5 7.8 3.3 2.5 0.6 3.2-0.1 6.1-1.1 18.8 0.4 1.9-0.5 3-1.2 2.7-0.4 3.2 0.1 14.7 2.8 3 1.5 5.9 1.3 1.3 0.6 1.7 1.5 2.2 2.5 4.3 3 9.7 4.1 15.9 5.2z" id="county_romania_calarasi_23" name="Calarasi">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m611.6 543.8l-2.6 3.1-1.3 1-0.7 1.5-0.4 1.5-0.6 1-2.3 1.7-0.4 0.9 0 0.9 0.4 0.9 3.6 1.2 0.4 1.2-0.5 1.3-1 1.4-5 6-2.4 1.9-32.5 2-3 0.8-2.1 1.1-1.1 1.3-2.9 3.7-2.6-0.2-5.9-2.8-2.4-0.5-1.5 0.3-0.6 0.5 0.1 0.9 0.8 1.5 0 0.9-0.5 0.8-2.1 2.6-1.6 2.8-1.1 1.6-2.1 2-1.8 0.6-1.2 0.1-2.3-0.9 2.3-4.2 0.3-2.7-1-3.7-0.1-2 0.6-1.5 1.9-3.6 0.1-1.3-0.4-1.1-1.8-1.1-2.4-0.4-1.1-0.4-0.9-0.6-2.9-2.9-1.1-1.5-2.7-5.3-0.3-1.8 0.4-1.2 2.4-1.5 0.4-0.7-2.1-2-1.5-1.8-0.2-1.7 0.3-1.7 1.6-2.9 0.5-1.3 0.2-1.6 0.9-12.2-0.3-2.3-1.7-8.1-0.2-2.9 0.2-2.5 0.6-1.3 3-3.5 0.5-1.3 0-1.4-0.5-1.9-1.2-2.9-3.3-3.8-1.5-2.5-1.1-5.9 0.1-2.9 0.5-2 0.5-0.9 1.1-2.7 1.1-1.1 0.7 0.1 0.7 0.7 1.2 2 0.8 0.7 0.9 0.3 1-0.2 0.9-0.7 1-1.1 0.8-1.6 1-2.4 0.8-3.1 0.2-3.5 0.5-2.4 0.6-2 0.8-1.6 1.6-2.7 0.7-1.6 0.5-2.5 0-1.8-0.4-1.5-0.6-1.4-1.6-2.9 6.4-1.7 2-2.5 0.5-1.6 0.9-1.9 0.8-0.9 2.1-1 1.9 9.4 0.7 6.7 0.5 1.8 0.7 1.3 3.2 2.4 1.1 1.2 1.2 2 0.7 1.8 0.3 1.5-0.3 4.1 0.1 2.1 1.6 2.8 2.1 2.3 1.2 1.8 5.8 11.3 4.4 4.9 0.9 1.6 0.4 1.6 0.7 6.4 0.8 3.7 0.8 1.9 0.9 1.6 1.1 1 2.3 1 1.2 0 2.9-0.8 0.8 0.4 1.1 1.2 1.4 2.4 0.5 2.1 0.1 2.1-0.6 4.3 0.4 2.7 0.8 1.4 1.2 0.9 5 0.7 1.6 0.6 1.8 1 7.3 9 1.3 1.1 2.1 1.1 1.2 0.4z" id="county_romania_dambovita_4" name="Dâmbovita">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m638.1 605.5l4.9 5.8 9.4 5.6 2.4 2.6 1.4 2.9 0.9 3.2 0.3 3.6-0.3 2.4-0.7 2-3 4.4-0.8 1.8-0.3 1.5 0.2 2.1-11.2 1.7-8.3 3.7-8.5 2.2-3.7 2-3.9 4.3-1.8 2.9-0.8 2.2-12.7 9.4-1 1.7-0.8 2.1-5 6.4-3.2 1.8-3.5 3.6-0.2 0.6-2.4 4-4.4 1.9-0.7 0.1-1.8-15-0.6-1.9-2.5-3.6-1.3-3.6-2.7-15.3-0.9-8.4 0-2.3 0.2-2 0.6-1.8 1.2-2.7 0.5-1.5 0.5-3.1 0.4-1.2 1-0.7 3.1-0.9 0.9-0.7 0.2-1.7 0-2.2-0.5-4.2 0.3-2.2-0.1-3.8-0.4-2.3-0.6-1.6-0.9-1-2.1-1.5-3-2.8-1.5-0.5-9.3-1.2-1.3-1.1-1.1-1.7-1.4-4-1.8-3.4-0.4-1.2 0.5-1.9 2.2-5.6 1.9-3.2 0-1.2-0.2-1-2.3-1.8 2.9-3.7 1.1-1.3 2.1-1.1 3-0.8 32.5-2 2.6 5.7-0.4 4.3-0.5 1.6-1.7 3.3-1 2.9-1 6.7 0.7 2.8 1.1 1.8 2.8 1.4 2 0.7 1.5 1 0.8 1.8 0.8 0.8 0.9 0.3 2.4 0 1.2 0.6 8 7.2 1.8 1.1 1.6 0.8 1.7 0.4 1.6 0.3 1.4-0.1 1.4-0.3 1.3-0.8 2.6-2.1 5.7-6z" id="county_romania_giurgiu_21" name="Giurgiu">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff"  
                                        +    d="m735.3 531.7l8.7 3.6 1.7 0.2 2.1-0.1 2.4-1.2 1.8-0.6 1.4 0.2 1.3 0.7 3 1.2 28.8 0.8 4.1-0.9 2.4-0.8 1.8-1 2.4-0.8 4.9-0.5 2.2 0.4 1.9 1.2 0.8 1.1 3.2 3-1.7 1-1.1 1.6-0.8 2.1 0.8 2.7 1.5 2.6 1.9 2.1 2 0.8 2.6 0.4 1.9 1 5.6 6.3 0.4 0.9-0.1 1.3-0.6 3.5-0.7 1.6 0 5.2-0.7 1.4-1.1 0.5 0.3 1.2 1.4 1.4 2.3 1.3 2.6 0.9 2 0.4 0.8 1.2 0.9 2.7 0.7 3 0.2 2.3-1.2 1.8-4.4 3.6-1 1.1-2.7 6.5-15.9-5.2-9.7-4.1-4.3-3-2.2-2.5-1.7-1.5-1.3-0.6-5.9-1.3-3-1.5-14.7-2.8-3.2-0.1-2.7 0.4-3 1.2-1.9 0.5-18.8-0.4-6.1 1.1-3.2 0.1-2.5-0.6-7.8-3.3-2.4-0.5-2.1-0.2-6.1 1.1-2-0.4-3.1-1.8-1.2-0.4-1.6 0.1-1.7 0.3-2.6 0-2-0.6-1.8-1.1-3.4-3.4-0.9-0.4-1 0.3-0.7 0.6-1.6 2.1-1.9 1.4-2.6 0.9-1.8 0.3-1.5-0.2-1.3-0.5-3.3-2.5-1.5-0.8-1.5-0.4-1.7 0.3-8.4 4.4-2.5-1.9-3.3-1.7-0.9-1.3-0.3-1.2 0.5-2.5 1.2-2.3 0.9-1 4.1-2.9 0.7-0.8 0.5-1.2-0.3-1-0.9-1.1-6.5-3.6-1.1-1.4-0.2-2.4-0.3-1.2-0.8-1.5-0.3-1.2 0-2.5-0.6-0.7-1.1-0.4-4.2-0.6-2-0.6 3.8-3.6 3.6-1.7 1.5-0.1 1.2 0.3 2.5 1.4 2.3 0.2 1.2-0.5 1.8-2.1 1.5-1.2 1.4-0.3 5.7 0.5 1.5-0.4 1.4-0.8 1.9-1.6 1.3-2.4 2.7-3.4 2.4 1.2 3.5 3.1 1.9 0.5 2.5 0.2 7-0.5 6.3 1.1 2.4 0.8 1.5 0 3.7-0.7 2.1 0.1 2.5 0.9 3.1 2 1.4 0.6 1.5 0 1.5-0.9 1.1-1.2 1.3-0.8 1.6-0.2 2.5 0.7 1.7 0.9 1.4 0.9 1 1 0.6 1 0.1 1.1-0.2 1.9 0.1 1.5 0.4 0.4 1.5-0.1 3-1.2 2.4-0.6 1-0.5 0.5-0.7-0.5-0.8-1.9-1.5-0.7-0.7 0.5-1.5 2.3-1.2z" id="county_romania_ialomita_29" name="Ialomita">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m902.5 552.5l-0.4 2.1 0.3 2.4 0.9 0.6 5.6-1 2.5-1.5 2.3-2.3 2.2-2.8-1.5-3.1 7.3 2.4 1.7 1.2 0.5 2.6-0.9 3-1.8 2.3-2.5 0.8 1.9-2.5 1.7-2.8 0.3-2.5-2.4-1.4 0 1.1 0.7 1-0.2 0.5-2 0.5-1.5-1-1.1 0.3-1 1.7-2 1.6-3.3 3.5-7 3.7-1.5 1.3 1.9-3.5 0.3-1.5-1.6-0.2-1.3 0.3-1 1-0.4 1.9 1.4 0-0.7 1.5 0.4 1.2 1.1 0.8 1.4 0.6-4.2 1.3-1.6 1.4 0 2.3 1.5-2 1.5 0.9 1.3 1.1-0.9 2-1.2 3.8-0.9 4 0.5 2.9 0.9 0.2 0.8-1.1 0.6-1.6 0.7-3.5 1-1.2 2.1-1.4 3.2-4.3 1.8-2 1.9-0.9 2-0.5 1.5-1.6 0.9-2 0.4 0-1 2.5-6.9 13.4-5 3.8-9.5 12.9-1.1 3.3-0.3 1.8-1.4-1-1.6 0.7-1.4 1.2-1.1 1.7-0.6 1.8-0.3 2.1-0.2 5.6 0.5 1.8 1.7 3.2 1.4 4.6 0.4 2.2-0.4 1.3-2 0.5-1 1.1-0.6 1.5 0.7 2.7 1.8 11.9 1.8 7.6-0.2 2.1-1 1.4-0.5 2.7-1.5 4.2-0.4 2-2.5 5.1-0.4 1.4-1.7 8-0.6 1.4-0.4 1.4 0.5 1.4-0.4 1.3-0.4 3 0.2 1.6-0.5 1.4-15.2 0.9-22.5-3.9-21.8-10-3.6-2.8-4.7-16.9-2.5-4.2-5.9 0.7-7.3 4.1-6.9 1.7-4.8-6.6-2.1-4.4-2.4-0.9-6.3 2-20.1 0.2-1.1-0.9-2.1-3.6-1.2-1.1-6-2.9-2.2-2.5 0.5-3.3-1.7-1.4 1.3-1.9 2.9-2.5 16.1 2.6 1.7-0.6 2.2-1.1 1.8-1.5 0.8-1.4 1-1.1 5.6-3.4 4.1-1.4 8.8 0.1 4.4-0.8 2.1-1.3 3.8-3.1 15.3-3.8 3.5-2.2 2.8-3.5 3-7.4 2.7-6.5 1-1.1 4.4-3.6 1.2-1.8-0.2-2.3-0.7-3-0.9-2.7-0.8-1.2-2-0.4-2.6-0.9-2.3-1.3-1.4-1.4-0.3-1.2 1.1-0.5 0.7-1.4 0-5.2 0.7-1.6 0.6-3.5 0.1-1.3-0.4-0.9-5.6-6.3-1.9-1-2.6-0.4-2-0.8-1.9-2.1-1.5-2.6-0.8-2.7 0.8-2.1 1.1-1.6 1.7-1 1.7-0.3 2-0.1 2.1 0.5 3.1 2.1 2 0.4 2.2-0.8 2.1-2 9.6-0.8 5.3 2.1 9.1 8.6 4.6-1.1 2.2-6.4 6.1 0 5.3 6.4 7.6 3.2 8.4 0 6.8-2.1 6.1 3.2 6 1.4z" id="county_romania_constanta_33" name="Constanta">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m261 297.9l5.1 5.3-6.9 5.2-1.8 4-1 2.5-2.4 4-2.2 2-2 1.1-2.5 0.4-2-0.2-5.9-1.4-1.9 0.2-1.4 0.9-2.5 2.2-0.9 1.5-0.5 1.7 0.3 5-0.2 2.2-0.5 2.3-1.5 3.1-0.6 1.9-0.3 1.5 1.1 3.6 0.3 1.5-0.1 1.9-0.7 2.5-1.2 2.6-4.9 6.4-1.9 0.9-0.9 1.1-0.7 2.2-1.1 0.9-1.8 0.1-3.9 1-0.9 0.4-2.1 2-0.9 0-2.6-1.5-1.5-0.3-2.1 0.3-1.6 0-1.6-0.4-2.7-2.6-1.8-0.8-0.8-0.6-0.7-1.8-0.6-0.8-1.1-0.6-4.1-0.3-1.9-0.6-1.3-1.2-0.9-1.1-1.1-0.8-1.6-0.5-2.5 0-1.3 0.3-0.8 0.4-0.7 1.7-0.7 3.4-1 1.3-3.2 0.2-1-0.4-1.7-1.4-0.6 0-0.5 0.9-0.2 2.3 0.1 2.1-0.1 0.8-1.1-0.1-0.9-1.1-1.3-2.1-2.1-1.7-3.4-1.6-1.5 0-0.9 0.5-0.8 1-1.4 2.5-1.1 2.4-0.6 0.8-0.8 0.1-2-2.7-1.8-1.5-0.1-0.6 0.7-2.4-0.4-1.1-0.9-1.2-2.2-1.8-2.3-2.5-1.1-0.6-1.2-0.2-2.9 0.4-1-0.4-0.8-1.1-0.2-1.2-0.1-2.2-0.9-0.9-1.6-0.5-3.5-0.4-1.8 0.2-1.1 0.6-0.2 0.8-0.2 2.1-0.4 1-0.6 0.7-2.8 2.3-2.4 2.4-1.4 0.1-1.5-1.8-1.1-0.6-1.8 0-1.5 0.3-1.2 0.5-2.4 2.1-1.5 0-1.8-1-2.8-2.8-0.8-1.8-0.4-2-0.8-0.3-1.6 0.2-1 0.6-1 0.9-0.6 1.7-0.1 1.7-0.6 1.6-0.7 0.4-1.1 0.1-1.6-0.3-1.4-0.7-1.3-1.9-0.3-1 0.3-1.8-0.5-0.7-1.1-0.7-2.2-0.6-1.3 0.1-2 0.5-0.9 0-6.6-1.2-1.5-0.5-1.3-0.9-1.4-2.1-1.1-3-3.7-3.8-15-10.5-1.5-0.6 0.1-1.9 0.5-1.1 0.8-0.3 2 0.5 0.9-0.8 0-1.3-1-3.4-0.1-1.4 0.5-0.8 4.1-3.5 2.2-1.1 2.2-0.7 2.1 0.1 1 0.5 1.9 1.7 0.8 0.4 1.1-0.1 2.2-1.1 1.9 0.4 4 1.7 2.1-0.1 0.9-0.4 0.9 0 0.8 0.4 0.8 0.9 2 1.8 1.9-0.7 5.1-6.2 0.7-0.3 3 0 1.1-0.8 1.2-2.3 0.9-3 0.4-6.8 1.1-3.3 1.8-2.1 2-0.7 4.5-0.2 2.4-1.9-0.6-3.4-3.1-5.9 0.2-3.1 1.5-2.4 1.8-2.4 1.4-2.8 0.4-5.9 0.6-2.9 1.6-1.9 2.2-0.6 3.9 0.3 2.3-1.2 2.2-2.9 0.7-2 2.3 0.8 4.9 1.2 35.3-2 2.7 0.5 1.5 1.8 1.5 0.8 1.3 0.1 2 0 1.4 0.4 1.7 0.9 1.4 1.4 2.6 1 9.3 0.4 2.8 0.6 2 0.9 1.1 1.1 2.4 1.7 0.8 1 0.8 1.8 2.3 6.2 1.2 2.5 1.6 2 2.1 1.4 2.7 0.9 1.7 0.7 5 4.4 7.9 3 0.9 1 0.8 2.9 1.2 1.7 1.6 0.9 1.6 0.4 9.6 0.2 8 1.7 5 0.4 4.4-0.3z" id="county_romania_arad_28" name="Arad">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m247.7 150.9l-1.1 4.3-0.6 1.3-1.2 1.9-0.5 1.3-0.3 2.6-0.3 1.2-0.6 1.2-2.7 4-1.8 1.9 0.1 2.1 1.3 3.3 4.5 7.1 3.1 6.1 0.4 1.3 0.8 1.2 1.1 1.3 6.6 3.8 4.1 4.1 1.8 3.1-0.8 2.1-2.3 4.5-0.4 1.5 0.2 1 0.9 0.7 5.3 2.1 1.4 1.1 0.5 1.6-0.4 2.9-1.1 3.5-1.3 2.3-0.9 0.7-3.9 1.8-1.2 0.8-0.9 1.1-0.6 1.1-0.2 1.3 0.3 1.4 1.3 1.8 4.2 3.8 1.4 2.2 1.4 3.2 1.8 7.2 1 1.9 2.1 1.7 1 0.9 0.5 1.3-0.5 3.8 0 5.8-1.6-1-2.4-0.6-2.7 0.3-1.2 0.7-1.3 1.6-1.4 2.8-1.1 3.9-0.6 3.6 0.2 9.4 1.9 8.1-4.4 0.3-5-0.4-8-1.7-9.6-0.2-1.6-0.4-1.6-0.9-1.2-1.7-0.8-2.9-0.9-1-7.9-3-5-4.4-1.7-0.7-2.7-0.9-2.1-1.4-1.6-2-1.2-2.5-2.3-6.2-0.8-1.8-0.8-1-2.4-1.7-1.1-1.1-2-0.9-2.8-0.6-9.3-0.4-2.6-1-1.4-1.4-1.7-0.9-1.4-0.4-2 0-1.3-0.1-1.5-0.8-1.5-1.8-2.7-0.5-35.3 2-4.9-1.2-2.3-0.8 1.3-2.4 2.9-0.5 2.1-1.2 2-2.9 0.3-3-2.8-2-0.8-1.1 0.3-1.8 0.8-1.5 2.3-6.3 1.3-2.5 2.2-2 3.9-1.1 1.1-0.9 0.9-2-0.1-1.7-0.3-1.6-0.1-1.9 0.1-1.8 0.6-0.6 4.9-4 0.8-1.1 2.1-7.7 0.4-0.1-1.1-2-0.7-0.6-1.9-0.6-0.4-1.4 4.1-4.9 2.4-2.3 5.2-3.4 2.1-2.1 0.7-1.4 0.5-2.8 0.5-1.4 1-1.4 2.3-2.3 0.9-1.2 0.7-1.9-0.3-2.9 0-1.8 0.5-1.7 1.2-2.3 0.5-1.4 1.3-5.6 0.6-1.8 4.1-6 1.9-2.2 1.9-1.1 4.7-1.4 2.1-4.3-0.1-5.2-1-5.4-0.2-4.9 2-3.8 3.1-3.5 6.5-4.9 5.2-1.3 1.4-1.1 0.6-1.3 2.7 4.1 1.3 3.1 0.9 1.5 1.2 1.2 4.3 3.3 1.6 2.2 1.7 3.1 3 4.7 0.9 1.8 1.2 3.3 0.6 1.2 1 0.7 1.8 0.4 1.9-0.5 1.9 0 1.6 0.3 1-0.2 2.5-1.4 1.1-0.3 1.1 0.3 1.5 1 1.7 1.5 3.1 1.8 1.3 1.1 1 1.8 0.7 3.9 1 2.8z" id="county_romania_bihor_24" name="Bihor">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m257.1 468.8l-7.2 6.4-3 4-0.9 2.1-0.2 1.5 0.4 1.2 0.9 0.7 1.3 0.5 4 0.2 1 0.3 0.7 0.9 0.6 1.2-0.6 3.2-4.5 4.8-3.4 5.4-0.8 2.2-0.4 1.8-0.5 3.5-0.6 2.4-1.1 3.5-4.5 7.4-2.6 6.7-1.6 7.1-1 3.3-1.1 1.7-1.1 0.9-1.6 0.3-1.1-0.1-0.8-0.4-1.2-2.3-1.5-1.1-0.9-0.2-3.4 0.1-1.1-0.1-1.5-0.9-3.6-3.7-1-0.5-1.1-0.2-1.6 0.3-0.6 0.8-0.3 1 0 1.2-0.6 2-0.9 2.4-2.4 4.1-1.1 2.5-0.7 2.2-0.4 1.8-0.2 1.9 0.1 1.9 0.8 2.5 0.5 2.1 0.1 1.8-0.5 1.9-0.9 1-1.1 0.6-2.5 0.1-2.6-0.7-1.4-0.2-5.7 1-0.3-1-2.9-7.2-1.1-1-3.3-0.6-9.6-5-1.7-0.3-1.8 0.5-3.9 1.6-4.7 1-5.5 0-5.1-1.5-3.9-3.9-1-2.7-0.6-2.7-0.9-2.4-1.9-1.7-2.1-0.6-6.4 0.5-9-1-1.7-0.8-1.8-3.9-1.9-1.5-1.9-0.8 0.4-2 0.9-1.6 1.4-1.3 2.8-1 6.2 0.3 2.9-0.4 4.3-1.3 1.5-1.2 0.3-2.9-0.9-2.4-1.5-1.4-3.7-1.4-2.6-1.3-5.1-0.9-2.4-1.7 0.2-1.8-0.4-0.7-1.8-0.1-1.4-0.4-0.2-1.3 0.5-1.5 0.8-1.2 1-0.5 2.7-0.2 1.1-0.4 1.3-1.1 0.8-3.9 1.5-2.3 0.1-1.9-0.2-1.1 0.8-1.2 0.9-1 1.1-0.5 1.3-0.1 1.4-1.2 0.3-1.8-0.4-2-1-1.2 2.1-1.1 1.9-2.6 1.1-2.6 0-1.5-0.6-4.1 0-1.6 0.3-1.2 2.1-2.6 0.5-1.8-0.4-2.3 0-2-0.9-2.1-0.8-1-2.1-1.7-3.6-3.8-0.7-1.1-0.4-2.6 0.3-1.2 1.1-2.1 0.4-1.4 0-1.3-0.2-2.8 1-1.4 1.9-1.6 4.5-2.5 1.4-1.6 0.8-1.5 0.2-3.2 0.5-1.6 1-1.6 1.8-1.2 3-1.1 3.3 0 1.7 0.5 2 1.2 2.4 0.7 2.3 1.3 1.3 1.7 0.8 0.7 1.9 0 2.6-0.7 4.8-2.2 3.8-2.4 1-0.2 1.6 0.5 1 0.8 0.8 1.2 1 2.5 1.3 2.2 0.9 0.7 1.1 0.6 1.4 0.2 2.1-0.3 2.1-0.8 2.6-1.9 0.7-0.9-0.1-0.6-1.4-0.1-1-0.5-0.2-0.7-0.5-2.8 0.2-0.8 0.6-0.5 3.7 0 2.5-0.4 2.2-0.8 2.6-1.7 2.7-2.4 1.1-0.5 1.4 0.3 0.8 0.6 1.3 1.5 1.6 0.6 1.5-0.2 2.6 0.3 0.7-0.5 2.9-6.1 3.9-2.8 11.6-2.2 0.9 3.5 3.2 4.3 1.4 1 1.5 0.5 2.8 0.6 0.5 0.7-0.2 2.2 0.2 1.2 0.6 0.4 1.8-0.2 1.1 0.3 0.7 0.7 0.7 1.2 1.3 1.1 2 1.3 3.5 2.7 1.6 2.1 1 2.1 1.3 4.4 0.3 1.8 0.1 3.3 0.4 2.5-0.2 1.4-0.5 1.5-1.3 2-0.4 0.9 0.2 1.4 0.8 1.4 1.4 2 0.6 1.6 0.3 1.4-0.2 2.3-0.6 1.3-2.3 3.4-0.8 2.4 0 2.9z" id="county_romania_caras-severin_30" name="Caras-Severin">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m49.7 328.5l1.5 0.6 15 10.5 3.7 3.8 1.1 3 1.4 2.1 1.3 0.9 1.5 0.5 6.6 1.2 0.9 0 2-0.5 1.3-0.1 2.2 0.6 1.1 0.7 0.5 0.7-0.3 1.8 0.3 1 1.3 1.9 1.4 0.7 1.6 0.3 1.1-0.1 0.7-0.4 0.6-1.6 0.1-1.7 0.6-1.7 1-0.9 1-0.6 1.6-0.2 0.8 0.3 0.4 2 0.8 1.8 2.8 2.8 1.8 1 1.5 0 2.4-2.1 1.2-0.5 1.5-0.3 1.8 0 1.1 0.6 1.5 1.8 1.4-0.1 2.4-2.4 2.8-2.3 0.6-0.7 0.4-1 0.2-2.1 0.2-0.8 1.1-0.6 1.8-0.2 3.5 0.4 1.6 0.5 0.9 0.9 0.1 2.2 0.2 1.2 0.8 1.1 1 0.4 2.9-0.4 1.2 0.2 1.1 0.6 2.3 2.5 2.2 1.8 0.9 1.2 0.4 1.1-0.7 2.4 0.1 0.6 1.8 1.5 2 2.7 0.8-0.1 0.6-0.8 1.1-2.4 1.4-2.5 0.8-1 0.9-0.5 1.5 0 3.4 1.6 2.1 1.7 1.3 2.1 0.9 1.1 1.1 0.1 0.1-0.8-0.1-2.1 0.2-2.3 0.5-0.9 0.6 0 1.7 1.4 1 0.4 3.2-0.2 1-1.3 0.7-3.4 0.7-1.7 0.8-0.4 1.3-0.3 2.5 0 1.6 0.5 1.1 0.8 0.9 1.1 1.3 1.2 1.9 0.6 4.1 0.3 1.1 0.6 0.6 0.8 0.7 1.8 0.8 0.6 1.8 0.8 2.7 2.6 1.6 0.4 1.6 0 2.1-0.3 1.5 0.3 2.6 1.5 0.9 0 2.1-2 0.9-0.4 3.9-1 1.8-0.1 1.1-0.9 0.7-2.2 0.9-1.1 1.9-0.9 3.6 3.8 1 2.5 0.3 2.8 1.2 4.1 1 1.5 2.9 2.3 0.8 1 1.1 1.9 1.9 4.9 0.9 1.3 0.9 0.5 1.3-0.7 1.6-0.2 1.1 0.7 0.3 1-0.3 1.1-0.8 1.2-4.3 3.9-1.2 1.3-0.8 1.6-0.5 1.4-0.8 3.9-0.8 1.2-0.9 0.4-11.6 2.2-3.9 2.8-2.9 6.1-0.7 0.5-2.6-0.3-1.5 0.2-1.6-0.6-1.3-1.5-0.8-0.6-1.4-0.3-1.1 0.5-2.7 2.4-2.6 1.7-2.2 0.8-2.5 0.4-3.7 0-0.6 0.5-0.2 0.8 0.5 2.8 0.2 0.7 1 0.5 1.4 0.1 0.1 0.6-0.7 0.9-2.6 1.9-2.1 0.8-2.1 0.3-1.4-0.2-1.1-0.6-0.9-0.7-1.3-2.2-1-2.5-0.8-1.2-1-0.8-1.6-0.5-1 0.2-3.8 2.4-4.8 2.2-2.6 0.7-1.9 0-0.8-0.7-1.3-1.7-2.3-1.3-2.4-0.7-2-1.2-1.7-0.5-3.3 0-3 1.1-1.8 1.2-1 1.6-0.5 1.6-0.2 3.2-0.8 1.5-1.4 1.6-4.5 2.5-1.9 1.6-1 1.4 0.2 2.8 0 1.3-0.4 1.4-1.1 2.1-0.3 1.2 0.4 2.6 0.7 1.1 3.6 3.8 2.1 1.7 0.8 1 0.9 2.1 0 2 0.4 2.3-0.5 1.8-2.1 2.6-0.3 1.2 0 1.6 0.6 4.1 0 1.5-1.1 2.6-1.9 2.6-2.1 1.1-2.6-3.2-2.7-2.2-3-1.6-11.2-3.5-4.5-0.2-1.8-0.8-3.5-2.4-1.8-2.1-3.6-5.3-1.7-1.3-1.1 0.3-1.7 1.9-1 0.4-1.2-0.3-1.9-1.8-1-0.9-8.7-4-1.7-1.3-4-5.4-6.8-6.2-3.5-5.1-1.5-1.5-1.8-0.9-1.8-0.6-1.6-1-0.6-2.1 2.3-1.9 1.5-1.6 0.3-2.1-1.3-3.5-3.1-5.4-0.4-2.4 0.8-3.8 1.2-2.8 0.4-1.3 0.3-2.1-0.1-7.9 0.7-3 0-1.3-0.9-1.5-1.3-0.7-1.1 0.5-1 1.3-0.6 1.7-1.3 1.1-1.4 0.5-1.4-0.3-1.3-1.2-1-2.1-2.4-3.1-1.1-1.7-0.3-1.5-0.3-3.1-0.3-1.2-0.8-1-1.8-1.2-0.7-0.7-3.5-6.3-1.7-1.6-1.9-0.8-4.1-0.5-1.9-0.9-5.5-5.2-2-1.3-4.2-1.9-1.8-1.3-1.6-2.5-2.2-6.9-1.3-2.3-6.6-8.3 4.3-5.4 16.9-0.5 2.6-4.2 4.3 1 4.2 1.8 3.1 2.8 1 0.7 1.3 0.5 0.8 0 5.9-1.2 2.1-1.1 1.6-1.8 0.6-1.8z" id="county_romania_timis_14" name="Timis">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m759.6 111.6l-5.8 2.8-4.3-0.1-1.7-0.4-1.3 0.1-1.2 0.8-1.8 2-1.8 2-0.6 1.1-0.4 2.7-0.9 1.1-1.2 0.7-2.9 0-1.4-0.4-1.8-1-1.9-0.8-3-0.6-1.7-1.4-0.8-0.3-1.2 0.2-1.2 0.9-0.7 1.1-0.4 1.1 0.2 1.4 1.9 4.2 0.1 1.3-0.5 1.1-1.1 0.9-2.2 0.8-1.6 0.3-2-0.6-1.3-1-1.1-1.2-1.6-2-1.8-1.4-1-0.4-17.7 0-1.7-0.4-3.1-2.1-1.1-0.1-0.9 0.5-0.7 0.9-0.6 1.7-1.5 3.2-4.2 4.1-4.4-0.6-2.6-2.1-2.6-3.7-0.6-1.6-0.2-1.8 0.3-4.1-0.1-1.9-1.7-8.2-0.9-3.4-1.1-1.9-3.4-3.5-1.3-2.2-7-8.7-2-3.5-12-15.4-2.5-2.5-5.4-3-4.3-3.7-2.8-1.8-1.6-1.5-0.7-1.8-1.8-9.6 2.4 0 5-2.3 1.1-1.6 2.3-5.4 1.3-1.7 2.7-2.4 1.3-1.4 1.6-3.4 1.8-4.9 1.1-5-0.2-3.6 0.8-5.2 0.9 0.3 1.9 0.2 1.8-0.6 3.5-1.7 1.8-0.5 5-0.2 15.1-3.5 8.2-3.9 2.4-0.1 2.5 2.1 1.1 0.3 1.1-1.8 1.2 2.5 2.1 0.4 4.3-0.9 1.8 0.9 2.4 3.1 1.2-0.7 4.4 4.5 0.7 1.2 0.4 2.7 1-0.5 1.2-1.8 1-0.9 1.3 1.2 0.5 1.8 0.8 1.7 3.7 1.4 0 1.3-1.2 1.2-2.1 0.1 0 1 2.9 1.8 1.9 0.6 1.4-1.1 0.9 0.5 1.5 1.6-0.1 0.9-1.1 1.4-0.3 0.9 0.8 3.9 1.9 3 2.5 2.3 2.7 1.6 0 1.2-2.1 1 0.7 2.2 2.7-1.2 1.4 2 1 2.2 1.4-0.9 1.2 1.5 0.1 1.4-0.7 1.4-1.3 1.1 2.3 1.8 0.6 0.4 0 1-1.8 2.5 1.1 1.5 2.4 1.3 1.9 2.3-0.1 0.7 0.2 4.9-0.1 0.9 1.1 0.9 2.4 0.9 0.8 1.4-3.6 2.2 1.3 1.1 1.4 2.2 2.1 4.4 2.4 2 0.4 1.5-0.1 1.7 0.5 1.1 0 1-2.4 0.5 1 3.5 2.4 4.1 6.9 9.1 2.9 3.1 3.3 1.2 0.3 1.3z" id="county_romania_botosani_6" name="Botosani">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m271.2 269.1l3.2 2.8 14.8 0.4 2.4 0.7 1.5 1 1.5 3 1 1 2.2 1.8 0.5 0.8 0.4 2.8 0.7 1.1 0.7 0.1 0.8-0.4 1.2-1.7 0.8-0.8 4.3-2.7 1-0.3 2-0.1 4.8 1.6 1.8 0.2 1.3-0.2 1-0.6 1.1-1 3.8-2.9 10.6-2.1 1.8 0.5 1.5 0.8 5.9 4.3 5.2 2.2 2.3 0.4 1.9 0.1 3.4-0.3 1.2 0.4 0.7 0.9 0 1.2-1.7 2.8-0.5 1.2 0.1 1.3 0.8 1.5 2.2 1.5 1.7 0.6 1.5 0.1 0.7-0.5 0.2-0.9-0.4-2 0-1 0.6-0.7 1.2-0.3 5-0.1 1.2-0.2 2-1 1.1-0.3 4.7 0.2 1.6-0.2 3.9-1 2.1 0.3 6.6 2.1 1.4 0 1.7-0.8 0.8-1.2 3.3 0.2 1.6 1.1 1.2 1.4 0.6 1.8-0.4 1.4-0.8 1.2-1.3 1.2-0.9 1.1-0.5 1.8 0.5 1.2 3.3 3.6 1 0.7 5.8 2.5 2.2 1.8 1.1 2.3 0.8 4.8 1.6 2.2 1.7 1.1 0.5 10.1-0.1 1.6-0.4 1.2-1.2 1.2-2.1 1.3-1.6 1.8-2.3 2.1-8.8 9.5-1.2 1.9-0.7 2.2-0.5 2.8-0.4 0.8-0.9 0.4-0.9-0.2-0.9-0.7-1.9-1.9-1.9-1.2-1.2 0-7.3 1.6-1.3 0.9-0.7 1.4-0.1 2.5 0.5 1.5 0.7 1.4 0.4 1.4-0.3 1.8-1.6 2-1.4 1.2-1.6 1-1.3 0.2-2.5-0.1-1.7 0.5-1-0.2-2.9-1.7-2-0.2-0.8 0.4-0.5 0.8 0.5 5 0.7 1 1 0.5 2.7 0.7 1.2 0.7 0.7 0.8-0.2 1.3-3.6 5.6-1.4 2.7-1.4 1.4-1 0.1-2.4-0.3-1.5 0.9-1.5 2-0.7 1.6-2.4 7.7-0.3 2.7 0.7 3.9 0.8 2.2 0.7 2.5 0.2 2.8-0.9 4.5-0.8 2.6-0.3 2.4 1.1 3.3 2.6 4.5 0.4 2 0.1 1.4-2.9 4.3-4.4 0.7 0.2-5-0.6-2.6-0.7-0.9-5.2-5.1-2.3-2.6-1.8-1.3-4.1-2-2.5-2-1.3-1.9-1.1-2.6-0.4-1.5-0.1-1.3 1-3.3-0.4-1.4-2.2-2.7-0.6-1.1-0.2-1.3 0.3-2.8-0.4-2.3-0.9-3.2-2.3-6.3-2.7-11.7-0.9-1.7-2.8-3.4-1.7-2.8-4.1-10.7-1.2-1-2.1-0.3-2.5-1.2-10.2-13.5-1-2.3 0.6-1.1 0.7-0.2 1.5 0.5 0.5-0.6-0.1-1.5-1.7-4.5-1.3-2.4-1.4-1.9-1.1-0.8-1.3-0.6-4.8-0.7-1.2-0.5-0.7-0.9-1.8-6.7-1.7-4.4-1.1-2.2-1-1.3-1-0.3-9.7 1-0.9-0.3-5.2-3.3-5.1-5.3-1.9-8.1-0.2-9.4 0.6-3.6 1.1-3.9 1.4-2.8 1.3-1.6 1.2-0.7 2.7-0.3 2.4 0.6 1.6 1z" id="county_romania_alba_20" name="Alba">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m498.4 110.1l1.2 1.4 8.3 6.8 2.8 3.3 1.2 2.4 0.6 1.6 0.1 1.8-0.7 2.2-1.2 1.3-2.7 1.5-0.8 0.7-0.2 0.8 1.4 2.3 0.1 1-0.3 1.4-1.1 0.7-1.6-0.2-1 0.1-0.7 0.6-0.5 0.9 0.2 1.1 0.9 1.7 2.1 2.7 0.8 1.3 1.3 2.8 0.4 1.5 0.1 1.8-0.8 2.7-1.4 2.4-0.8 2.1-0.1 1.6 1.2 1.6 1.2 0.3 2-0.2 0.5 0.3 0.2 0.9-0.4 2.4-0.4 1.6-0.6 4.7 0.6 10.8-8.2 3.3-6.9 1.3-2.8 1-3.4 2.3-5.4 4.7-0.8 1.1-1.4 3.8-0.6 1.2-2.6 4-0.9 1.9-0.6 2.1-0.8 4.4-0.7 1.2-1.3 0.6-1.9-0.2-1.7-0.8-3.1-2-1.3-0.5-1.2-0.3-1.3 0.2-1.9 0.9-2.6 2.1-2.2 2.9-1 1.8-1 2.9-0.6 1.1-2 2.5-0.7 1.3-0.8 4.9-0.6 1.2-1.4 1-2.1 0.7-3.7 0.5-4.8 2-1.7 0.3-2.3-0.1-7-1.8-8.7-4.3 2.3-4.7 0.6-1.9 0.7-6.4 0.6-2.2 0.2-2.5-0.5-2.1-2-2.1-3.7-2.1-1.3-1-0.7-1.3-0.2-1.8 0.4-2.3-0.2-1-1.8-1.3-0.9-1 0.1-2.3 0.3-2 0.5-1.9 0.1-2-0.4-1.9-1.5-2.2-1.5-1.1-2.5-1.2-1.1-0.7-2.2-2.1-1.6-1-6-1.7-1.3-0.7-1.2-1.3-0.7-1.6-0.5-1.9-1.1-8.6-0.4-1.6 0-1.9 0.6-1.5 3.4-2.9 1.4-1.6 1.1-1.8 1-4.4 4.1-4 6.4-9.5 0.7-1.5 0.4-1.5 0.4-3.3 0.5-0.8 1.5-0.7 8.9-1.9 2.2-1.4 1-1.3 2.1-4.8 0.8-1.4 1.5-1.2 7.3-3.3 1.9-0.5 19.8 4.7 19.8-0.7 2.2-0.7 1.7-1.2 4.3-4.1 3.6-1.3 9 0.1z" id="county_romania_bistrita-nasaud_3" name="Bistrita-Nasaud">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m398.3 150.4l-1 4.4-1.1 1.8-1.4 1.6-3.4 2.9-0.6 1.5 0 1.9 0.4 1.6 1.1 8.6 0.5 1.9 0.7 1.6 1.2 1.3 1.3 0.7 6 1.7 1.6 1 2.2 2.1 1.1 0.7 2.5 1.2 1.5 1.1 1.5 2.2 0.4 1.9-0.1 2-0.5 1.9-0.3 2-0.1 2.3 0.9 1 1.8 1.3 0.2 1-0.4 2.3 0.2 1.8 0.7 1.3 1.3 1 3.7 2.1 2 2.1 0.5 2.1-0.2 2.5-0.6 2.2-0.7 6.4-0.6 1.9-2.3 4.7-3.2 0.4-2.1 2.5-4 7.6-0.4 1.7 0 1.4 1.5 2.3 0.7 1.5 0.2 2.6-0.7 1.7-1.1 1-3.8 0.7-1.3 0.6-1.8 1.7-1 2.2-1.1 3.2-0.2 1.8 0.2 1.4 0.9 2.5-0.1 1.7-0.7 0.9-2.3 1.4-1.4 1.5-2.1 3.2-0.4 1.9 0.5 1.7 2.4 2.4-0.8 1.2-1.7 0.8-1.4 0-6.6-2.1-2.1-0.3-3.9 1-1.6 0.2-4.7-0.2-1.1 0.3-2 1-1.2 0.2-5 0.1-1.2 0.3-0.6 0.7 0 1 0.4 2-0.2 0.9-0.7 0.5-1.5-0.1-1.7-0.6-2.2-1.5-0.8-1.5-0.1-1.3 0.5-1.2 1.7-2.8 0-1.2-0.7-0.9-1.2-0.4-3.4 0.3-1.9-0.1-2.3-0.4-5.2-2.2-5.9-4.3-1.5-0.8-1.8-0.5-10.6 2.1-3.8 2.9-1.1 1-1 0.6-1.3 0.2-1.8-0.2-4.8-1.6-2 0.1-1 0.3-4.3 2.7-0.8 0.8-1.2 1.7-0.8 0.4-0.7-0.1-0.7-1.1-0.4-2.8-0.5-0.8-2.2-1.8-1-1-1.5-3-1.5-1-2.4-0.7-14.8-0.4-3.2-2.8 0-5.8 0.5-3.8-0.5-1.3-1-0.9-2.1-1.7-1-1.9-1.8-7.2-1.4-3.2-1.4-2.2-4.2-3.8-1.3-1.8-0.3-1.4 0.2-1.3 0.6-1.1 0.9-1.1 1.2-0.8 3.9-1.8 0.9-0.7 1.3-2.3 1.1-3.5 0.4-2.9-0.5-1.6-1.4-1.1-5.3-2.1-0.9-0.7-0.2-1 0.4-1.5 2.3-4.5 0.8-2.1 1.2 0.4 12.6 0.3 1.9 0.3 1.1 0.6 1.1 0.9 0.8 1.5 1.8 4.6 1.1 2 1.1 1.3 1.3 0.5 3.9 0.4 1 0.4 0.8 0.6 1 1.6 0.8 0.6 1 0 2.3-0.4 1.3-0.1 3.9 1.1 1.8-0.3 2.1-0.8 1.5-0.3 1.2 0.2 2.4 0.9 1.3-0.1 1-0.6 0.3-1.3-0.2-2.5 0.3-1.1 1.5-2.8 0.7-1.1 1.2-0.2 0.9 0.6 0.7 1.2 0.7 2.3 0.6 0.7 0.9 0.3 2.2-0.8 1.1 0 0.9 0.3 2.1 2.4 1-0.1 1-0.7 0.9-2.2 0-1.4-0.5-1.4-2-2.3-0.4-1.4 0.5-1 1.5-0.7 1.1 0 1.8 0.7 0.6-0.3 0.4-2 0.5-0.9 1.2-0.7 1.3-0.2 2.3 0.1 1.4-0.2 1.6-0.4 1-0.9 0.4-1.5-0.1-1.2-1-3.4-0.5-1.1-1.4-1.8-0.4-1 0.1-1 0.6-0.8 2.2-0.6 0.6-0.5 0.9-2.6 0.8-1.4 0.4-2.6 0.3-1 4.9-2 2.4-1.6 1.3-0.4 1.2 0.1 1.1 0.5 1 0 0.9-0.7 0.7-1.9 1-1.9 1.6-1.9 3.7-2 3.5-1.1 6.2-0.7 1.6-0.6 0.9-1.4-0.1-3 0.5-3 0.5-1.8 0.7-1.4 0.1-2.2-1.6-2.5 3-2.6 17.5 1.4z" id="county_romania_cluj_19" name="Cluj">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m353.6 437.7l-0.3 2.3 0.2 1.4 1.5 4.5 0.3 1.7-1.5 4.4-6.6 2.2-6 3.3-1.8 1.5-1.1 0.4-0.9-0.1-1.9-1.4-1.5-0.8-1.6-0.4-2.7-0.1-2 0.6-3.6 1.8-4.7 1-1.7 0.6-5.7 3.5-1.7 0.4-1.3 0-3.2-1.5-1.6-0.2-2.6 0.2-6.8 2.9-1.6 0.1-1.1-0.4-1.7-1.6-0.9-0.4-4.6-0.3-1.2-0.4-1-0.8-0.7-1-1.4-0.7-1.1 0.2-22.4 8.2 0-2.9 0.8-2.4 2.3-3.4 0.6-1.3 0.2-2.3-0.3-1.4-0.6-1.6-1.4-2-0.8-1.4-0.2-1.4 0.4-0.9 1.3-2 0.5-1.5 0.2-1.4-0.4-2.5-0.1-3.3-0.3-1.8-1.3-4.4-1-2.1-1.6-2.1-3.5-2.7-2-1.3-1.3-1.1-0.7-1.2-0.7-0.7-1.1-0.3-1.8 0.2-0.6-0.4-0.2-1.2 0.2-2.2-0.5-0.7-2.8-0.6-1.5-0.5-1.4-1-3.2-4.3-0.9-3.5 0.9-0.4 0.8-1.2 0.8-3.9 0.5-1.4 0.8-1.6 1.2-1.3 4.3-3.9 0.8-1.2 0.3-1.1-0.3-1-1.1-0.7-1.6 0.2-1.3 0.7-0.9-0.5-0.9-1.3-1.9-4.9-1.1-1.9-0.8-1-2.9-2.3-1-1.5-1.2-4.1-0.3-2.8-1-2.5-3.6-3.8 4.9-6.4 1.2-2.6 0.7-2.5 0.1-1.9-0.3-1.5-1.1-3.6 0.3-1.5 0.6-1.9 1.5-3.1 0.5-2.3 0.2-2.2-0.3-5 0.5-1.7 0.9-1.5 2.5-2.2 1.4-0.9 1.9-0.2 5.9 1.4 2 0.2 2.5-0.4 2-1.1 2.2-2 2.4-4 1-2.5 1.8-4 6.9-5.2 5.2 3.3 0.9 0.3 9.7-1 1 0.3 1 1.3 1.1 2.2 1.7 4.4 1.8 6.7 0.7 0.9 1.2 0.5 4.8 0.7 1.3 0.6 1.1 0.8 1.4 1.9 1.3 2.4 1.7 4.5 0.1 1.5-0.5 0.6-1.5-0.5-0.7 0.2-0.6 1.1 1 2.3 10.2 13.5 2.5 1.2 2.1 0.3 1.2 1 4.1 10.7 1.7 2.8 2.8 3.4 0.9 1.7 2.7 11.7 2.3 6.3 0.9 3.2 0.4 2.3-0.3 2.8 0.2 1.3 0.6 1.1 2.2 2.7 0.4 1.4-1 3.3 0.1 1.3 0.4 1.5 1.1 2.6 1.3 1.9 2.5 2 4.1 2 1.8 1.3 2.3 2.6 5.2 5.1 0.7 0.9 0.6 2.6-0.2 5z" id="county_romania_hunedoara_10" name="Hunedoara">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m497 89.2l1.3 4.3 2.5 4 4.5 4.8 0.9 1.4 0.2 1.7-0.8 1.5-0.9 1-6.3 2.2-9-0.1-3.6 1.3-4.3 4.1-1.7 1.2-2.2 0.7-19.8 0.7-19.8-4.7-1.9 0.5-7.3 3.3-1.5 1.2-0.8 1.4-2.1 4.8-1 1.3-2.2 1.4-8.9 1.9-1.5 0.7-0.5 0.8-0.4 3.3-0.4 1.5-0.7 1.5-6.4 9.5-4.1 4-17.5-1.4-3 2.6-2.7 1.4-1.2 0.4-1.5 0-1.3-0.3-1.4-0.9-1.8-1.8-1.3-0.8-2.1-1-1-1.2-0.6-1.2-0.2-1.2-1.4-0.9-2.5-0.4-16.2 0.7-2.4-0.4-13.2-4.5-4.2-2.2-2.1-0.8-2.8-0.5-11.1 0-5.3 1.9-9.7-1.8-1.8-1-1.4-1.3-0.2-1.1 0.3-1 0.8-0.9 3.9-2.6 1.8-2 0.6-1.1 1.4-4.7 0.9-1.5 6.2-7.9 1-0.6 1 0 0.8 0.5 1.8 2.3 1.2 1.1 4.8 3.2 1.6 0.7 1.8 0 2-1.2 1.6-1.8 1.9-2.8 2.3-2.7 1.8-4 0.7-2 1.3-3 0.4-1.9-0.2-2.1-0.8-1.2-1.2-1.2-1.6-0.9-7.2-2-1.2-0.8-0.7-1.1-0.1-1.3 0.4-2.2 1.2-1.3 1.8-0.8 7.5 0.1 4.1 1.3 1.6 0.8 1.8 0.5 1.8 0.1 2.4-0.5 2.6-1.3 15-11.5 0.9-1.7 0.1-1.7-1.1-2-1.4-1.4-3.5-2.2-1.5-1.2-1-1.2-5.1-7.2-1.7-6.3 0.9-1 1-1.9 1.2-1 1.1-0.3 4-0.7 2 0.6 6.8 0.8 4.3 1.5 2.5 0.3 7.3-0.4 1.7 0.9 5.5 5.1 0.7 2.4 2.3 0 10.6-4.4 3.3 0.2 1.8 1.3 5.2 1.4 2.1 1 3.8 3.7 2.1 0.2 6.2 2.4 2.3 0.1 7-3.6 5.2-0.1 4.2-3.6 2.4-1.4 2 0 6.1 1.4 5.9-0.1 2.1 0.6 4.9 2.9 2.7 2.1 1.6 2.1 0.7 2.5 0.1 2.1 0.5 1.9 1.9 2.2 3.5 2.2 8.6 3.4 1.5 1.3 1.3 1.9 3.6 6.4 2.4 3.8 2 1.4 4.9-0.9z" id="county_romania_maramures_35" name="maramures">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m524.6 188.9l0.7 5.9 1.5 3 2.4 2.4 1 1.4 0.7 1.9 0.4 2.4 0.3 9.4-1.7 10.4 0.6 3.5 2.3 6.4 0.8 2.5-0.1 2.1-0.6 3.4-0.3 2.9 0.3 4.1-0.2 1.5-0.9 1.5-4.6 3.8-1.5 1.7-3.8 5.9-1.3 1.4-1.8 1.2-4.5 1.9-1.4 0.9-6.2 6.5-0.8 1.4-0.5 1.7-0.5 5.8-0.5 1.2-1.1 1.1-6.6 2.7-0.8 1 0 1 2.9 2.1 0.8 1 0 1.6-0.6 1.1-1.2 0.6-2.6 0.6-2.6 2-2.3 1-0.8 0.8-0.1 1 0.6 1.3 8.4 10.2 1.9 1.8 2 0.7 5-0.2 1.7 0.7 5.6 4.3 8.3 8.9-5.3 1.2-9.7 0.4-1.5 0.5-1.5 0.8-2.3 2-1.1 1.2-1 2.9 0.6 3.2-5-2.9-1.1-1-1.7-1.2-1.4-0.6-2.3-0.3-1.5 0.2-3.4 0.9-3.3 0.2-0.8 0.3-1.2 1-0.8 0.4-2.4 0-1.2 0.4-1.4 0-1.4-0.7-1.9-2.3-1.1-3.4-0.6-3.9-0.5-8.8-0.7-4.1 0.1-1.4 0.5-1.3 0.7-1 0.3-0.9-0.4-0.5-0.9-0.1-2.1 1.1-1.5 0.4-2-0.2-2.8-0.9-1.4 0-1.3 0.9-1.5 1.8-1.3 0.7-2.1 0.1-7.4-0.5-3.3 0.7-1.7 0.7-2.1 0.5-2-0.3-5.8-2.4-3.8 0.8-7.8 0-1.7-1.1-1.6-2.2-0.8-4.8-1.1-2.3-2.2-1.8-5.8-2.5-1-0.7-3.3-3.6-0.5-1.2 0.5-1.8 0.9-1.1 1.3-1.2 0.8-1.2 0.4-1.4-0.6-1.8-1.2-1.4-1.6-1.1-3.3-0.2-2.4-2.4-0.5-1.7 0.4-1.9 2.1-3.2 1.4-1.5 2.3-1.4 0.7-0.9 0.1-1.7-0.9-2.5-0.2-1.4 0.2-1.8 1.1-3.2 1-2.2 1.8-1.7 1.3-0.6 3.8-0.7 1.1-1 0.7-1.7-0.2-2.6-0.7-1.5-1.5-2.3 0-1.4 0.4-1.7 4-7.6 2.1-2.5 3.2-0.4 8.7 4.3 7 1.8 2.3 0.1 1.7-0.3 4.8-2 3.7-0.5 2.1-0.7 1.4-1 0.6-1.2 0.8-4.9 0.7-1.3 2-2.5 0.6-1.1 1-2.9 1-1.8 2.2-2.9 2.6-2.1 1.9-0.9 1.3-0.2 1.2 0.3 1.3 0.5 3.1 2 1.7 0.8 1.9 0.2 1.3-0.6 0.7-1.2 0.8-4.4 0.6-2.1 0.9-1.9 2.6-4 0.6-1.2 1.4-3.8 0.8-1.1 5.4-4.7 3.4-2.3 2.8-1 6.9-1.3 8.2-3.3 9.5 1.8 4.8 2.3z" id="county_romania_mures_39" name="mures">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m377.8 151.6l1.6 2.5-0.1 2.2-0.7 1.4-0.5 1.8-0.5 3 0.1 3-0.9 1.4-1.6 0.6-6.2 0.7-3.5 1.1-3.7 2-1.6 1.9-1 1.9-0.7 1.9-0.9 0.7-1 0-1.1-0.5-1.2-0.1-1.3 0.4-2.4 1.6-4.9 2-0.3 1-0.4 2.6-0.8 1.4-0.9 2.6-0.6 0.5-2.2 0.6-0.6 0.8-0.1 1 0.4 1 1.4 1.8 0.5 1.1 1 3.4 0.1 1.2-0.4 1.5-1 0.9-1.6 0.4-1.4 0.2-2.3-0.1-1.3 0.2-1.2 0.7-0.5 0.9-0.4 2-0.6 0.3-1.8-0.7-1.1 0-1.5 0.7-0.5 1 0.4 1.4 2 2.3 0.5 1.4 0 1.4-0.9 2.2-1 0.7-1 0.1-2.1-2.4-0.9-0.3-1.1 0-2.2 0.8-0.9-0.3-0.6-0.7-0.7-2.3-0.7-1.2-0.9-0.6-1.2 0.2-0.7 1.1-1.5 2.8-0.3 1.1 0.2 2.5-0.3 1.3-1 0.6-1.3 0.1-2.4-0.9-1.2-0.2-1.5 0.3-2.1 0.8-1.8 0.3-3.9-1.1-1.3 0.1-2.3 0.4-1 0-0.8-0.6-1-1.6-0.8-0.6-1-0.4-3.9-0.4-1.3-0.5-1.1-1.3-1.1-2-1.8-4.6-0.8-1.5-1.1-0.9-1.1-0.6-1.9-0.3-12.6-0.3-1.2-0.4-1.8-3.1-4.1-4.1-6.6-3.8-1.1-1.3-0.8-1.2-0.4-1.3-3.1-6.1-4.5-7.1-1.3-3.3-0.1-2.1 1.8-1.9 2.7-4 0.6-1.2 0.3-1.2 0.3-2.6 0.5-1.3 1.2-1.9 0.6-1.3 1.1-4.3 4.5-3.7 13.9-6.7 2.9-0.8 2.1 0 11.6 3.3 1.4 0.9 2.5 2.5 1.6 0.9 4.4 1.1 1.1 0.6 1.8 2.1 1.3 0.9 0.6-0.3 0.9-1.8 0.7-0.9 4.1-3.4 0.5-1 0.2-1.2-0.2-1.2-0.9-2.1-1.2-2.2 5.3-1.9 11.1 0 2.8 0.5 2.1 0.8 4.2 2.2 13.2 4.5 2.4 0.4 16.2-0.7 2.5 0.4 1.4 0.9 0.2 1.2 0.6 1.2 1 1.2 2.1 1 1.3 0.8 1.8 1.8 1.4 0.9 1.3 0.3 1.5 0 1.2-0.4 2.7-1.4z" id="county_romania_salaj_37" name="Salaj">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m343.2 48.5l1.7 6.3 5.1 7.2 1 1.2 1.5 1.2 3.5 2.2 1.4 1.4 1.1 2-0.1 1.7-0.9 1.7-15 11.5-2.6 1.3-2.4 0.5-1.8-0.1-1.8-0.5-1.6-0.8-4.1-1.3-7.5-0.1-1.8 0.8-1.2 1.3-0.4 2.2 0.1 1.3 0.7 1.1 1.2 0.8 7.2 2 1.6 0.9 1.2 1.2 0.8 1.2 0.2 2.1-0.4 1.9-1.3 3-0.7 2-1.8 4-2.3 2.7-1.9 2.8-1.6 1.8-2 1.2-1.8 0-1.6-0.7-4.8-3.2-1.2-1.1-1.8-2.3-0.8-0.5-1 0-1 0.6-6.2 7.9-0.9 1.5-1.4 4.7-0.6 1.1-1.8 2-3.9 2.6-0.8 0.9-0.3 1 0.2 1.1 1.4 1.3 1.8 1 9.7 1.8 1.2 2.2 0.9 2.1 0.2 1.2-0.2 1.2-0.5 1-4.1 3.4-0.7 0.9-0.9 1.8-0.6 0.3-1.3-0.9-1.8-2.1-1.1-0.6-4.4-1.1-1.6-0.9-2.5-2.5-1.4-0.9-11.6-3.3-2.1 0-2.9 0.8-13.9 6.7-4.5 3.7-1-2.8-0.7-3.9-1-1.8-1.3-1.1-3.1-1.8-1.7-1.5-1.5-1-1.1-0.3-1.1 0.3-2.5 1.4-1 0.2-1.6-0.3-1.9 0-1.9 0.5-1.8-0.4-1-0.7-0.6-1.2-1.2-3.3-0.9-1.8-3-4.7-1.7-3.1-1.6-2.2-4.3-3.3-1.2-1.2-0.9-1.5-1.3-3.1-2.7-4.1 0.3-2.2 0.3-1.1 2.6-3.7 0.3-1.4 0.4-2.8 0.4-1.2 0.8-1 1.7-1.3 0.8-0.8 2.4-3.5 1.2-1.3 1.9-1 1.9-0.7 1.3-0.2 4.9 0.8 1.5-0.1 1.4-0.6 1.2-1.2 1.8-6.2 3.2-0.7 7.8 4.1 3.7 0.6 4-0.6 3.8-1.7 3.1-2.7 2.6-3.4 1.3-1 2.2-1 2.2-0.3 0.7-0.4 0.9-1.7-0.2-1.2-0.6-1 0-1.4 1.1-2.1 1.7-1.2 4.2-1.5 1.8-1.6 2.6-5 1.8-2 2.1-0.7 1.9-1.3 0.9-2.1-0.9-3.2 0.9-1.9 1.6-0.1 1.8 0.9 3.3 2.1 1.7 0.6 1.7-0.3 4.5-3.6 1.5-2.7 2.3-7.4 2.1-3.2 2.2-1 2.3 0.3 7.4 2.6 1.8 1.3 4.4 5.2 5 4.4 2.4 2.8 0.7 0.3 1.6 0 1.5-0.3 6.8 3.4 2.2-0.1 0.4-0.4z" id="county_romania_satumare_34" name="Satu mare">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m535.7 446.6l1.6 2.9 0.6 1.4 0.4 1.5 0 1.8-0.5 2.5-0.7 1.6-1.6 2.7-0.8 1.6-0.6 2-0.5 2.4-0.2 3.5-0.8 3.1-1 2.4-0.8 1.6-1 1.1-0.9 0.7-1 0.2-0.9-0.3-0.8-0.7-1.2-2-0.7-0.7-0.7-0.1-1.1 1.1-1.1 2.7-0.5 0.9-0.5 2-0.1 2.9 1.1 5.9 1.5 2.5 3.3 3.8 1.2 2.9 0.5 1.9 0 1.4-0.5 1.3-3 3.5-0.6 1.3-0.2 2.5 0.2 2.9 1.7 8.1 0.3 2.3-0.9 12.2-0.2 1.6-0.5 1.3-1.6 2.9-0.3 1.7 0.2 1.7 1.5 1.8 2.1 2-0.4 0.7-2.4 1.5-0.4 1.2 0.3 1.8 2.7 5.3 1.1 1.5 2.9 2.9 0.9 0.6 1.1 0.4 2.4 0.4 1.8 1.1 0.4 1.1-0.1 1.3-1.9 3.6-0.6 1.5 0.1 2 1 3.7-0.3 2.7-2.3 4.2-3.4-1.7-1.7-0.5-1.8-0.2-2.4 0-4.8 0.9-2.2 1.3-2.3 2.3-1.5 0.6-2.6 0.7-3.3-0.5-1 0.2-1.1 0.8-1.3 1.6-1.9 1.3-1.6 0.4-1.9 0.1-5.7-1.5-4.5 1.2-2.3-1.6-5.1-0.4-1-0.7-0.7-1.2-0.6-2.3-0.4-6.5-1.3-4.9 0.1-2.6 0.6-1.9 0.1-1-1-6.7-1.1-3.8-0.2-1.8-0.5-3.3-0.8-2.3-2.6-4.3-0.3-1.4 0.9-1.6 0.9-0.7 1.9-0.8 0.6-0.9-0.5-0.8-0.8-0.6-1.9-0.2-1.6 0.4-1.7 0-1.7-0.5-2.1-2.1-1.2-1.6-4.7-9.9-0.8-2-0.1-1.7 0.3-2.7-0.3-1.2-0.5-0.8-1-0.2-0.9 0.6-1.2 1.7-1.4 3.6-0.7 0.9-4.3 3.6-0.9 0.4-1-0.3-0.7-0.6-1.2-3.6 2.7-2 4.1-5 0.7-1.3 0.3-1.2-0.1-1.3-0.7-1.8-1.6-2.6-0.1-1.2 0.8-3.1 1.2-9.1 3.2-14.1-0.2-3.5-0.6-2.2-0.8-1.8-0.7-1-1.6-1.9-0.5-1.5-0.2-1.9 0.4-3.1 0.3-3.7-1-3.6-0.1-1.6 0.2-1.4 0.6-1.2 1.7-2.2 0.3-1.4-0.2-1.8-2.2-9.4 0-1.7 0.3-1.6 3.1-6 1.4-6.6-1.3-4.8 19.2-5.6 6.7-0.6 1.6 0.4 1.4 0.8 1.7 1.8 1.5 2.5 0.8 0.5 1.3-0.4 1.9-1.2 1.2-0.5 1.3-0.1 3.1 0.2 6.5-0.6 11.8 1.6 2.5 1.5 4 3.5 1.8 1.2 1.7 0.6 1.7 1.2 1.5 2 5.9 13.1 3.5 4.2z" id="county_romania_arges_22" name="Arges">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m501.1 344.5l-2.2 3-6.3 5.2-5.9 3.2-0.6 0.7-0.3 1 0.7 2 0.1 1.1-0.3 1.5-0.9 0.5-0.7-0.1-1.7-0.7-1.2 0.2-1.8 1-1.6 1.7-4.7 2.5-0.7 0.9-0.1 1.2 0.4 0.9 1.5 1.7 0.4 1.2-0.2 2.9 0.3 1 0.6 0.8 1.5 0.9 0.3 1-0.6 1.6-1.4 1.1-1.8 0.8-2 0.5-3.8 1.6-1.6 1.3-0.5 1.3 0.1 1.5 3.3 7 1.1 3.7 0.9 5 0.4 4.3 0.3 2.3 0.2 3.1-19.2 5.6-21.6-0.2-14.7 3.4-1.5 0.5-10.6 6.1-2 0.1-1.6-0.3-3.7-1.7-4-0.5-17.6 0.7-1.7 0.5-1.7 2-1 0.8-1.3 0.3-1.8 0.1-1.4 0.5-3.3 2.6-2.1 1.3-1.3 0.5-2.2-0.2 2.9-4.3-0.1-1.4-0.4-2-2.6-4.5-1.1-3.3 0.3-2.4 0.8-2.6 0.9-4.5-0.2-2.8-0.7-2.5-0.8-2.2-0.7-3.9 0.3-2.7 2.4-7.7 0.7-1.6 1.5-2 1.5-0.9 2.4 0.3 1-0.1 1.4-1.4 1.4-2.7 3.6-5.6 0.2-1.3-0.7-0.8-1.2-0.7-2.7-0.7-1-0.5-0.7-1-0.5-5 0.5-0.8 0.8-0.4 2 0.2 2.9 1.7 1 0.2 1.7-0.5 2.5 0.1 1.3-0.2 1.6-1 1.4-1.2 1.6-2 0.3-1.8-0.4-1.4-0.7-1.4-0.5-1.5 0.1-2.5 0.7-1.4 1.3-0.9 7.3-1.6 1.2 0 1.9 1.2 1.9 1.9 0.9 0.7 0.9 0.2 0.9-0.4 0.4-0.8 0.5-2.8 0.7-2.2 1.2-1.9 8.8-9.5 2.3-2.1 1.6-1.8 2.1-1.3 1.2-1.2 0.4-1.2 0.1-1.6-0.5-10.1 7.8 0 3.8-0.8 5.8 2.4 2 0.3 2.1-0.5 1.7-0.7 3.3-0.7 7.4 0.5 2.1-0.1 1.3-0.7 1.5-1.8 1.3-0.9 1.4 0 2.8 0.9 2 0.2 1.5-0.4 2.1-1.1 0.9 0.1 0.4 0.5-0.3 0.9-0.7 1-0.5 1.3-0.1 1.4 0.7 4.1 0.5 8.8 0.6 3.9 1.1 3.4 1.9 2.3 1.4 0.7 1.4 0 1.2-0.4 2.4 0 0.8-0.4 1.2-1 0.8-0.3 3.3-0.2 3.4-0.9 1.5-0.2 2.3 0.3 1.4 0.6 1.7 1.2 1.1 1 5 2.9z" id="county_romania_sibiu_40" name="Sibiu">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m453.1 420.5l1.3 4.8-1.4 6.6-3.1 6-0.3 1.6 0 1.7 2.2 9.4 0.2 1.8-0.3 1.4-1.7 2.2-0.6 1.2-0.2 1.4 0.1 1.6 1 3.6-0.3 3.7-0.4 3.1 0.2 1.9 0.5 1.5 1.6 1.9 0.7 1 0.8 1.8 0.6 2.2 0.2 3.5-3.2 14.1-1.2 9.1-0.8 3.1 0.1 1.2 1.6 2.6 0.7 1.8 0.1 1.3-0.3 1.2-0.7 1.3-4.1 5-2.7 2 0.2-6.9-1.3-2.3-1.1-0.3-1 0.1-1.1 0.6-1.6 2-3 5.3-0.9 3.5-0.2 2-0.8 3.3-0.6 1.6-0.9 1.9-1.7 2.6-2 2.1 0 1.3 0.5 3.2 1.4 6.4-0.4 2.5 1.2 1.9 1.2 2.8 0.8 3.4 0.3 2.7-1.6 1.4-1-0.5-0.8-1-0.8-2 0.2-2.5-0.9-0.9-1 0-1.3 1-0.5 1.3-0.7 3.1-0.8 1.1-3.1 1.8-2.1 0.2-2.5-0.7-1.4 0-1.1 0.2-1.3 0.7-1.1 1.2-3.3 4.8-1.3 0.6-0.8-0.1-0.8-0.7-1-1.7-0.8-1.1-2.1-1.2-1.2-0.2-2.5 0.6-4 2.5-3-3.1-1.7-2.6-1.3-2.3-2.1-7.3-1-1.3-1-0.9-3.5-2.2-1.6-0.7-1.9-1.1-0.8-1.1-0.5-1.3-0.1-1.2-0.8-3.5 1.5-8.6 0.4-7.9-1.5-17.1 0.2-2.9 0.5-2 1.2-3.3 2.9-11.7 0.1-2-0.4-5.1 0.4-2.2 1.7-5 0.2-1.8-0.5-2.1-1.1-2.7-0.8-4.1 0.2-2.9 1.4-5.8-0.5-1.7-0.8-1.2-1.8-1.4-1.8-0.4-6.5 0.7-1.9-0.1-1.6-0.3-2-1.1-1.2-0.4-5.1 0-3.2-1 1.5-4.4-0.3-1.7-1.5-4.5-0.2-1.4 0.3-2.3 4.4-0.7 2.2 0.2 1.3-0.5 2.1-1.3 3.3-2.6 1.4-0.5 1.8-0.1 1.3-0.3 1-0.8 1.7-2 1.7-0.5 17.6-0.7 4 0.5 3.7 1.7 1.6 0.3 2-0.1 10.6-6.1 1.5-0.5 14.7-3.4 21.6 0.2z" id="county_romania_valcea_26" name="Vâlcea">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m551 338l-0.7 2.1 0.4 1.4 0.9 1.6 3.4 2.6 1.4 1.9 0.9-0.9 2.1-0.1 2.2 0.6 1.3 1 0.4 2.7-1.3 5.1 0.3 2.6-0.7 2.1-0.2 3.3 0.1 9.9 0.4 2.3 1 2.1 7.4 5 3.3 3.4 0.3 5.1 1.9 0 1.6-1.1 1.5 1 1.5-0.1 1.5-0.6 1.6-0.3 0.7-1 1.6 2.5 1.9 1 9.8 3.7 2.6 1.9 3.1 3.2 1.7 2.6 1.6 3.3 1.1 0.9 2 0.9 2 1.1 2.1 1.8 3.2 5.1 2.3 2.4-5.8 12.4-4.9-1-5.6-3.3-2.3-0.3-1.4 0.6-0.9 1.2-0.7 3.4-0.5 1.9-1 1.8-2 1.8-1.8 0.5-1.5-0.3-0.9-0.8-1.4-2.4-0.7-1-1.3-0.8-1.4 0.1-2.9 1-1.5-0.3-4.5-1.7-4.5-0.9-2.4 0.1-17.8 3.2-1.4 0.5-1.7 1.2-2.1 1-0.8 0.9-0.9 1.9-0.5 1.6-2 2.5-6.4 1.7-3.5-4.2-5.9-13.1-1.5-2-1.7-1.2-1.7-0.6-1.8-1.2-4-3.5-2.5-1.5-11.8-1.6-6.5 0.6-3.1-0.2-1.3 0.1-1.2 0.5-1.9 1.2-1.3 0.4-0.8-0.5-1.5-2.5-1.7-1.8-1.4-0.8-1.6-0.4-6.7 0.6-0.2-3.1-0.3-2.3-0.4-4.3-0.9-5-1.1-3.7-3.3-7-0.1-1.5 0.5-1.3 1.6-1.3 3.8-1.6 2-0.5 1.8-0.8 1.4-1.1 0.6-1.6-0.3-1-1.5-0.9-0.6-0.8-0.3-1 0.2-2.9-0.4-1.2-1.5-1.7-0.4-0.9 0.1-1.2 0.7-0.9 4.7-2.5 1.6-1.7 1.8-1 1.2-0.2 1.7 0.7 0.7 0.1 0.9-0.5 0.3-1.5-0.1-1.1-0.7-2 0.3-1 0.6-0.7 5.9-3.2 6.3-5.2 2.2-3-0.6-3.2 1-2.9 1.1-1.2 2.3-2 1.5-0.8 1.5-0.5 9.7-0.4 5.3-1.2 5.6-0.9 5.8-2.7 1.8 0 1.8 0.4 2.2 1.1 1.7 1.7 1.6 1.2 4.7 1.7 2.9 3.2z" id="county_romania_brasov_7" name="Brasov">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m635.1 331.3l4.4-1.5 3.4-3 0.9-0.1 0.8 0.4 1.5 1.8 0.8 0.8 3.9 2.4 1 1.3 0.6 1.3-0.3 1-1.4 1.6-0.3 1.1 0.6 1.4 2 1 1.2 0.9 0.9 1.1 0.5 1.3 1 3.3 1.4 2.6 1.7 0.9-6.7 10.8-1.7 5-0.2 2.2-1.5 7.7-0.9 7.4 1 3.2 0.5 1.4 0.3 1.7-0.2 1.8-2 4.2-0.4 1.8-0.2 1.7-0.4 2-0.9 2-1.7 2.6-0.6 2.1-0.8 3.5-1 1.4-1.9 1-1.8-0.1-1.2-0.6-1.9-1.9-1.1-0.7-1.1-0.2-1 0.4-1 1.6-0.4 1.5-0.4 2.8-0.7 0.9-1.3 0.5-5.2 0.2-4.1 1.3-2.3-2.4-3.2-5.1-2.1-1.8-2-1.1-2-0.9-1.1-0.9-1.6-3.3-1.7-2.6-3.1-3.2-2.6-1.9-9.8-3.7-1.9-1-1.6-2.5-0.7 1-1.6 0.3-1.5 0.6-1.5 0.1-1.5-1-1.6 1.1-1.9 0-0.3-5.1-3.3-3.4-7.4-5-1-2.1-0.4-2.3-0.1-9.9 0.2-3.3 0.7-2.1-0.3-2.6 1.3-5.1-0.4-2.7-1.3-1-2.2-0.6-2.1 0.1-0.9 0.9-1.4-1.9-3.4-2.6-0.9-1.6-0.4-1.4 0.7-2.1 2.6-5.2 1.6-1.5-0.1-1.4 0.4-0.9 3.8-4.2 2.2-1.6 1.6-1.8 3.8-5.5 1.7-1.6 3.5-2.3 1.3-1.3 1.2-0.9 1.4-0.3 1.6 0.9 2.8 2.5 1.2 1.2 0.7 1.3 0.8 4.4 3.9 7.6 4.2 3.4 1 1.2 0.9 1.5 1.8 1.5 3 1.5 9.8 0.8 27.4-6z" id="county_romania_covasna_12" name="Covasna">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m573.9 191.8l2.4 0.6 2.9 1.3 1.6 1 1.4 1.8 1.3 2.3 1.8 4.6 1.3 2.6 1.9 2.5 3.5 2.7 1.5 1.5 0.9 1.5 0.6 2.6-0.1 1.2-0.4 0.7-0.7 0.1-1.9-0.4-1.1 0.1-1.3 1.1-0.2 1.3-0.1 1.6 1.2 25.6 0.5 1.9 0.9 1.7 1.6 1.9 3.5 3.5 1.2 0.7 1.1 0.1 0.4-0.9-0.1-1.4-0.7-3.3 0-1.4 1.1-0.7 1-0.3 8.6 2.1 0.3 11.4 1.8 7 1.4 2.5 1.5 2.3 1.4 2.8 0.1 1.8-1.1 1-1.4 0.6-1.5 1.3-0.9 2-0.5 4.3 0.6 2.2 1.5 1.4 4.3 1.2 5.6 0.8 1.5 0.9 1.6 1.7 0.5 1.8 0.1 1.8-0.8 3.6-0.1 2.1 0.9 1 1.5 0 2.7-0.8 4.2-2.3 1.5-0.3 1.5 0.2 1.8 1.1 0.6 1.3 0.2 1.4-1.5 4-0.2 1.3-0.5 6.2-0.4 1.6-1.3 2.7-0.5 1.6-0.8 5.8-27.4 6-9.8-0.8-3-1.5-1.8-1.5-0.9-1.5-1-1.2-4.2-3.4-3.9-7.6-0.8-4.4-0.7-1.3-1.2-1.2-2.8-2.5-1.6-0.9-1.4 0.3-1.2 0.9-1.3 1.3-3.5 2.3-1.7 1.6-3.8 5.5-1.6 1.8-2.2 1.6-3.8 4.2-0.4 0.9 0.1 1.4-1.6 1.5-2.6 5.2-2.9-3.2-4.7-1.7-1.6-1.2-1.7-1.7-2.2-1.1-1.8-0.4-1.8 0-5.8 2.7-5.6 0.9-8.3-8.9-5.6-4.3-1.7-0.7-5 0.2-2-0.7-1.9-1.8-8.4-10.2-0.6-1.3 0.1-1 0.8-0.8 2.3-1 2.6-2 2.6-0.6 1.2-0.6 0.6-1.1 0-1.6-0.8-1-2.9-2.1 0-1 0.8-1 6.6-2.7 1.1-1.1 0.5-1.2 0.5-5.8 0.5-1.7 0.8-1.4 6.2-6.5 1.4-0.9 4.5-1.9 1.8-1.2 1.3-1.4 3.8-5.9 1.5-1.7 4.6-3.8 0.9-1.5 0.2-1.5-0.3-4.1 0.3-2.9 0.6-3.4 0.1-2.1-0.8-2.5-2.3-6.4-0.6-3.5 1.7-10.4-0.3-9.4-0.4-2.4-0.7-1.9-1-1.4-2.4-2.4-1.5-3-0.7-5.9 4 1.6 2.9 0 1.4-0.6 0.9-1 0.6-1.3 0.2-2.7 0.3-1.4 1-1.8 1.8-1.2 2.1-0.9 2.6-0.6 1.8 0.1 1.8 0.8 11.8 8.1 1.2 1.2 1 1.5 1.3 1.4 1.7 1.1 1.6 0.2 2.2-0.3 1.5-0.5 5.6-0.8z" id="county_romania_harghita_2" name="Harghita">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m832.6 225.1l-0.8 0.5-5.4 0.7-1.8 1.1-1.7 1.3-1.2 0-1.3-0.6-1.9-1.5-0.9-0.1-1.3 0.8-0.4 1-0.9 0.7-1.5 0-3.9-1.3-3.4-2.2-1.1-0.3-1.7 0.2-1.4-0.1-1.1-0.9-0.1-1.1 1.7-5.6 0.1-1.7-0.4-1.5-0.9-0.9-1.3-0.2-1.4 1-0.5 1.4 0 2.9-0.3 0.9-0.7 0-1.2-0.8-4-5.3-2.9-3-6.3-5-1.4-0.7-1.2 0-0.8 1-0.2 1.1 0.8 2.3 0.1 2.5-0.5 2.3 0.2 0.7 0.7 0.5 1.2 0.1 1.9-0.3 1 0.7-0.2 1.8-0.5 1-1.3 0.7-2.1 0.3-3.9-0.7-1.9-0.8-1.5 0-0.7 1-1.2 2.4-1.1 1-3.9 1.3-1.9 0.1-2.6-0.6-1.9-0.7-2-0.6-2 0-7.9 1.4-12.2-0.8-0.5-2.1-0.6-1.3-1.9-3.3-2.2-3-1.2-1.9-0.1-1.6 0.7-1.5 1.4-1.4 1.8-1 1.9-0.8 3.1-0.8 0.9-0.7 0.4-1.1-0.6-1.3-1.4-1.7-2.4-2.1-1.3-1.5-1-1.5-0.8-2.9-0.9-1.2-1.3-0.7-2.4-0.2-1.7 0.4-1.4 0.8-3.6 4.3-1.1 1-1.3 0.5-1.9-0.2-5-1.1-1.5 0.3-0.9 0.9-0.9 2.6-0.6 1-0.9 0.5-1.6 0.1-4.3-1-2.7-1.5-6.2-4.8-4.1-2.3-3-0.8-2.4-0.1-2 0.3-1.8-0.1-1.4-0.8-0.9-2.1-0.8-2.4-3.1-7.9-5.4-7.9-7.3-7.2 8.1-1.9 1.1-0.8 0.9-1.2-0.6-1.1-6.5-6-1.1-2.6 0.4-1.4 1.8-0.5 11 1.3 2.3-0.4 0.9-0.9 0.5-1.4 0.1-1.9 1.1-2.9 0.4-1.7-0.3-1.4-1.5-2.2 4.2-4.1 1.5-3.2 0.6-1.7 0.7-0.9 0.9-0.5 1.1 0.1 3.1 2.1 1.7 0.4 17.7 0 1 0.4 1.8 1.4 1.6 2 1.1 1.2 1.3 1 2 0.6 1.6-0.3 2.2-0.8 1.1-0.9 0.5-1.1-0.1-1.3-1.9-4.2-0.2-1.4 0.4-1.1 0.7-1.1 1.2-0.9 1.2-0.2 0.8 0.3 1.7 1.4 3 0.6 1.9 0.8 1.8 1 1.4 0.4 2.9 0 1.2-0.7 0.9-1.1 0.4-2.7 0.6-1.1 1.8-2 1.8-2 1.2-0.8 1.3-0.1 1.7 0.4 4.3 0.1 5.8-2.8 1 3.6-0.1 1.4 0.7 0.9 1.4 0.3 0.8 4.2 0.6 2.3 1.2 1 0.9 0.1 1.5 1 2.8 0.1 1.6 0.5 1.5 0.9 1.4 1.3 0.7 1.5-0.8 0.7-0.6 1.2-0.7 3.4 1.8 1.7-0.8 4.8 1.5 1 1.4 1.2 2.6 6.1 1.3 2.3 0.8 0.5 2.9 0.6 2.8 1.9 2.6 0.7 1.1 1.2 2.1 3.7-0.1 2 1.1 1.9 2.7 3.5 1.3 4.2 0.7 2.3-0.1 0.6-1.2 0.4 1.2 1.7 4.6 2.5 0 1.1-0.6 1.1 2.4 1.5 3.2 3.6 3 2 1.3 1.2 0.1 2.2 2.5 0.5 2.5 1.6 2.3 1.1 2.1-1 0.9 2.5 3.4 4.3 1.5 2.7 2 5.6 0.4 2.7-0.9 2.3 1.7 1.2 0.1 1.8-0.1 1.8 1.2 1.5-0.2 3z" id="county_romania_iasi_25" name="Iasi">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m659.5 161.4l7.3 7.2 5.4 7.9 3.1 7.9 0.8 2.4 0.9 2.1 1.4 0.8 1.8 0.1 2-0.3 2.4 0.1 3 0.8 4.1 2.3 6.2 4.8 2.7 1.5 4.3 1 1.6-0.1 0.9-0.5 0.6-1 0.9-2.6 0.9-0.9 1.5-0.3 5 1.1 1.9 0.2 1.3-0.5 1.1-1 3.6-4.3 1.4-0.8 1.7-0.4 2.4 0.2 1.3 0.7 0.9 1.2 0.8 2.9 1 1.5 1.3 1.5 2.4 2.1 1.4 1.7 0.6 1.3-0.4 1.1-0.9 0.7-3.1 0.8-1.9 0.8-1.8 1-1.4 1.4-0.7 1.5 0.1 1.6 1.2 1.9 2.2 3 1.9 3.3 0.6 1.3 0.5 2.1 0.6 4.8 2.4 6.5 0.4 2.5 0 1.7-1.2 2.5-4.2 2.1-3-0.9-1.1-0.6-8.5-2-2.6 0.1-7.4 1.1-2.1-1.5-1.5-1.6-0.6-1.5 0.1-2.1-0.1-1.1-0.6-1.3-2.2-1.6-1.1-0.1-0.6 0.6 0.2 2.3-0.2 1.3-0.7 1-2.8 2.4-0.5 1-0.1 1.2 0.2 1.3 0 1.2-0.6 1.2-1.2 1-1.7 0.8-1.7 0-1.3-0.7-3.2-2.4-2.8-1-2 0.2-1.3 0.8-0.9 2.1-0.9 1.1-6.5 2.8-1.5 1-2 2.6-0.9 0.8-1.4 0.2-4.3-0.9-3.8 0.9-4 0-1.1 0.4-1 0.9-1.8 2.6-1 0.9-1.8 0.2-8.4 0.1-1.2-0.3-0.3-0.6 0.5-3-0.3-1.1-1.3-2.2-1.2-2.4-0.7-0.8-1.5-0.6-1.3 0.2-1.2 0.7-6.5 4.7-2.7 1.2-2 0.3-1.4-0.3-3.1-1.7-2.4-0.7-1.4 0.1-3.9 1.1-8.6-2.1-1 0.3-1.1 0.7 0 1.4 0.7 3.3 0.1 1.4-0.4 0.9-1.1-0.1-1.2-0.7-3.5-3.5-1.6-1.9-0.9-1.7-0.5-1.9-1.2-25.6 0.1-1.6 0.2-1.3 1.3-1.1 1.1-0.1 1.9 0.4 0.7-0.1 0.4-0.7 0.1-1.2-0.6-2.6-0.9-1.5-1.5-1.5-3.5-2.7-1.9-2.5-1.3-2.6-1.8-4.6-1.3-2.3-1.4-1.8-1.6-1-2.9-1.3-2.4-0.6 0.1-3.4 1.2-4 1.3-2.7 4.7-5.7 1.6-1.5 4.1-2.7 1.8-1.6 0.8-1.5 0.2-1.5-0.2-1.3-0.8-1.1-2.1-2-1.8-2.6-0.3-1.1 0.4-0.9 0.8-0.5 1.2-0.1 1.3 0.5 1.4 1 4.8 4.5 1.3 1 1.4 0.2 1.9-0.3 7.7-3.7 1.5-0.1 1.5 0.5 1.3 0.9 1.8 0.6 2 0.1 5.4-1.5 11.9 0.1 3.8-1 9.9-5.2 2.4-0.6 2.1 0.1 2.1 0.4 1.8 0.8 1.6 1.2 3.7 4.3z" id="county_romania_neamt_18" name="Neamt">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m613.4 432.5l6.4 7.6 4.3 3.2 1.4 1.4 1.4 2.2 3.7 7.9 0.5 2.3-0.1 1.4-0.7 1-0.2 1.3 0.5 1.6 3 3.1 1.1 1.5 0.4 3 0.4 1.1 0.7 1 1.5 0.9 1.5 0.3 4.6-0.4 1.2 0.4 1.1 0.9 0.5 1.9 1.1 1 0.9 0.2 2.5-2.2 0.9-0.3 0.5 0.3 0.1 1.1-0.4 2.7 0.3 1.7 1.5 1.7 2.5 2 0.9 1.4 0.7 1.5 0.7 4.4 0.2 5.7 0.5 2.2 0.7 1.6 1.8 1 2.9 0.9 0.9 0.4 2.4 2.3 0.8 1.1 0.6 1.3-0.2 2.1-0.9 1.2-1.9 1.9-0.7 1.1 0 1.4 0.4 1.5 4 4 2 3.6-2.7 3.4-1.3 2.4-1.9 1.6-1.4 0.8-1.5 0.4-5.7-0.5-1.4 0.3-1.5 1.2-1.8 2.1-1.2 0.5-2.3-0.2-2.5-1.4-1.2-0.3-1.5 0.1-3.6 1.7-3.8 3.6-4.4-0.3-1.5 0.2-2.8-1.1-2.4-0.1-6.4 2.1-6.5 0.1-0.8 1.7-0.6 0.6-1.2-0.4-2.1-1.1-1.3-1.1-7.3-9-1.8-1-1.6-0.6-5-0.7-1.2-0.9-0.8-1.4-0.4-2.7 0.6-4.3-0.1-2.1-0.5-2.1-1.4-2.4-1.1-1.2-0.8-0.4-2.9 0.8-1.2 0-2.3-1-1.1-1-0.9-1.6-0.8-1.9-0.8-3.7-0.7-6.4-0.4-1.6-0.9-1.6-4.4-4.9-5.8-11.3-1.2-1.8-2.1-2.3-1.6-2.8-0.1-2.1 0.3-4.1-0.3-1.5-0.7-1.8-1.2-2-1.1-1.2-3.2-2.4-0.7-1.3-0.5-1.8-0.7-6.7-1.9-9.4 1.7-1.2 1.4-0.5 17.8-3.2 2.4-0.1 4.5 0.9 4.5 1.7 1.5 0.3 2.9-1 1.4-0.1 1.3 0.8 0.7 1 1.4 2.4 0.9 0.8 1.5 0.3 1.8-0.5 2-1.8 1-1.8 0.5-1.9 0.7-3.4 0.9-1.2 1.4-0.6 2.3 0.3 5.6 3.3 4.9 1z" id="county_romania_prahova_16" name="Prahova">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m678.1 134.4l1.5 2.2 0.3 1.4-0.4 1.7-1.1 2.9-0.1 1.9-0.5 1.4-0.9 0.9-2.3 0.4-11-1.3-1.8 0.5-0.4 1.4 1.1 2.6 6.5 6 0.6 1.1-0.9 1.2-1.1 0.8-8.1 1.9-3.7-4.3-1.6-1.2-1.8-0.8-2.1-0.4-2.1-0.1-2.4 0.6-9.9 5.2-3.8 1-11.9-0.1-5.4 1.5-2-0.1-1.8-0.6-1.3-0.9-1.5-0.5-1.5 0.1-7.7 3.7-1.9 0.3-1.4-0.2-1.3-1-4.8-4.5-1.4-1-1.3-0.5-1.2 0.1-0.8 0.5-0.4 0.9 0.3 1.1 1.8 2.6 2.1 2 0.8 1.1 0.2 1.3-0.2 1.5-0.8 1.5-1.8 1.6-4.1 2.7-1.6 1.5-4.7 5.7-1.3 2.7-1.2 4-0.1 3.4-5.6 0.8-1.5 0.5-2.2 0.3-1.6-0.2-1.7-1.1-1.3-1.4-1-1.5-1.2-1.2-11.8-8.1-1.8-0.8-1.8-0.1-2.6 0.6-2.1 0.9-1.8 1.2-1 1.8-0.3 1.4-0.2 2.7-0.6 1.3-0.9 1-1.4 0.6-2.9 0-4-1.6-4.8-2.3-9.5-1.8-0.6-10.8 0.6-4.7 0.4-1.6 0.4-2.4-0.2-0.9-0.5-0.3-2 0.2-1.2-0.3-1.2-1.6 0.1-1.6 0.8-2.1 1.4-2.4 0.8-2.7-0.1-1.8-0.4-1.5-1.3-2.8-0.8-1.3-2.1-2.7-0.9-1.7-0.2-1.1 0.5-0.9 0.7-0.6 1-0.1 1.6 0.2 1.1-0.7 0.3-1.4-0.1-1-1.4-2.3 0.2-0.8 0.8-0.7 2.7-1.5 1.2-1.3 0.7-2.2-0.1-1.8-0.6-1.6-1.2-2.4-2.8-3.3-8.3-6.8-1.2-1.4 6.3-2.2 0.9-1 0.8-1.5-0.2-1.7-0.9-1.4-4.5-4.8-2.5-4-1.3-4.3 7.9-1.4 6.6-2.9 4.4-4.3 10.2-17 4.6-3.1 51.8-5.7 6.9-2.8 5.6-0.7 3.2-1.5 1.7-0.3 5.1 0.5 6.7-2 7.7-0.1 1.8 9.6 0.7 1.8 1.6 1.5 2.8 1.8 4.3 3.7 5.4 3 2.5 2.5 12 15.4 2 3.5 7 8.7 1.3 2.2 3.4 3.5 1.1 1.9 0.9 3.4 1.7 8.2 0.1 1.9-0.3 4.1 0.2 1.8 0.6 1.6 2.6 3.7 2.6 2.1 4.4 0.6z" id="county_romania_suceava_5" name="Suceava">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m737.9 240.5l2.1 2.9 1.5 1.6 4.8 4.1 2 2.2 1.2 2.7 0.1 3.8-0.3 3.5 0.4 3.5 11 19.3 4 9.4 2.4 9.5 1.1 7.1 0.8 19.3-3.2-0.4-3.7-1.1-1 0.1-1.4 1.9-0.8 0.8-1.2 0.3-1.9-0.2-4.5-2.8-2.1-0.4-2.7 0.1-7.8 1.6-2.6 1.5-1.2 1.3-1.8 2.5-1.1 1.1-2.9 1.9-1 1.2-1.2 2.3-0.9 0.7-1.4 0.3-5.5-2-1.4-0.3-1.6 0.2-1.8 0.9-0.9 1-0.8 2.2-0.4 0.6-1 0.2-4.1-1.7-1.6-0.2-1.8 0-2.1 0.5-1.7-0.2-2.6-0.7-4.6-0.2-3.2-0.6-10.2 0.7-1.7 0.5-1.2 1.1-0.7 1.3-0.3 1.4-0.3 4.4-3.2 1.5-12.2-1.8-1.7-0.9-1.4-2.6-1-3.3-0.5-1.3-0.9-1.1-1.2-0.9-2-1-0.6-1.4 0.3-1.1 1.4-1.6 0.3-1-0.6-1.3-1-1.3-3.9-2.4-0.8-0.8-1.5-1.8-0.8-0.4-0.9 0.1-3.4 3-4.4 1.5 0.8-5.8 0.5-1.6 1.3-2.7 0.4-1.6 0.5-6.2 0.2-1.3 1.5-4-0.2-1.4-0.6-1.3-1.8-1.1-1.5-0.2-1.5 0.3-4.2 2.3-2.7 0.8-1.5 0-0.9-1 0.1-2.1 0.8-3.6-0.1-1.8-0.5-1.8-1.6-1.7-1.5-0.9-5.6-0.8-4.3-1.2-1.5-1.4-0.6-2.2 0.5-4.3 0.9-2 1.5-1.3 1.4-0.6 1.1-1-0.1-1.8-1.4-2.8-1.5-2.3-1.4-2.5-1.8-7-0.3-11.4 3.9-1.1 1.4-0.1 2.4 0.7 3.1 1.7 1.4 0.3 2-0.3 2.7-1.2 6.5-4.7 1.2-0.7 1.3-0.2 1.5 0.6 0.7 0.8 1.2 2.4 1.3 2.2 0.3 1.1-0.5 3 0.3 0.6 1.2 0.3 8.4-0.1 1.8-0.2 1-0.9 1.8-2.6 1-0.9 1.1-0.4 4 0 3.8-0.9 4.3 0.9 1.4-0.2 0.9-0.8 2-2.6 1.5-1 6.5-2.8 0.9-1.1 0.9-2.1 1.3-0.8 2-0.2 2.8 1 3.2 2.4 1.3 0.7 1.7 0 1.7-0.8 1.2-1 0.6-1.2 0-1.2-0.2-1.3 0.1-1.2 0.5-1 2.8-2.4 0.7-1 0.2-1.3-0.2-2.3 0.6-0.6 1.1 0.1 2.2 1.6 0.6 1.3 0.1 1.1-0.1 2.1 0.6 1.5 1.5 1.6 2.1 1.5 7.4-1.1 2.6-0.1 8.5 2 1.1 0.6 3 0.9 4.2-2.1z" id="county_romania_bacau_1" name="Bacau">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m822.8 445.5l-0.6 2.7-0.3 4.4-0.2 1.1-1.1 1.9-0.5 2.3-1.9 3.1 5.8 5.1 3.6 1.5 3.7-1.5 1.3 1.3 0.8 1.8-1.3 2-1.6 3.1-0.5 2.9 1.6 1.3 2 0.6 2.1 1.6 1.8 2 0.9 1.9-0.4 2-1.2 2-1.6 1.5-1.4 0.7-0.3 0.7 0.7 4.8 0.6 1.2-0.1 1.8-1 1.6-0.3 1.1 1.1 5.4 0.1 3.4-1.5 1.5-0.4 0.7 0.1 7.9-0.8 1.5-2.8 3.8-1.1 2.3-0.4 3.6-0.7 3.1-1.6 2.8-2.1 2-2.2 0.8-2-0.4-3.1-2.1-2.1-0.5-2 0.1-1.7 0.3-3.2-3-0.8-1.1-1.9-1.2-2.2-0.4-4.9 0.5-2.4 0.8-1.8 1-2.4 0.8-4.1 0.9-28.8-0.8-3-1.2-1.3-0.7-1.4-0.2-1.8 0.6-2.4 1.2-2.1 0.1-1.7-0.2-8.7-3.6-0.4-1.1 0.7-6.9-0.7-1.8-2.1-2.2-0.3-1.4 0.4-1.4 1.4-1.3 1.1-0.6 3.8-1 0.9-1.4 0.8-2.6 1.1-5.5 0.5-3.2 0.1-2.4-0.2-1.4-0.5-0.9-1-0.4-2.5 0.1-1.4-0.2-0.8-0.5-0.4-1.1 0.1-4.2-0.1-1.5-0.7-1.2-0.8-0.7-2.3-0.9-0.6-1-0.1-1.6 0.1-3-0.1-1.3-0.4-1.1-0.7-0.8-0.9-0.5-1-0.1-0.9 0.4-0.7 0.6-0.1 2-0.3 1-1 0.9-1.2 0.3-1-0.3-0.7-0.6-1.6-4.1 0.1-2.2 0.9-1.2 1.5-1.3 8.4-2.9 5 0.7 1.3 0 4.2-1.3 1.4 0 2.7 1.1 0.6-0.6 0.4-2.2-0.5-3.4 0-1.6 0.7-1.2 2-0.9 1.6 0 1.6 0.3 1.3-0.3 1-1.2 0.8-3.4 0.7-2.1 1.9-3.3 0.4-2.9 1-3.1 2.6-4.1 2.7-3.5 1.9-1.7 2.1-1.4 6.2-2.3 6.1 2.7 3.7-0.2 1.9-0.4 1.3 0.3 0.9 0.9 2.1 2.6 3.6 3.1 5.8 3.2 3.7 0.7 6.9-0.3 2.5 0.4 2.6 0.9 6.4 0.8z" id="county_romania_braila_9" name="Braila">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m758.8 446.9l-0.4 2.9-1.9 3.3-0.7 2.1-0.8 3.4-1 1.2-1.3 0.3-1.6-0.3-1.6 0-2 0.9-0.7 1.2 0 1.6 0.5 3.4-0.4 2.2-0.6 0.6-2.7-1.1-1.4 0-4.2 1.3-1.3 0-5-0.7-8.4 2.9-1.5 1.3-0.9 1.2-0.1 2.2 1.6 4.1 0.7 0.6 1 0.3 1.2-0.3 1-0.9 0.3-1 0.1-2 0.7-0.6 0.9-0.4 1 0.1 0.9 0.5 0.7 0.8 0.4 1.1 0.1 1.3-0.1 3 0.1 1.6 0.6 1 2.3 0.9 0.8 0.7 0.7 1.2 0.1 1.5-0.1 4.2 0.4 1.1 0.8 0.5 1.4 0.2 2.5-0.1 1 0.4 0.5 0.9 0.2 1.4-0.1 2.4-0.5 3.2-1.1 5.5-0.8 2.6-0.9 1.4-3.8 1-1.1 0.6-1.4 1.3-0.4 1.4 0.3 1.4 2.1 2.2 0.7 1.8-0.7 6.9 0.4 1.1-2.3 1.2-0.5 1.5 0.7 0.7 1.9 1.5 0.5 0.8-0.5 0.7-1 0.5-2.4 0.6-3 1.2-1.5 0.1-0.4-0.4-0.1-1.5 0.2-1.9-0.1-1.1-0.6-1-1-1-1.4-0.9-1.7-0.9-2.5-0.7-1.6 0.2-1.3 0.8-1.1 1.2-1.5 0.9-1.5 0-1.4-0.6-3.1-2-2.5-0.9-2.1-0.1-3.7 0.7-1.5 0-2.4-0.8-6.3-1.1-7 0.5-2.5-0.2-1.9-0.5-3.5-3.1-2.4-1.2-2-3.6-4-4-0.4-1.5 0-1.4 0.7-1.1 1.9-1.9 0.9-1.2 0.2-2.1-0.6-1.3-0.8-1.1-2.4-2.3-0.9-0.4-2.9-0.9-1.8-1-0.7-1.6-0.5-2.2-0.2-5.7-0.7-4.4-0.7-1.5-0.9-1.4-2.5-2-1.5-1.7-0.3-1.7 0.4-2.7-0.1-1.1-0.5-0.3-0.9 0.3-2.5 2.2-0.9-0.2-1.1-1-0.5-1.9-1.1-0.9-1.2-0.4-4.6 0.4-1.5-0.3-1.5-0.9-0.7-1-0.4-1.1-0.4-3-1.1-1.5-3-3.1-0.5-1.6 0.2-1.3 0.7-1 0.1-1.4-0.5-2.3-3.7-7.9-1.4-2.2-1.4-1.4-4.3-3.2-6.4-7.6 5.8-12.4 4.1-1.3 5.2-0.2 1.3-0.5 0.7-0.9 0.4-2.8 0.4-1.5 1-1.6 1-0.4 1.1 0.2 1.1 0.7 1.9 1.9 1.2 0.6 1.8 0.1 1.9-1 1-1.4 0.8-3.5 0.6-2.1 1.7-2.6 0.9-2 0.4-2 0.2-1.7 0.4-1.8 2-4.2 0.2-1.8-0.3-1.7-0.5-1.4-1-3.2 4.7 4.5 4.4 6.4 6.9 12.2 2.1 2.4 1.8 1.5 3 0.4 1.5-0.1 2.4-0.8 1.3 0 2.4 1 6.7 5.8 2.3 2.9 3.6 2.7 4.5 2.6 1.3 0.5 2.1 0.3 1.5 0.6 1.8 0.1 0.7-1.6-0.4-1.3 1-1.1 1.6-0.1 2.5 0.5 3.2 1.4 1.8 1.4 0.6 1.3 0 3.1 0.8 1.9 2.7 2.9 1.9 1.3 1.4 0.5 1.4-0.1 1.2-0.5 2.6-1.5 1.2-0.4 1.5-0.1 0.6 0.6 0.2 1-0.3 2.7 0.4 1.4 0.9 0.2 1-0.4 1.8-1.9 1-0.8 1-0.3 1.7 0.3 1.2 0.7 1 1 0.9 0.3 1.8-0.1 1.3 0.3 0.8 0.7 0.4 1 0.4 2.4 0.7 1.1 1.1 0.6 5 1.4 2.4 0.3 4.8-0.2z" id="county_romania_buzau_15" name="Buzau">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m831 339.5l-0.7 2.2-0.9 0.5-0.2 1.6 0.6 0.4 0.1 0.9-1.3 5.3-0.2 1.5 0.3 2.2 2.6 7.6 0.5 2.6 1 2.2-0.6 2.3-0.2 1.2 0.3 1.2 1.2 2.5-0.3 0.7-1.4 1-0.5 0.8 0.3 4.4 1.6 4.6 1.9 3.6 0.9 1.5 0.9 15.1-0.2 2.5 0.7 1.9-1.5 0.8-3.5-0.1-1.4 0.5-1.7 1.3-1.8 1.7-1.3 1.7 5.9 3.1 2.4 1.9 2.6 4.8 0 5.1 0.8 1.5 4.2 5.2 0.2 0-1.6 2-0.9 3-1 0.6-1.1-0.2-3-1.5-1.9-0.6-2.1 0.2-4.6 1.6-1.1 0.2-0.7 0.5-1.5 2.4-6.4-0.8-2.6-0.9-2.5-0.4-6.9 0.3-3.7-0.7-5.8-3.2-3.6-3.1-2.1-2.6-0.9-0.9-1.3-0.3-1.9 0.4-3.7 0.2-6.1-2.7-2.8-3.1-1-1.7-1.9-5.3-0.4-1.1 0-3.2-0.8-3.3-0.9-2.1-1.1-1.8-2.2-2.2-1.8-3.1-1.1-0.7-2.9-1.5-1-1-2.7-3.9-1.4-3.3-0.6-2.2-11.2-28.4-1-4.1 0.1-3.3 0.3-1.7 0.8-1.5 0.9-1.2 1.5-1.6 2.6-3.3 2.3-2 1.9-1.2 3-0.6 3.7-0.2 1.7-0.5 1.8-1.6 1-1.4 2.2-1.9 6.1-0.4 3.6 5 1.3 2.6 1 4.4 1.3 3.8 0.9 1.7 1.1 0.8 1.3-0.6 0.6-1.6 0-2.3 0.6-4.1 0-1.4-0.9-2.8-2.1-4.1-0.2-1.2 0.4-1 1.4-0.9 18.1 2.3 1.7 0.6 0.8 0.9 0.3 2.3 0.7 0.9 1.1 0 0.9-0.6 1.7-3.1 0.8-1.3 1-0.8 1.7-0.8 1.5 0 7.9 2.6 3.9 2.1 2.7 0.7 1.6 0.1 3.5-0.9 0.4-0.2z" id="county_romania_galati_31" name="Galati">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m832.6 225.1l-0.1 1.3 1.7 4.3 4.2 7.3 0 2.9 5.9 11.9 1.1 4.2 0.3 2.2 0 2.1-0.7 1.7-1 1.9-0.6 2.2 0.9 2.5-0.9 0.7-0.4 1.2-0.2 5.7 0.2 1.2 1.3 2.8 1.3 0.4 0.1 1.2 0 4.8-0.1 1.3-0.6 1.1-1.5 0.8 0.8 2.1-0.5 0.8-1 0.4-0.7 0.8-0.6 4.6-0.5 0.7-1.3 0.4-0.2 1.1 0.4 3.1 0.1 1.9-1.6 3.7-1.3 1.3-3.2 1.4-0.4 1.1 0.3 2.6-0.2 0.8-2.5 0.9 0.3 1.3 1.9 3.2 1.3 1.9 0.3 1.3-1.2 3.6-0.6 3.7-2.1 6-0.4 0.2-3.5 0.9-1.6-0.1-2.7-0.7-3.9-2.1-7.9-2.6-1.5 0-1.7 0.8-1 0.8-0.8 1.3-1.7 3.1-0.9 0.6-1.1 0-0.7-0.9-0.3-2.3-0.8-0.9-1.7-0.6-18.1-2.3-1.4 0.9-0.4 1 0.2 1.2 2.1 4.1 0.9 2.8 0 1.4-0.6 4.1 0 2.3-0.6 1.6-1.3 0.6-1.1-0.8-0.9-1.7-1.3-3.8-1-4.4-1.3-2.6-3.6-5-1.4-7-0.8-19.3-1.1-7.1-2.4-9.5-4-9.4-11-19.3-0.4-3.5 0.3-3.5-0.1-3.8-1.2-2.7-2-2.2-4.8-4.1-1.5-1.6-2.1-2.9 1.2-2.5 0-1.7-0.4-2.5-2.4-6.5-0.6-4.8 12.2 0.8 7.9-1.4 2 0 2 0.6 1.9 0.7 2.6 0.6 1.9-0.1 3.9-1.3 1.1-1 1.2-2.4 0.7-1 1.5 0 1.9 0.8 3.9 0.7 2.1-0.3 1.3-0.7 0.5-1 0.2-1.8-1-0.7-1.9 0.3-1.2-0.1-0.7-0.5-0.2-0.7 0.5-2.3-0.1-2.5-0.8-2.3 0.2-1.1 0.8-1 1.2 0 1.4 0.7 6.3 5 2.9 3 4 5.3 1.2 0.8 0.7 0 0.3-0.9 0-2.9 0.5-1.4 1.4-1 1.3 0.2 0.9 0.9 0.4 1.5-0.1 1.7-1.7 5.6 0.1 1.1 1.1 0.9 1.4 0.1 1.7-0.2 1.1 0.3 3.4 2.2 3.9 1.3 1.5 0 0.9-0.7 0.4-1 1.3-0.8 0.9 0.1 1.9 1.5 1.3 0.6 1.2 0 1.7-1.3 1.8-1.1 5.4-0.7 0.8-0.5z" id="county_romania_vaslui_38" name="Vaslui">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m769 329.4l1.4 7-6.1 0.4-2.2 1.9-1 1.4-1.8 1.6-1.7 0.5-3.7 0.2-3 0.6-1.9 1.2-2.3 2-2.6 3.3-1.5 1.6-0.9 1.2-0.8 1.5-0.3 1.7-0.1 3.3 1 4.1 11.2 28.4 0.6 2.2 1.4 3.3 2.7 3.9 1 1 2.9 1.5 1.1 0.7 1.8 3.1 2.2 2.2 1.1 1.8 0.9 2.1 0.8 3.3 0 3.2 0.4 1.1 1.9 5.3 1 1.7 2.8 3.1-6.2 2.3-2.1 1.4-1.9 1.7-2.7 3.5-2.6 4.1-1 3.1-4.8 0.2-2.4-0.3-5-1.4-1.1-0.6-0.7-1.1-0.4-2.4-0.4-1-0.8-0.7-1.3-0.3-1.8 0.1-0.9-0.3-1-1-1.2-0.7-1.7-0.3-1 0.3-1 0.8-1.8 1.9-1 0.4-0.9-0.2-0.4-1.4 0.3-2.7-0.2-1-0.6-0.6-1.5 0.1-1.2 0.4-2.6 1.5-1.2 0.5-1.4 0.1-1.4-0.5-1.9-1.3-2.7-2.9-0.8-1.9 0-3.1-0.6-1.3-1.8-1.4-3.2-1.4-2.5-0.5-1.6 0.1-1 1.1 0.4 1.3-0.7 1.6-1.8-0.1-1.5-0.6-2.1-0.3-1.3-0.5-4.5-2.6-3.6-2.7-2.3-2.9-6.7-5.8-2.4-1-1.3 0-2.4 0.8-1.5 0.1-3-0.4-1.8-1.5-2.1-2.4-6.9-12.2-4.4-6.4-4.7-4.5 0.9-7.4 1.5-7.7 0.2-2.2 1.7-5 6.7-10.8 12.2 1.8 3.2-1.5 0.3-4.4 0.3-1.4 0.7-1.3 1.2-1.1 1.7-0.5 10.2-0.7 3.2 0.6 4.6 0.2 2.6 0.7 1.7 0.2 2.1-0.5 1.8 0 1.6 0.2 4.1 1.7 1-0.2 0.4-0.6 0.8-2.2 0.9-1 1.8-0.9 1.6-0.2 1.4 0.3 5.5 2 1.4-0.3 0.9-0.7 1.2-2.3 1-1.2 2.9-1.9 1.1-1.1 1.8-2.5 1.2-1.3 2.6-1.5 7.8-1.6 2.7-0.1 2.1 0.4 4.5 2.8 1.9 0.2 1.2-0.3 0.8-0.8 1.4-1.9 1-0.1 3.7 1.1 3.2 0.4z" id="county_romania_vrancea_27" name="Vrancea">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m637 540.6l2 0.6 4.2 0.6 1.1 0.4 0.6 0.7 0 2.5 0.3 1.2 0.8 1.5 0.3 1.2 0.2 2.4 1.1 1.4 6.5 3.6 0.9 1.1 0.3 1-0.5 1.2-0.7 0.8-4.1 2.9-0.9 1-1.2 2.3-0.5 2.5 0.3 1.2 0.9 1.3 3.3 1.7 2.5 1.9-1.9 1.3-0.4 0.9-0.1 1.9 1 1.1 1.5 0.9 2 0.7 0.6 0.6 0.1 0.8-1.2 2.4-1.2 1.3-6.3 3-2 1.4-1.8 1.8-2.7 3.6-2.7 4.3-1.2 3.9-5.7 6-2.6 2.1-1.3 0.8-1.4 0.3-1.4 0.1-1.6-0.3-1.7-0.4-1.6-0.8-1.8-1.1-8-7.2-1.2-0.6-2.4 0-0.9-0.3-0.8-0.8-0.8-1.8-1.5-1-2-0.7-2.8-1.4-1.1-1.8-0.7-2.8 1-6.7 1-2.9 1.7-3.3 0.5-1.6 0.4-4.3-2.6-5.7 2.4-1.9 5-6 1-1.4 0.5-1.3-0.4-1.2-3.6-1.2-0.4-0.9 0-0.9 0.4-0.9 2.3-1.7 0.6-1 0.4-1.5 0.7-1.5 1.3-1 2.6-3.1 0.6-0.6 0.8-1.7 6.5-0.1 6.4-2.1 2.4 0.1 2.8 1.1 1.5-0.2 4.4 0.3z m-6.2 48.2l-4.6-3.9 2.6-7.6-8.3-2-0.9-9.9-7.1 2.6-5.1 8.9 5.6 2.4 0 4.7-7 0.6 0 4.7 7 7.5 5.8 1.3 5.1 6.7 2.8-2.5-3.3-8.1 0.8-2.3 5 1.6 1.6-4.7z" id="county_romania_ilfov_17" name="Ilfov">
                                        +</path>
                                        +<path fill="#f3d973" stroke="#fff" 
                                        +    d="m902.5 552.5l-6-1.4-6.1-3.2-6.8 2.1-8.4 0-7.6-3.2-5.3-6.4-6.1 0-2.2 6.4-4.6 1.1-9.1-8.6-5.3-2.1-9.6 0.8 1.6-2.8 0.7-3.1 0.4-3.6 1.1-2.3 2.8-3.8 0.8-1.5-0.1-7.9 0.4-0.7 1.5-1.5-0.1-3.4-1.1-5.4 0.3-1.1 1-1.6 0.1-1.8-0.6-1.2-0.7-4.8 0.3-0.7 1.4-0.7 1.6-1.5 1.2-2 0.4-2-0.9-1.9-1.8-2-2.1-1.6-2-0.6-1.6-1.3 0.5-2.9 1.6-3.1 1.3-2-0.8-1.8-1.3-1.3-3.7 1.5-3.6-1.5-5.8-5.1 1.9-3.1 0.5-2.3 1.1-1.9 0.2-1.1 0.3-4.4 0.6-2.7 1.5-2.4 0.7-0.5 1.1-0.2 4.6-1.6 2.1-0.2 1.9 0.6 3 1.5 1.1 0.2 1-0.6 0.9-3 1.6-2 2.4-0.3 3.1 1.7 2.1 2.9-0.6 3 3.1 8.1 2.1 3.7 2.4 1.6 1.8 0.5 3.7 2.1 9.4 2.4 8.7 4.6 14.1 3.2 3.9-0.5 3.3-0.1 1.4-0.6 1.1-1.4-2.9-1.3-0.8-0.7-0.8-2.5 0.2-1.1 3-1.6-0.1-2.2 0.1-2.2 2.8-0.7 1.6 0.6 2.8 2 2.4 0.4 1.3 1 1.8 1.9 2.1 1.2 2.4-0.9 0.5-1 0.3-2.9 0.6-1.3 1.7-0.9 2.4-0.1 1.4-0.7 5.4-4.5 4.3-1.2 1.8-0.8 1.5-1.6 0.9-0.4 2.6-0.2 0.5-0.4 0.4-1.1 0.9-1.1 1.6-1.4 2.3-1.2 1.7-0.1 1.7 0.3 2.2 0 1.9-1 1.4-1.6 1-0.7 1.1 0.3 2.2 0.9 8.1 0.9 14.7 5.3 4.9 4.4 1.3 0.7 2.3 2.2 1.8 5.2 0.5 5.8-1.4 4.3 0.7 1 0.1 1.1-0.8 2.2-0.9-0.2-2.8 0.1 0 0.9 1.6 2.2 1.1 2.7 1.9 2 3.4 0.4-2.4 2.5-1.3 4.2-0.9 13.1-0.6 2.6-1.3 4.2-0.3 2.1-0.2 2.4-0.2 2.2-0.8 1.4 0.7 3.2-2.7 4.2 1.4 2.7-0.7 1.8-0.9 0.6-1 0.2-1 0.6-1.5 2.3-0.8 0.7-2.1-1.2-1.2 0.3-2.1 0.8-20.6 3.3-13.1 0.8-3.8 1.3-10.5 7.3-3.1 3.1-2.7 3.8-0.8-1.1 0.1-2.2-1.4-2.7-0.7-2.3 2.4-1 2.5-0.5 3.9-2 4.2-1.1 2.4-1.6 1.9-2.6 0.6-3.4-0.6-1.9-1.3-1.9-3.2-3.4 0.6 2.4 0.2 2.8-1.6-0.4-1.6 1.1-1.4 0.5-1.2-2.2-0.5-2.8-0.2-8.9 1.1-2.9 4.9-1.8 1.2-2-0.9-1.5-4.6-3.1-1.4-0.6-3.2 0-3.3-1.1-1.1 0.2-0.7 2.2-0.6 1.3-1.2 0.6-2.3 0.2-1.1 0.4-3.9 3.7-1.1 1.7-0.6 3.2 0.1 0.8 1 0.8 0.3 1-0.3 0.8-1.1 1.1 0.3 1.4 0.7 1.1 0.9 0.8 2.3 1 5.2 5.4-1.4 1.5-1.5 0.5 1.4 1 0 1.2-1.3 0.8-0.1 1.4 0.8 1.5 1.4 1.2-1 0.8-1.4 0.4-4.7 0.1-1.1 0.5-6.3 3.9-1.1 1-1 2.1-0.2 1.9 0.7 0.8 1.5-1.2-0.4 1.8-2 0.7z" id="county_romania_tulcea_13" name="Tulcea">
                                        +</path>
                                        +    <ng-container *ngFor="let county of ids; let i = index">
                                        +            <image xlink:href="assets/images/medkit.svg" height="0" width="0" id="icon_res_{{county.id}}" style="pointer-events:none"/>
                                        +    </ng-container>
                                        +    <ng-container *ngFor="let county of ids; let i = index">
                                        +        <image xlink:href="assets/images/volunteers.svg" height="0" width="0" id="icon_vol_{{county.id}}" style="pointer-events:none"/>
                                        +    </ng-container>
                                        +
                                        +    <rect x="0" y="0" width="0" height="0" fill="#000" id="recttest" style="pointer-events: none"></rect>
                                        +    <text x="0" y="0" fill="#ffffff" id="recttext" style="pointer-events:none"></text>
                                        +</svg>
                                        +</div>
                                        +</div>
                                        +
                                        +
                                        + +
                                        +

                                        + ./map.component.scss +

                                        +
                                        .svg-box {
                                        +    width: 100%;
                                        +    height: 0;
                                        +    padding-top: 100%; /* Aspect ratio */ 
                                        +    position: relative;
                                        +}
                                        +
                                        +.svg-box-content {
                                        +    position: absolute;
                                        +    top: 0;
                                        +    left: 0;
                                        +}
                                        +
                                        +
                                        + +
                                        +
                                        +
                                        +
                                        + Legend +
                                        +
                                        +
                                        Html element +
                                        +
                                        +
                                        Component +
                                        +
                                        +
                                        Html element with directive +
                                        +
                                        +
                                        + + +
                                        + + + + + + + + + + + + + + + + + + + + + +
                                        +
                                        +

                                        result-matching ""

                                        +
                                          +
                                          +
                                          +

                                          No results matching ""

                                          +
                                          +
                                          +
                                          + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/NgodetailsComponent.html b/documentation/components/NgodetailsComponent.html new file mode 100644 index 0000000..d32f2f8 --- /dev/null +++ b/documentation/components/NgodetailsComponent.html @@ -0,0 +1,3024 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                          +
                                          + + +
                                          +
                                          + + + + + + + + +
                                          +

                                          +

                                          File

                                          +

                                          +

                                          + src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts +

                                          + + + +

                                          +

                                          Implements

                                          +

                                          +

                                          + OnInit + AfterContentChecked +

                                          + + +
                                          +

                                          Metadata

                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          selectorapp-organisation-details
                                          styleUrls./organisation-details.component.scss
                                          templateUrl./organisation-details.component.html
                                          +
                                          + +
                                          +

                                          Index

                                          + + + + + + + + + + + + + + + + + + + + + +
                                          +
                                          Properties
                                          +
                                          + +
                                          +
                                          Methods
                                          +
                                          + +
                                          +
                                          + +
                                          +

                                          Constructor

                                          + + + + + + + + + + + + + +
                                          +constructor(route: ActivatedRoute, router: Router, resourceService: ResourcesService, authService: AuthenticationService, organisationService: OrganisationService, filterService: FiltersService, location: Location, userService: UsersService, citiesandcounties: CitiesCountiesService) +
                                          + +
                                          +
                                          + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptional
                                          route + ActivatedRoute + + No +
                                          router + Router + + No +
                                          resourceService + ResourcesService + + No +
                                          authService + AuthenticationService + + No +
                                          organisationService + OrganisationService + + No +
                                          filterService + FiltersService + + No +
                                          location + Location + + No +
                                          userService + UsersService + + No +
                                          citiesandcounties + CitiesCountiesService + + No +
                                          +
                                          +
                                          +
                                          + + + + + +
                                          + +

                                          + Methods +

                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + addresource + + + +
                                          +addresource() +
                                          + +
                                          +

                                          navigate to add resource with ngo data

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + addvolunteer + + + +
                                          +addvolunteer() +
                                          + +
                                          +

                                          navigate to add volunteer with ngo data

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + canEdit + + + +
                                          +canEdit() +
                                          + +
                                          + +
                                          + Returns : any + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + close + + + +
                                          +close() +
                                          + +
                                          +

                                          manual close for message send popup

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + deleteSelf + + + +
                                          +deleteSelf() +
                                          + +
                                          +

                                          delete NGO

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + getData + + + +
                                          +getData() +
                                          + +
                                          +

                                          get org data

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + getResources + + + +
                                          +getResources() +
                                          + +
                                          +

                                          get resourcesData

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + getVolunteers + + + +
                                          +getVolunteers() +
                                          + +
                                          +

                                          get volunteers data

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + ngAfterContentChecked + + + +
                                          +ngAfterContentChecked() +
                                          + +
                                          +

                                          switch tab of necessary

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + ngOnInit + + + +
                                          +ngOnInit() +
                                          + +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + openMenu + + + +
                                          +openMenu(volunteerId: string, status: boolean) +
                                          + +
                                          +

                                          expand volunteer specialization row for a specific volunteer

                                          +
                                          + +
                                          + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptionalDescription
                                          volunteerId + string + + No + +

                                          of the current voluneer that is referenced

                                          + +
                                          status + boolean + + No + +

                                          is open or is cloed

                                          + +
                                          +
                                          +
                                          +
                                          +
                                          + Returns : void + +
                                          +
                                          + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + resourcefilterChanged + + + +
                                          +resourcefilterChanged(id: number) +
                                          + +
                                          +

                                          resource filter callback. Filters added to pager and then a request is made

                                          +
                                          + +
                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptionalDescription
                                          id + number + + No + +

                                          the index in the pager filters and filters Selected array

                                          + +
                                          +
                                          +
                                          +
                                          +
                                          + Returns : void + +
                                          +
                                          + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + resourceSortChanged + + + +
                                          +resourceSortChanged(pager: any) +
                                          + +
                                          +

                                          sort callback for resource table

                                          +
                                          + +
                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptional
                                          pager + any + + No +
                                          +
                                          +
                                          +
                                          +
                                          + Returns : void + +
                                          +
                                          + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + searchChanged + + + +
                                          +searchChanged(pager: any) +
                                          + +
                                          +

                                          search callback for both tabels

                                          +
                                          + +
                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptional
                                          pager + any + + No +
                                          +
                                          +
                                          +
                                          +
                                          + Returns : void + +
                                          +
                                          + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + sendNotification + + + +
                                          +sendNotification() +
                                          + +
                                          +

                                          send manual notification and trigger popup

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + validateinfo + + + +
                                          +validateinfo() +
                                          + +
                                          +

                                          send info updated and trigger popup

                                          +
                                          + +
                                          + Returns : void + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + volunteerfilterChanged + + + +
                                          +volunteerfilterChanged(id: number) +
                                          + +
                                          +

                                          volunteer filter callback. Filters added to pager and then a request is made

                                          +
                                          + +
                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptionalDescription
                                          id + number + + No + +

                                          the index in the pager filters and filters Selected array

                                          + +
                                          +
                                          +
                                          +
                                          +
                                          + Returns : void + +
                                          +
                                          + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + +
                                          + + + + volunteerSortChanged + + + +
                                          +volunteerSortChanged(pager: any) +
                                          + +
                                          +

                                          sort callback for volunteers table

                                          +
                                          + +
                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                          NameTypeOptional
                                          pager + any + + No +
                                          +
                                          +
                                          +
                                          +
                                          + Returns : void + +
                                          +
                                          + +
                                          +
                                          +
                                          +
                                          + +

                                          + Properties +

                                          + + + + + + + + + + + + + + +
                                          + + + + Public + authService + + +
                                          + Type : AuthenticationService + +
                                          + +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + categoryFilterValues + + +
                                          + Type : any[] + +
                                          + Default value : [] +
                                          + +
                                          + + + + + + + + + + + + + + + + + + + + +
                                          + + + + currentVolunteerId + + +
                                          + Type : string + +
                                          + Default value : '' +
                                          + +
                                          +

                                          store the current voluneer that has courses open

                                          +
                                          +
                                          + + + + + + + + + + + + + + +
                                          + + + + data + + +
                                          + Type : any + +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + + + hasResources + + +
                                          + Default value : false +
                                          + +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + hasVolunteers + + +
                                          + Default value : false +
                                          + +
                                          +

                                          flag for ngtemplate in HTML

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + loading + + +
                                          + Default value : false +
                                          + +
                                          +

                                          flag for HTML to display loading animation

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + locationFilterValues + + +
                                          + Type : any[] + +
                                          + Default value : [] +
                                          + +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + messageSent + + +
                                          + Default value : false +
                                          + +
                                          +

                                          flag for toast message

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + navigationExtras + + +
                                          + Type : NavigationExtras + +
                                          + +
                                          +

                                          var for data to send when adding new resource. Only for DSU

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + needupdate + + +
                                          + Default value : false +
                                          + +
                                          +

                                          var that holds data about NGO, resources and volunteers

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + ngoid + + +
                                          + Type : string + +
                                          + +
                                          +

                                          flag used to get ID from link and pass it to get method

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + nrvol + + +
                                          + Type : number + +
                                          + Default value : 0 +
                                          + +
                                          + + + + + + + + + + + + + + + + + + + + +
                                          + + + + propertyMap + + +
                                          + Type : object + +
                                          + Default value : { + '_id': 'id', + 'parent_id': 'parent_id' + } +
                                          + +
                                          +

                                          mapping of object keys to filter recognizable keys

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + resourceData + + +
                                          + Type : any[] + +
                                          + Default value : [] +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + + + resourceFiltersSelected + + +
                                          + Default value : Array(2) +
                                          + +
                                          + + + + + + + + + + + + + + + + + + + + +
                                          + + + + resourcePager + + +
                                          + Type : any + +
                                          + Default value : {} +
                                          + +
                                          +

                                          var that holds pager and filters for resources and volunteers

                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + selectedTab + + +
                                          + Type : string + +
                                          + Default value : 'volunteers' +
                                          + +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + specializationFilterValues + + +
                                          + Type : any[] + +
                                          + Default value : [] +
                                          + +
                                          + + + + + + + + + + + + + + + + + + + + +
                                          + + + + tabRef + + +
                                          + Type : NgbTabset + +
                                          + Decorators : +
                                          + + @ViewChild('tabRef', {static: true})
                                          +
                                          +
                                          + +
                                          +

                                          Tabs reference for vefifing which is open

                                          +
                                          +
                                          + + + + + + + + + + + + + + +
                                          + + + + tabsInitialized + + +
                                          + Default value : false +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + + + updateSent + + +
                                          + Default value : false +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + + + volunteerFiltersSelected + + +
                                          + Default value : Array(2) +
                                          + +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + volunteerPager + + +
                                          + Type : any + +
                                          + Default value : {} +
                                          + +
                                          + + + + + + + + + + + + + + + + + +
                                          + + + + volunteersData + + +
                                          + Type : any[] + +
                                          + Default value : [] +
                                          + +
                                          + + + + + + + + + + + + + + + + + + + + +
                                          + + + + volunteerTypeFilterValues + + +
                                          + Type : any[] + +
                                          + Default value : [] +
                                          + +
                                          +

                                          Fliterable values

                                          +
                                          +
                                          +
                                          + +
                                          + + +
                                          +
                                          import {
                                          +	Component,
                                          +	OnInit,
                                          +	ViewChild,
                                          +	AfterContentChecked,
                                          +} from '@angular/core';
                                          +import { ActivatedRoute, Router, NavigationExtras, ParamMap } from '@angular/router';
                                          +import { OrganisationService } from '../../../organisations.service';
                                          +import { NgbModal, NgbTabset } from '@ng-bootstrap/ng-bootstrap';
                                          +import {
                                          +	FormGroup,
                                          +	Validators,
                                          +	FormBuilder
                                          +} from '@angular/forms';
                                          +import { AuthenticationService } from '../../../../../core/authentication/authentication.service';
                                          +
                                          +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
                                          +import { ResourcesService } from '@app/pages/resources/resources.service';
                                          +import { Location } from '@angular/common';
                                          +import { FiltersService, UsersService } from '@app/core';
                                          +
                                          +/**
                                          +	 * Alert message interface
                                          +	 */
                                          +interface Alert {
                                          +	type: string;
                                          +	message: string;
                                          +}
                                          +
                                          +@Component({
                                          +	selector: 'app-organisation-details',
                                          +	templateUrl: './organisation-details.component.html',
                                          +	styleUrls: ['./organisation-details.component.scss']
                                          +})
                                          +export class NgodetailsComponent implements OnInit, AfterContentChecked {
                                          +
                                          +	/**
                                          +	 * var that holds data about NGO, resources and volunteers
                                          +	 */
                                          +	needupdate = false;
                                          +	data: any;
                                          +	resourceData: any[] = [];
                                          +	volunteersData: any[] = [];
                                          +	/**
                                          +	 * var that holds pager and filters for resources and volunteers
                                          +	 */
                                          +	resourcePager: any = {};
                                          +	resourceFiltersSelected = Array(2);
                                          +	volunteerPager: any = {};
                                          +	volunteerFiltersSelected = Array(2);
                                          +	/**
                                          +	 * flag for ngtemplate in HTML
                                          +	 */
                                          +	hasVolunteers = false;
                                          +	hasResources = false;
                                          +
                                          +	nrvol = 0;
                                          +	/**
                                          +	 * flag used to get ID from link and pass it to get method
                                          +	 */
                                          +	ngoid: string;
                                          +	/**
                                          +	 * var for data to send when adding new resource. Only for DSU
                                          +	 */
                                          +	navigationExtras: NavigationExtras;
                                          +	/**
                                          +	 * Fliterable values
                                          +	 */
                                          +	volunteerTypeFilterValues: any[] = [];
                                          +	categoryFilterValues: any[] = [];
                                          +	specializationFilterValues: any[] = [];
                                          +	locationFilterValues: any[] = [];
                                          +	/**
                                          +	 * Tabs reference for vefifing which is open
                                          +	 */
                                          +	@ViewChild('tabRef', { static: true}) tabRef: NgbTabset;
                                          +	tabsInitialized = false;
                                          +	selectedTab = 'volunteers';
                                          +
                                          +	/**
                                          +	 * flag for toast message
                                          +	 */
                                          +	messageSent = false;
                                          +	updateSent = false;
                                          +	/**
                                          +	 * flag for HTML to display loading animation
                                          +	 */
                                          +	loading = false;
                                          +	/**
                                          +	* mapping of object keys to filter recognizable keys
                                          +	*/
                                          +	propertyMap = {
                                          +		'_id': 'id',
                                          +		'parent_id': 'parent_id'
                                          +	};
                                          +	/**
                                          +	* store the current voluneer that has courses open
                                          +	*/
                                          +	currentVolunteerId = '';
                                          +
                                          +	constructor(
                                          +		private route: ActivatedRoute,
                                          +		private router: Router,
                                          +		private resourceService: ResourcesService,
                                          +		public authService: AuthenticationService,
                                          +		private organisationService: OrganisationService,
                                          +		private filterService: FiltersService,
                                          +		private location: Location,
                                          +		private userService: UsersService,
                                          +		private citiesandcounties: CitiesCountiesService,
                                          +	) {
                                          +		if (this.router.url.indexOf('validate') > -1) {
                                          +			this.needupdate = true;
                                          +		}
                                          +		/**
                                          +		 * set a specific open tab if necessary
                                          +		 */
                                          +		const navigation = this.router.getCurrentNavigation();
                                          +
                                          +		if (navigation && navigation.extras && navigation.extras.state) {
                                          +			this.selectedTab = navigation.extras.state.tabName;
                                          +		}
                                          +	}
                                          +
                                          +	ngOnInit() {
                                          +		/**
                                          +		 * get values that can be queried for the filters
                                          +		 */
                                          +		this.citiesandcounties.getCounties().subscribe((response: any) => {
                                          +			const aux = response;
                                          +			aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id);
                                          +			this.locationFilterValues = aux;
                                          +		});
                                          +		this.filterService.getCategoryFilters().subscribe((data) => {
                                          +			this.categoryFilterValues = data.map((x: any) => {
                                          +				const parent = data.find((y: any) => y._id === x.parent_id);
                                          +				return {
                                          +					id: x._id,
                                          +					name: x.name,
                                          +					parent_id: x.parent_id,
                                          +					pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null),
                                          +					level: x.parent_id === '0' ? 0 : 1
                                          +				};
                                          +			});
                                          +		});
                                          +		this.filterService.getSpecializationFilters().subscribe((data) => {
                                          +			this.specializationFilterValues = data.map((elem: any) => {
                                          +				return {id: elem._id, name: elem.name};
                                          +			});
                                          +		});
                                          +		/**
                                          +		 * get current id, init pager, and get all data with the id
                                          +		 */
                                          +		this.ngoid = this.route.snapshot.paramMap.get('id');
                                          +		this.volunteerPager = this.organisationService.getVolunteerPager();
                                          +		this.resourcePager = this.organisationService.getResourcePager();
                                          +		this.getData();
                                          +		this.getResources();
                                          +		this.getVolunteers();
                                          +	}
                                          +	/**
                                          +		 * switch tab of necessary
                                          +		 */
                                          +	ngAfterContentChecked() {
                                          +		if (this.tabRef.tabs) {
                                          +			this.tabRef.select(this.selectedTab);
                                          +		}
                                          +	}
                                          +	/**
                                          +		 * get org data
                                          +		 */
                                          +	getData() {
                                          +		this.organisationService.getorganisation(this.ngoid).subscribe(data => {
                                          +			this.data = data;
                                          +			this.navigationExtras = {
                                          +				state: {
                                          +					ngo: {
                                          +						name: data.name,
                                          +						_id: this.ngoid
                                          +					}
                                          +				}
                                          +			};
                                          +		});
                                          +	}
                                          +		/**
                                          +		 * get volunteers data
                                          +		 */
                                          +	getVolunteers() {
                                          +		this.organisationService.getVolunteersbyorganisation(this.ngoid, this.volunteerPager).subscribe(data => {
                                          +			this.volunteerPager.total = data.pager.total;
                                          +			this.volunteersData = data.data;
                                          +			if (!!data.data.courses) {
                                          +				data.data.courses = data.data.courses.reverse();
                                          +			}
                                          +			if (Object.entries(this.volunteerPager.filters).length === 0 && this.volunteerPager.filters.constructor === Object) {
                                          +				if (this.volunteersData.length === 0) {
                                          +					this.hasVolunteers = false;
                                          +				} else {
                                          +					this.hasVolunteers = true;
                                          +					this.nrvol = data.pager.total;
                                          +				}
                                          +			} else {
                                          +				this.hasVolunteers = true;
                                          +			}
                                          +		});
                                          +	}
                                          +	/**
                                          +		 * get resourcesData
                                          +		 */
                                          +	getResources() {
                                          +		this.organisationService.getResourcesbyorganisation(this.ngoid, this.resourcePager).subscribe(data => {
                                          +			this.resourcePager.total = data.pager.total;
                                          +			this.resourceData = data.data;
                                          +			if (Object.entries(this.volunteerPager.filters).length === 0 &&
                                          +				this.volunteerPager.filters.constructor === Object &&
                                          +				this.resourceData.length === 0) {
                                          +
                                          +				this.hasResources = false;
                                          +			} else {
                                          +				this.hasResources = true;
                                          +			}
                                          +		});
                                          +	}
                                          +	/**
                                          +		 * resource filter callback. Filters added to pager and then a request is made
                                          +		 * @param {number} id the index in the pager filters and filters Selected array
                                          +		 */
                                          +	resourcefilterChanged(id: number) {
                                          +		this.resourcePager.filters[id] =  this.resourceFiltersSelected[id].map((elem: any) => elem.id).join(',');
                                          +		this.getResources();
                                          +	}
                                          +/**
                                          +	 * volunteer filter callback. Filters added to pager and then a request is made
                                          +	 * @param {number} id the index in the pager filters and filters Selected array
                                          +	 */
                                          +	volunteerfilterChanged(id: number) {
                                          +		this.volunteerPager.filters[id] = this.volunteerFiltersSelected[id].map((elem: any) => elem.id).join(',');
                                          +		this.getVolunteers();
                                          +	}
                                          +	// deleteRes(id: string) {
                                          +	// 	this.resourceService.deleteResource(id).subscribe(resp => {
                                          +	// 		this.getResources();
                                          +	// 	});
                                          +	// }
                                          +	/**
                                          +	 * delete NGO
                                          +	 */
                                          +	deleteSelf() {
                                          +		if (this.authService.user._id === this.data._id) {
                                          +			if (confirm('Sunteți sigur că doriți să vă ștergeți contul?')) {
                                          +				this.loading = true;
                                          +				this.organisationService.deleteorganisation(this.ngoid).subscribe(data => {
                                          +					this.loading = false;
                                          +					this.authService.setCredentials();
                                          +					this.router.navigateByUrl('/login');
                                          +				}, () => {
                                          +					this.location.back();
                                          +				});
                                          +			}
                                          +		} else {
                                          +			if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) {
                                          +				this.loading = true;
                                          +				this.organisationService.deleteorganisation(this.ngoid).subscribe(data => {
                                          +					this.loading = false;
                                          +					this.router.navigateByUrl('/organisations');
                                          +				}, () => {
                                          +					this.loading = false;
                                          +				});
                                          +			}
                                          +		}
                                          +	}
                                          +	/**
                                          +	 *  navigate to add resource with ngo data
                                          +	 */
                                          +	addresource() {
                                          +		this.router.navigateByUrl('/resources/add', this.navigationExtras);
                                          +	}
                                          +	/**
                                          +	 *  navigate to add volunteer with ngo data
                                          +	 */
                                          +	addvolunteer() {
                                          +		this.router.navigateByUrl('/volunteers/add', this.navigationExtras);
                                          +	}
                                          +	/**
                                          +	* sort callback for volunteers table
                                          +	*/
                                          +	volunteerSortChanged(pager: any) {
                                          +		this.volunteerPager = pager;
                                          +		this.getVolunteers();
                                          +	}
                                          +	/**
                                          +	* sort callback for resource table
                                          +	*/
                                          +	resourceSortChanged(pager: any) {
                                          +		this.resourcePager = pager;
                                          +			this.getResources();
                                          +	}
                                          +/**
                                          +	* search callback for both tabels
                                          +	*/
                                          +	searchChanged(pager: any) {
                                          +		if (pager.search !== '') {
                                          +			if (this.selectedTab === 'volunteers') {
                                          +				this.volunteerPager = pager;
                                          +				this.getVolunteers();
                                          +			} else {
                                          +				this.resourcePager = pager;
                                          +				this.getResources();
                                          +			}
                                          +		}
                                          +	}
                                          +	/**
                                          +	* send manual notification and trigger popup
                                          +	*/
                                          +	sendNotification() {
                                          +		this.organisationService.sendUpdateDataEmail(this.ngoid).subscribe(() => {
                                          +			this.messageSent = true;
                                          +			setTimeout(() => this.close(), 5000);
                                          +		});
                                          +	}
                                          +	/**
                                          +	* send info updated and trigger popup
                                          +	*/
                                          +	validateinfo() {
                                          +		this.organisationService.updated(this.ngoid).subscribe(() => {
                                          +			this.updateSent = true;
                                          +			this.needupdate = false;
                                          +			setTimeout(() => this.close(), 5000);
                                          +		});
                                          +	}
                                          +	/**
                                          +	* manual close for message send popup
                                          +	*/
                                          +	close() {
                                          +		this.messageSent = false;
                                          +		this.updateSent = false;
                                          +	}
                                          +	/**
                                          +	* expand volunteer specialization row for a specific volunteer
                                          +	* @param {string} volunteerId  of the current voluneer that is referenced
                                          +	* @param {boolean} status is open or is cloed
                                          +	*/
                                          +	openMenu(volunteerId: string, status: boolean) {
                                          +		if (status) {
                                          +			this.currentVolunteerId = volunteerId;
                                          +		} else {
                                          +			this.currentVolunteerId = null;
                                          +		}
                                          +	}
                                          +
                                          +	canEdit() {
                                          +		if (this.data) {
                                          +			return this.authService.is('DSU') || (this.authService.is('NGO') && this.data._id === this.authService.user.organisation._id);
                                          +		} else {
                                          +			return false;
                                          +		}
                                          +	}
                                          +}
                                          +
                                          +
                                          + +
                                          +
                                          <div class="container">
                                          +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                          +		<app-back-button *ngIf="authService.is('DSU')"></app-back-button>
                                          +		<div class="form-inline ml-auto">
                                          +			<app-table-search *ngIf="selectedTab === 'volunteers'; else resource" id=2 [pager]="volunteerPager" (searchChanged)="searchChanged($event)"></app-table-search>
                                          +			<ng-template #resource>
                                          +			<app-table-search [pager]="resourcePager" id=2 (searchChanged)="searchChanged($event)"></app-table-search>
                                          +			</ng-template>
                                          +			<button placement="bottom" ngbTooltip="Șterge organizația" *ngIf="authService.is('DSU') && !loading" (click)="deleteSelf()" class="btn btn-danger mx-2 my-sm-0">
                                          +				<span class="fa fa-trash-o"></span>
                                          +				<span class="d-none d-xl-inline">&nbsp;&nbsp;Șterge Organizația</span>
                                          +			</button>
                                          +			<div class="spinner-border text-danger" role="status" *ngIf="authService.is('DSU') && loading">
                                          +				<span class="sr-only">Loading...</span>
                                          +			</div>
                                          +			<button placement="bottom" ngbTooltip="Modifică organizația" *ngIf="canEdit() && !loading" [routerLink]="['/organisations/edit/',data?._id]" class="btn btn-info mx-2 my-sm-0">
                                          +				<span class="fa fa-edit"></span>
                                          +				<span class="d-none d-xl-inline"> &nbsp;&nbsp;Modifică Organizația</span>
                                          +			</button>
                                          +			<div *ngIf="hasResources && selectedTab === 'resources'">
                                          +				<button placement="bottom" ngbTooltip="Adaugă o resursă" (click)="addresource()" class="btn btn-info m-2 my-sm-0 d-block">
                                          +					<span class="fa fa-plus-circle"></span>
                                          +					<span class="d-none d-xl-inline">&nbsp;&nbsp;Adaugă Resursă</span>
                                          +				</button>
                                          +			</div>
                                          +			<div *ngIf="hasVolunteers && selectedTab === 'volunteers'">
                                          +				<button placement="bottom" ngbTooltip="Adaugă un voluntar" (click)="addvolunteer()" class="btn btn-info m-2 my-sm-0 d-block">
                                          +					<span class="fa fa-plus-circle"></span>
                                          +					<span class="d-none d-xl-inline">&nbsp;&nbsp;Adaugă Voluntar</span>
                                          +				</button>
                                          +			</div>
                                          +		</div>
                                          +	</nav>
                                          +	<ngb-alert *ngIf="messageSent" type="success" (close)="close()">Notificarea a fost trimisă</ngb-alert>
                                          +	<ngb-alert *ngIf="updateSent" type="success" (close)="close()">Vă mulțumim că v-ați actualizat înregistrările.</ngb-alert>
                                          +	<div class="ngo-details row">
                                          +		<h3 class="col-md-12">Profil organizație: {{data?.name}}</h3>
                                          +		<h5 class="col-md-12" style="margin-top:5px; font-weight: 500">Persoană de contact: {{data?.contact_person?.name}}
                                          +		</h5>
                                          +		<span class="col-md-12"><span class="fa fa-envelope"></span> {{data?.contact_person?.email}}</span>
                                          +		<span class="col-md-12"><span class="fa fa-phone"></span> {{data?.contact_person?.phone}}</span>
                                          +		<span class="col-md-12"><b>Status organizație:</b> {{data?.status || 'activ' }}</span>
                                          +		<span class="col-md-12"><b>Total voluntari:</b> {{nrvol}}</span>
                                          +		<span class="col-md-12"><b>Acoperire:</b> {{data?.cover || 'Națională' }}</span>
                                          +		<div class="col-md-12">
                                          +			<span><b>Data ultimului update: </b> {{ (data?.updated_at | date: 'dd.MM.yyyy') || 'Nu există' }}</span>
                                          +			<button *ngIf="authService.is('DSU')" class="btn mx-3 btn-info" (click)="sendNotification()"><span
                                          +					class="fa fa-plus-circle"></span>&nbsp;&nbsp;Trimite Notificare</button>
                                          +		</div>
                                          +	</div>
                                          +	<div class="resource-list">
                                          +		<ngb-tabset type="pills" #tabRef>
                                          +			<ngb-tab id="volunteers">
                                          +				<ng-template ngbTabTitle>
                                          +					<a (click)="selectedTab = 'volunteers'">Listă Voluntari</a>
                                          +				</ng-template>
                                          +				<ng-template ngbTabContent>
                                          +					<div *ngIf="hasVolunteers; else noVolunteers">
                                          +						<div class="row">
                                          +							<div class="filters col-md-9 col-sm-9 col-xs-9">
                                          +								<span class="padding-rem">Total: {{volunteerPager.total}}</span>
                                          +								<span class="padding-rem">&nbsp;&nbsp;</span>
                                          +								<span class="padding-rem">Filtrează după: &nbsp;</span>
                                          +								<ngx-multiselect
                                          +									class="location"
                                          +									[(ngModel)]="volunteerFiltersSelected[0]"
                                          +									showMaxLables = "1"
                                          +									[options]="locationFilterValues"
                                          +									(onItemClick)="volunteerfilterChanged(0)"
                                          +									(onSelectNone)="volunteerfilterChanged(0)"
                                          +									(onSelectAll)="volunteerfilterChanged(0)">
                                          +								</ngx-multiselect>
                                          +								<span class="vertical-bar">&nbsp;</span>
                                          +								<ngx-multiselect
                                          +									class="specialization"
                                          +									[(ngModel)]="volunteerFiltersSelected[1]"
                                          +									showMaxLables = "1"
                                          +									[options]="specializationFilterValues"
                                          +									(onItemClick)="volunteerfilterChanged(1)"
                                          +									(onSelectNone)="volunteerfilterChanged(1)"
                                          +									(onSelectAll)="volunteerfilterChanged(1)">
                                          +								</ngx-multiselect>
                                          +							</div>
                                          +							<div class="col-md-3 col-sm-3 col-xs-3">
                                          +								<button *ngIf = "authService.is('NGO') && needupdate" class="d-none d-md-inline pull-right btn btn-info" (click)="validateinfo()"><span
                                          +									class="fa fa-check-square"></span>&nbsp;&nbsp;Valideaza datele</button>	
                                          +								<button *ngIf = "authService.is('NGO') && needupdate" class="d-md-none pull-right btn btn-info" (click)="validateinfo()"><span
                                          +									class="fa fa-check-square"></span></button>		
                                          +							</div>
                                          +						</div>
                                          +						<div class="table-responsive-md">
                                          +							<table class="table customTable table-sm">
                                          +								<thead>
                                          +									<tr>
                                          +										<th scope="col" appTableSort [pager]="volunteerPager" [value]="1"
                                          +											(sortChanged)="volunteerSortChanged($event)">Nume</th>
                                          +										<th scope="col" appTableSort [pager]="volunteerPager" [value]="3"
                                          +											(sortChanged)="volunteerSortChanged($event)">Localizare</th>
                                          +										<th scope="col" class="non-clickable">Specializare</th>
                                          +										<th></th>
                                          +									</tr>
                                          +								</thead>
                                          +								<tbody>
                                          +									<tr *ngFor="let res of volunteersData">
                                          +										
                                          +										<td>{{res.name}}</td>
                                          +										<td>{{res.city.name}}, {{res.county.name}}</td>
                                          +										<td>
                                          +										<table class="no-borders">
                                          +											<tr *ngFor="let course of res.courses; let i = index; ">
                                          +												<td *ngIf="currentVolunteerId === res._id || i===0">
                                          +														{{ course?.course_name?.name }}
                                          +													</td>
                                          +												<td *ngIf="currentVolunteerId === res._id  || i===0">
                                          +													{{ course.obtained | date: 'dd.MM.yyyy' }}
                                          +												</td>
                                          +											</tr>
                                          +												<!-- <td *ngIf="currentVolunteerId !== res._id">
                                          +														{{ res.courses[0]?.course_name?.name}}
                                          +													</td>
                                          +												<td *ngIf="currentVolunteerId === res._id">
                                          +													<p *ngFor="let course of res.courses">
                                          +														{{ course.obtained | date: 'dd.MM.yyyy' }}
                                          +													</p>
                                          +												</td>
                                          +												
                                          +												<td *ngIf="currentVolunteerId !== res._id">
                                          +													{{ res.courses[0]?.obtained | date: 'dd.MM.yyyy'}}
                                          +												</td> -->
                                          +											
                                          +											</table>
                                          +										</td>
                                          +										<td>
                                          +											<div class="d-flex text-right">
                                          +												<button class="btn btn-info m-1 d-md-none"
                                          +													[routerLink]="['/volunteers/id',res._id]">
                                          +													<span class="fa fa-eye"></span></button>
                                          +												<button class="btn btn-info m-1  d-none d-md-block"
                                          +													[routerLink]="['/volunteers/id',res._id]">Vezi detalii</button>
                                          +												<i class="fa fa-chevron-down clickable m-auto" [ngClass]="{'show' : res.courses.length > 1, 'hide' : res.courses.length <= 1}" (click)="openMenu(res._id, true)" *ngIf="currentVolunteerId !== res._id"></i>
                                          +												<i class="fa fa-chevron-up clickable m-auto" [ngClass]="{'show' : res.courses.length > 1, 'hide' : res.courses.length <= 1}" (click)="openMenu(res._id, false)" *ngIf="currentVolunteerId === res._id && res.courses.length > 1"></i>
                                          +											</div>
                                          +										</td>
                                          +									</tr>
                                          +								</tbody>
                                          +							</table>
                                          +						</div>
                                          +						<div class = "row">
                                          +							<div class="col-md-9 col-sm-9 col-xs-9">
                                          +								<ngb-pagination
                                          +							[maxSize]="5" [(page)]="volunteerPager.page" [pageSize]="volunteerPager.size"
                                          +									(pageChange)="getVolunteers()" [collectionSize]="volunteerPager.total">
                                          +								</ngb-pagination>
                                          +							</div>
                                          +							<div class="col-md-3 col-sm-3 col-xs-3">
                                          +									<button *ngIf = "authService.is('NGO') && needupdate" class="d-none d-md-inline pull-right btn btn-info" (click)="validateinfo()"><span
                                          +										class="fa fa-check-square"></span>&nbsp;&nbsp;Valideaza datele</button>	
                                          +									<button *ngIf = "authService.is('NGO') && needupdate" class="d-md-none pull-right btn btn-info" (click)="validateinfo()"><span
                                          +										class="fa fa-check-square"></span></button>		
                                          +							</div>
                                          +								
                                          +						</div>
                                          +					</div>
                                          +					<ng-template #noVolunteers>
                                          +						<span>Această organizație nu are niciun voluntar adaugăt în sistem </span><button
                                          +							(click)="addvolunteer()" class="btn btn-info d-block"><span
                                          +								class="fa fa-plus-circle"></span>&nbsp;&nbsp;Adaugă Voluntar</button>
                                          +					</ng-template>
                                          +				</ng-template>
                                          +			</ngb-tab>
                                          +			<ngb-tab title="|" [disabled]="true"></ngb-tab>
                                          +			<ngb-tab id="resources">
                                          +				<ng-template ngbTabTitle>
                                          +					<a (click)="selectedTab ='resources'">Listă Resurse</a></ng-template>
                                          +					<ng-template ngbTabContent>
                                          +							<div *ngIf="hasResources; else noResources">
                                          +							<div class="row">
                                          +								<div class="filters col-md-9 col-xs-9 col-sm-9">
                                          +									<span class="padding-rem">Total: {{resourcePager.total}}</span>
                                          +									<span class="padding-rem">&nbsp;&nbsp;</span>
                                          +									<span class="padding-rem">Filtrează după: &nbsp;</span>
                                          +									<ngx-multiselect class="category"
                                          +									[(ngModel)]="resourceFiltersSelected[0]"
                                          +									[options]="categoryFilterValues"
                                          +									(showMaxLables) = "1"
                                          +									(onItemClick)="resourcefilterChanged(0)"
                                          +									(onSelectNone)="resourcefilterChanged(0)"
                                          +									(onSelectAll)="resourcefilterChanged(0)"
                                          +									[propertyMap]="propertyMap"	>
                                          +										<ng-template let-option="option">
                                          +											<span [ngClass]="{'pl-3': option.parent_id!=='0'}">
                                          +											{{option.name}} 
                                          +											</span>
                                          +										</ng-template>
                                          +									</ngx-multiselect>
                                          +									<span class="vertical-bar">&nbsp;</span>
                                          +									<ngx-multiselect
                                          +										class="location"
                                          +										[(ngModel)]="resourceFiltersSelected[1]"
                                          +										showMaxLables = "1"
                                          +										[options]="locationFilterValues"
                                          +										(onItemClick)="resourcefilterChanged(1)"
                                          +										(onSelectNone)="resourcefilterChanged(1)"
                                          +										(onSelectAll)="resourcefilterChanged(1)">
                                          +									</ngx-multiselect>
                                          +								</div>
                                          +								<div class="col-md-3 col-sm-3 col-xs-3">
                                          +									<button *ngIf = "authService.is('NGO') && needupdate" class="d-none d-md-inline pull-right btn btn-info" (click)="validateinfo()"><span
                                          +										class="fa fa-check-square"></span>&nbsp;&nbsp;Valideaza datele</button>	
                                          +									<button *ngIf = "authService.is('NGO') && needupdate" class="d-md-none pull-right btn btn-info" (click)="validateinfo()"><span
                                          +										class="fa fa-check-square"></span></button>		
                                          +								</div>	
                                          +							</div>
                                          +							
                                          +							<div class="table-responsive-md">
                                          +							<table class="table customTable table-sm">
                                          +								<thead>
                                          +									<tr>
                                          +										<!-- sortable="name" (sort)="onSort($event)" -->
                                          +										<th scope="col" appTableSort [pager]="resourcePager" [value]="1"
                                          +											(sortChanged)="resourceSortChanged($event)">Nume Resursă</th>
                                          +										<th scope="col" appTableSort [pager]="resourcePager" [value]="2"
                                          +											(sortChanged)="resourceSortChanged($event)">Categorie</th>
                                          +										<th scope="col" appTableSort [pager]="resourcePager" [value]="3"
                                          +											(sortChanged)="resourceSortChanged($event)">Cantitate</th>
                                          +										<th scope="col" appTableSort [pager]="resourcePager" [value]="4"
                                          +											(sortChanged)="resourceSortChanged($event)">Localizare</th>
                                          +									</tr>
                                          +								</thead>
                                          +								<tbody>
                                          +									<tr *ngFor="let res of resourceData">
                                          +										<td>{{res.name}}</td>
                                          +										<td><div *ngFor="let elem of res?.categories">
                                          +											{{elem.name}}
                                          +										</div></td>
                                          +										<td>{{res.quantity}}</td>
                                          +										<td>{{res.city.name}}, {{res.county.name}}</td>
                                          +										<td class="text-right">
                                          +											<!-- <button class="btn btn-info m-1 d-none d-md-block"
                                          +												[routerLink]="['/resources/edit/', res._id]">
                                          +												<span class="fa fa-edit"></span>&nbsp;Editează</button>
                                          +											<button class="d-md-none pull-right btn btn-info"
                                          +												[routerLink]="['/resources/edit/', res._id]">
                                          +												<span class="fa fa-edit"></span></button>		 -->
                                          +											<button class="btn btn-danger m-1 d-none d-md-block" (click)="deleteRes(res._id)">
                                          +												<span class="fa fa-trash-o"></span>&nbsp;Șterge</button>
                                          +											<button class="d-md-none pull-right btn btn-danger" (click)="deleteRes(res._id)"><span
                                          +												class="fa fa-trash-o"></span></button>
                                          +											<button *ngIf="authService.is('DSU')" class="btn btn-info m-1 d-md-none"
                                          +												[routerLink]="['/resources/name',res.slug]">
                                          +												<span class="fa fa-eye"></span></button>
                                          +											<button *ngIf="authService.is('DSU')" class="btn btn-info m-1 d-none d-md-block"
                                          +												[routerLink]="['/resources/name',res.slug]">Edit</button>
                                          +										</td>
                                          +									</tr>
                                          +								</tbody>
                                          +							</table>
                                          +							<div class="row">
                                          +								<div class="col-md-9 col-xs-9 col-sm-9">
                                          +									<ngb-pagination [maxSize]="5" [(page)]="resourcePager.page" [pageSize]="resourcePager.size"
                                          +												(pageChange)="getResources()" [collectionSize]="resourcePager.total">
                                          +									</ngb-pagination>
                                          +								</div>
                                          +								<div class="col-md-3 col-sm-3 col-xs-3">
                                          +									<button *ngIf = "authService.is('NGO') && needupdate" class="d-none d-md-inline pull-right btn btn-info" (click)="validateinfo()"><span
                                          +										class="fa fa-check-square"></span>&nbsp;&nbsp;Valideaza datele</button>	
                                          +									<button *ngIf = "authService.is('NGO') && needupdate" class="d-md-none pull-right btn btn-info" (click)="validateinfo()"><span
                                          +										class="fa fa-check-square"></span></button>		
                                          +								</div>
                                          +							</div>
                                          +							
                                          +						</div>
                                          +					</div>
                                          +					<ng-template #noResources>
                                          +						<span>Această organizație nu are nici o resursă adaugată în sistem</span>
                                          +						<button class="btn btn-info d-block" (click)="addresource()">
                                          +							<span class="fa fa-plus-circle"></span>
                                          +							&nbsp;&nbsp;Adaugă Resursă
                                          +						</button>
                                          +					</ng-template>
                                          +				</ng-template>
                                          +			</ngb-tab>
                                          +		</ngb-tabset>
                                          +	</div>
                                          +</div>
                                          +
                                          + +
                                          +

                                          + ./organisation-details.component.scss +

                                          +
                                          ::ng-deep .category{
                                          +    .none-selected:before {
                                          +        content: 'Categorie' !important;
                                          +    }
                                          +}
                                          +::ng-deep .specialization{
                                          +    .none-selected:before{
                                          +        content:'Specializări' !important;
                                          +    }
                                          +}
                                          +
                                          +.hide {
                                          +    visibility: hidden;
                                          +}
                                          +
                                          +.show {
                                          +    visibility: unset;
                                          +}
                                          +button{
                                          +    word-break: break-word;
                                          +}
                                          +td{
                                          +    p{
                                          +        word-break: break-word;
                                          +    }
                                          +}
                                          +.no-borders{
                                          +    td{
                                          +        border:none;
                                          +        padding: 5px;
                                          +        word-break: normal;
                                          +    }
                                          +}
                                          +.non-clickable{
                                          +    cursor: default !important;
                                          +}
                                          +
                                          + +
                                          +
                                          +
                                          +
                                          + Legend +
                                          +
                                          +
                                          Html element +
                                          +
                                          +
                                          Component +
                                          +
                                          +
                                          Html element with directive +
                                          +
                                          +
                                          + + +
                                          + + + + + + + + + + + + + + + + + + + + + +
                                          +
                                          +

                                          result-matching ""

                                          +
                                            +
                                            +
                                            +

                                            No results matching ""

                                            +
                                            +
                                            +
                                            + +
                                            +
                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/NotFoundComponent.html b/documentation/components/NotFoundComponent.html new file mode 100644 index 0000000..d458c8a --- /dev/null +++ b/documentation/components/NotFoundComponent.html @@ -0,0 +1,367 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                            +
                                            + + +
                                            +
                                            + + + + + + + + +
                                            +

                                            +

                                            File

                                            +

                                            +

                                            + src/app/pages/404/not-found.component.ts +

                                            + + + +

                                            +

                                            Implements

                                            +

                                            +

                                            + AfterViewInit +

                                            + + +
                                            +

                                            Metadata

                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                            selectorapp-not-found
                                            styleUrlsnot-found.component.scss
                                            templateUrl./not-found.component.html
                                            +
                                            + +
                                            +

                                            Index

                                            + + + + + + + + + + + + + + + +
                                            +
                                            Methods
                                            +
                                            + +
                                            +
                                            + + + + + + +
                                            + +

                                            + Methods +

                                            + + + + + + + + + + + + + + + + + + + +
                                            + + + + ngAfterViewInit + + + +
                                            +ngAfterViewInit() +
                                            + +
                                            +

                                            Component to show when a page is not found. Only displays 404 message

                                            +
                                            + +
                                            + Returns : void + +
                                            +
                                            +
                                            + +
                                            + + +
                                            +
                                            import { Component, AfterViewInit } from '@angular/core';
                                            +
                                            +@Component({
                                            +	selector: 'app-not-found',
                                            +	templateUrl: './not-found.component.html',
                                            +	styleUrls: ['not-found.component.scss']
                                            +})
                                            +
                                            +export class NotFoundComponent implements AfterViewInit {
                                            +	/**
                                            +	* Component to show when a page is not found. Only displays 404 message
                                            +	*/
                                            +
                                            +	ngAfterViewInit() {
                                            +
                                            +	}
                                            +}
                                            +
                                            +
                                            + +
                                            +
                                            <div class="error-box">
                                            +    <div class="error-body text-center">
                                            +        <h1>404</h1>
                                            +        <h3 class="text-uppercase">Pagină inexistentă!</h3>
                                            +        <p class="text-muted m-t-30 m-b-30">Pari pierdut ... căutați drumul către pagina de start?</p>
                                            +        <a class="btn btn-info btn-rounded waves-effect waves-light m-b-40" routerLink="/" >Înapoi la pagina principală</a> </div>
                                            +</div>
                                            +
                                            + +
                                            +

                                            + not-found.component.scss +

                                            +
                                            .error-box {
                                            +  height: 100%;
                                            +  position: fixed;
                                            +  // background: url(../../../assets/images/background/error-bg.jpg) no-repeat center center #fff;
                                            +  width: 100%; }
                                            +  .error-box .footer {
                                            +    width: 100%;
                                            +    left: 0px;
                                            +    right: 0px; }
                                            +
                                            +.error-body {
                                            +  padding-top: 5%; }
                                            +  .error-body h1 {
                                            +    font-size: 210px;
                                            +    font-weight: 900;
                                            +    text-shadow: 4px 4px 0 #ffffff, 6px 6px 0 #263238;
                                            +    line-height: 210px; }
                                            +
                                            +@media(max-width:767px) {
                                            +  .error-box {
                                            +        position: relative;
                                            +        padding-bottom: 60px;
                                            +    }
                                            +    .error-body {
                                            +        padding-top: 10%;
                                            +    }
                                            +    .error-body h1 {
                                            +            font-size: 100px;
                                            +            font-weight: 600;
                                            +            line-height: 100px;
                                            +        }
                                            +}
                                            +
                                            + +
                                            +
                                            +
                                            +
                                            + Legend +
                                            +
                                            +
                                            Html element +
                                            +
                                            +
                                            Component +
                                            +
                                            +
                                            Html element with directive +
                                            +
                                            +
                                            + + +
                                            + + + + + + + + + + + + + + + + + + + + + +
                                            +
                                            +

                                            result-matching ""

                                            +
                                              +
                                              +
                                              +

                                              No results matching ""

                                              +
                                              +
                                              +
                                              + +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/OrganisationEditComponent.html b/documentation/components/OrganisationEditComponent.html new file mode 100644 index 0000000..7778e47 --- /dev/null +++ b/documentation/components/OrganisationEditComponent.html @@ -0,0 +1,1684 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                              +
                                              + + +
                                              +
                                              + + + + + + + + +
                                              +

                                              +

                                              File

                                              +

                                              +

                                              + src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.ts +

                                              + + + +

                                              +

                                              Implements

                                              +

                                              +

                                              + OnInit +

                                              + + +
                                              +

                                              Metadata

                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              selectorapp-organisation-edit
                                              styleUrls./organisation-edit.component.scss
                                              templateUrl./organisation-edit.component.html
                                              +
                                              + +
                                              +

                                              Index

                                              + + + + + + + + + + + + + + + + + + + + + +
                                              +
                                              Properties
                                              +
                                              + +
                                              +
                                              Methods
                                              +
                                              + +
                                              +
                                              + +
                                              +

                                              Constructor

                                              + + + + + + + + + + + + + +
                                              +constructor(route: ActivatedRoute, organisationService: OrganisationService, utilService: UtilService, userService: UsersService, location: Location, citiesandCounties: CitiesCountiesService, fb: FormBuilder) +
                                              + +
                                              +
                                              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              NameTypeOptional
                                              route + ActivatedRoute + + No +
                                              organisationService + OrganisationService + + No +
                                              utilService + UtilService + + No +
                                              userService + UsersService + + No +
                                              location + Location + + No +
                                              citiesandCounties + CitiesCountiesService + + No +
                                              fb + FormBuilder + + No +
                                              +
                                              +
                                              +
                                              + + + + + +
                                              + +

                                              + Methods +

                                              + + + + + + + + + + + + + + + + + + + +
                                              + + + + countykey + + + +
                                              +countykey(event: any) +
                                              + +
                                              +

                                              trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection

                                              +
                                              + +
                                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                              NameTypeOptionalDescription
                                              event + any + + No + +

                                              to be verified for which key has been pressed

                                              + +
                                              +
                                              +
                                              +
                                              +
                                              + Returns : void + +
                                              +
                                              + +
                                              +
                                              + + + + + + + + + + + + + + + + + + + +
                                              + + + + getOrganisationDetails + + + +
                                              +getOrganisationDetails(ngoId: string) +
                                              + +
                                              +

                                              get the details of the organisation when edititing

                                              +
                                              + +
                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                              NameTypeOptional
                                              ngoId + string + + No +
                                              +
                                              +
                                              +
                                              +
                                              + Returns : void + +
                                              +
                                              + +
                                              +
                                              + + + + + + + + + + + + + + + + + + + +
                                              + + + + ngOnInit + + + +
                                              +ngOnInit() +
                                              + +
                                              + +
                                              + Returns : void + +
                                              +
                                              + + + + + + + + + + + + + + + + + + + +
                                              + + + + onSubmit + + + +
                                              +onSubmit() +
                                              + +
                                              +

                                              Process form values and send data to server. If success close page

                                              +
                                              + +
                                              + Returns : void + +
                                              +
                                              + + + + + + + + + + + + + + + + + + + +
                                              + + + + selectedCity + + + +
                                              +selectedCity(val: literal type) +
                                              + +
                                              +

                                              trigger for select city from city typeahead

                                              +
                                              + +
                                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                              NameTypeOptionalDescription
                                              val + literal type + + No + +

                                              result object from typeahead that needs to be stored

                                              + +
                                              +
                                              +
                                              +
                                              +
                                              + Returns : void + +
                                              +
                                              + +
                                              +
                                              + + + + + + + + + + + + + + + + + + + +
                                              + + + + selectedCounty + + + +
                                              +selectedCounty(val: any) +
                                              + +
                                              +

                                              trigger for select county from county typeahead. will unlock the city field

                                              +
                                              + +
                                              + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                              NameTypeOptionalDescription
                                              val + any + + No + +

                                              result object from typeahead that needs to be stored

                                              + +
                                              +
                                              +
                                              +
                                              +
                                              + Returns : void + +
                                              +
                                              + +
                                              +
                                              +
                                              +
                                              + +

                                              + Properties +

                                              + + + + + + + + + + + + + + + + + + + + +
                                              + + + + cities + + +
                                              + Type : any[] + +
                                              + Default value : [] +
                                              + +
                                              +

                                              list of cities to pe parsed. edited when the user selects a county or edits this NGO

                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + +
                                              + + + + cityPlaceholder + + +
                                              + Type : string + +
                                              + Default value : 'Selectați mai întâi județul' +
                                              + +
                                              +

                                              placeholder for disabled city field

                                              +
                                              +
                                              + + + + + + + + + + + + + + +
                                              + + + + click1$ + + +
                                              + Default value : new Subject<string>() +
                                              + +
                                              + + + + + + + + + + + + + + +
                                              + + + + click2$ + + +
                                              + Default value : new Subject<string>() +
                                              + +
                                              + + + + + + + + + + + + + + +
                                              + + + + focus1$ + + +
                                              + Default value : new Subject<string>() +
                                              + +
                                              + + + + + + + + + + + + + + +
                                              + + + + focus2$ + + +
                                              + Default value : new Subject<string>() +
                                              + +
                                              + + + + + + + + + + + + + + + + + +
                                              + + + + form + + +
                                              + Type : FormGroup + +
                                              + +
                                              +

                                              form that holds data

                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + +
                                              + + + + formatter + + +
                                              + Default value : () => {...} +
                                              + +
                                              +

                                              formatter to extract name from object and display in input

                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + +
                                              + + + + instance1 + + +
                                              + Type : NgbTypeahead + +
                                              + Decorators : +
                                              + + @ViewChild('instance', {static: true})
                                              +
                                              +
                                              + +
                                              +

                                              references to NGBTypeahead for opening on focus or click

                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + +
                                              + + + + instance2 + + +
                                              + Type : NgbTypeahead + +
                                              + Decorators : +
                                              + + @ViewChild('instance', {static: true})
                                              +
                                              +
                                              + +
                                              + + + + + + + + + + + + + + + + + +
                                              + + + + loading + + +
                                              + Default value : false +
                                              + +
                                              +

                                              flag for HTML to display loading animation

                                              +
                                              +
                                              + + + + + + + + + + + + + + +
                                              + + + + loadingCities + + +
                                              + Default value : false +
                                              + +
                                              + + + + + + + + + + + + + + + + + + + + +
                                              + + + + searchcity + + +
                                              + Default value : () => {...} +
                                              + +
                                              +

                                              trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities

                                              +
                                              +
                                              +
                                              + Parameters : + + + + + + + + + + + + + +
                                              NameDescription
                                              text +

                                              observable event with the filter text

                                              +
                                              +
                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + +
                                              + + + + searchcounty + + +
                                              + Default value : () => {...} +
                                              + +
                                              +

                                              trigger for county typeahead. registers typing, focus, and click and searches the backend

                                              +
                                              +
                                              +
                                              + Parameters : + + + + + + + + + + + + + +
                                              NameDescription
                                              text +

                                              observable event with the filter text

                                              +
                                              +
                                              +
                                              +
                                              +
                                              + +
                                              + + +
                                              +
                                              import { Component, OnInit, ViewChild } from '@angular/core';
                                              +import {
                                              +	FormGroup,
                                              +	Validators,
                                              +	FormBuilder
                                              +} from '@angular/forms';
                                              +import { OrganisationService } from '../../../organisations.service';
                                              +import { Router, ActivatedRoute } from '@angular/router';
                                              +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
                                              +import { Subject } from 'rxjs/internal/Subject';
                                              +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
                                              +import { Observable } from 'rxjs/internal/Observable';
                                              +import {
                                              +	debounceTime,
                                              +	distinctUntilChanged,
                                              +	filter,
                                              +	map,
                                              +	switchMap
                                              +} from 'rxjs/operators';
                                              +import { merge } from 'rxjs';
                                              +import { EmailValidation } from '@app/core/validators/email-validation';
                                              +import { PhoneValidation } from '@app/core/validators/phone-validation';
                                              +import { WebsiteValidation } from '@app/core/validators/website-validation';
                                              +import { Location } from '@angular/common';
                                              +import { LocationValidation } from '@app/core/validators/location-validation';
                                              +import { UtilService, UsersService } from '@app/core';
                                              +
                                              +@Component({
                                              +	selector: 'app-organisation-edit',
                                              +	templateUrl: './organisation-edit.component.html',
                                              +	styleUrls: ['./organisation-edit.component.scss']
                                              +})
                                              +
                                              +export class OrganisationEditComponent implements OnInit {
                                              +	/**
                                              +	* form that holds data
                                              +	*/
                                              +	form: FormGroup;
                                              +
                                              +	/**
                                              +	* placeholder for disabled city field
                                              +	*/
                                              +	cityPlaceholder = 'Selectați mai întâi județul';
                                              +
                                              +	/**
                                              +	* references to NGBTypeahead for opening on focus or click
                                              +	*/
                                              +	@ViewChild('instance', { static: true }) instance1: NgbTypeahead;
                                              +	focus1$ = new Subject<string>();
                                              +	click1$ = new Subject<string>();
                                              +
                                              +	@ViewChild('instance', { static: true }) instance2: NgbTypeahead;
                                              +	focus2$ = new Subject<string>();
                                              +	click2$ = new Subject<string>();
                                              +	/**
                                              +	 * flag for HTML to display loading animation
                                              +	 */
                                              +	loading = false;
                                              +	loadingCities = false;
                                              +	/**
                                              +	* list of cities to pe parsed. edited when the user selects a county or edits this NGO
                                              +	*/
                                              +	cities: any[] = [];
                                              +
                                              +	constructor(
                                              +		private route: ActivatedRoute,
                                              +		private organisationService: OrganisationService,
                                              +		private utilService: UtilService,
                                              +		private userService: UsersService,
                                              +		private location: Location,
                                              +		private citiesandCounties: CitiesCountiesService,
                                              +		private fb: FormBuilder) { }
                                              +
                                              +	ngOnInit() {
                                              +	/**
                                              +	 * build form because otherwise the frontend will crash before the  {@link getOrganisationDetails} ends
                                              +	 */
                                              +		this.form = this.fb.group({
                                              +			name: ['', [Validators.required]],
                                              +			website: ['', [Validators.required, WebsiteValidation.websiteValidation]],
                                              +			contact_person: ['', Validators.required],
                                              +			phone: ['', [Validators.required, PhoneValidation.phoneValidation]],
                                              +			address: [''],
                                              +			cover: [''],
                                              +			email: ['', [Validators.required, EmailValidation.emailValidation]],
                                              +			county: ['', [Validators.required, LocationValidation.locationValidation]],
                                              +			city: [{value: '', disabled: true }, [Validators.required, ]],
                                              +			comments: ['']
                                              +		});
                                              +		this.getOrganisationDetails(this.route.snapshot.paramMap.get('id'));
                                              +	}
                                              +	/**
                                              +	 * formatter to extract name from object and display in input
                                              +	 */
                                              +	formatter = (result: { name: string }) => result.name;
                                              +	/**
                                              +	 * get the details of the organisation when edititing
                                              +	 * @param {string} id of the edited NGO
                                              +	 */
                                              +	getOrganisationDetails(ngoId: string) {
                                              +		if (ngoId) {
                                              +			this.organisationService.getorganisation(ngoId).subscribe(data => {
                                              +				this.form = this.fb.group({
                                              +					name: [data.name ],
                                              +					cover: [data.cover],
                                              +					website: [data.website, [Validators.required, WebsiteValidation.websiteValidation]],
                                              +					contact_person: [data.contact_person.name, Validators.required],
                                              +					phone: [data.contact_person.phone, [Validators.required, PhoneValidation.phoneValidation]],
                                              +					address: [data.address],
                                              +					email: [data.contact_person.email, [Validators.required, EmailValidation.emailValidation]],
                                              +					county: ['', [Validators.required, LocationValidation.locationValidation]],
                                              +					city: ['', [Validators.required]],
                                              +					comments: [data.comments]
                                              +				});
                                              +				this.selectedCounty({item: data.county});
                                              +				this.selectedCity({item: data.city});
                                              +			});
                                              +		}
                                              +	}
                                              +	/**
                                              +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                                              +	 * @param {Observable} text observable event with the filter text
                                              +	 */
                                              +	searchcounty = (text$: Observable<string>) => {
                                              +		const debouncedText$ = text$.pipe(
                                              +			debounceTime(200),
                                              +			distinctUntilChanged()
                                              +		);
                                              +		const clicksWithClosedPopup$ = this.click1$.pipe(
                                              +			filter(() => !this.instance1.isPopupOpen())
                                              +		);
                                              +		const inputFocus$ = this.focus1$;
                                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                                              +			switchMap((term: string) => this.citiesandCounties.getCounties(term))
                                              +		);
                                              +	}
                                              +	/**
                                              +	 * trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities
                                              +	 * @param {Observable} text observable event with the filter text
                                              +	 */
                                              +	searchcity = (text$: Observable<string>) => {
                                              +		const debouncedText$ = text$.pipe(
                                              +			debounceTime(200),
                                              +			distinctUntilChanged()
                                              +		);
                                              +		const clicksWithClosedPopup$ = this.click2$.pipe(
                                              +			filter(() => !this.instance2.isPopupOpen())
                                              +		);
                                              +		const inputFocus$ = this.focus2$;
                                              +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                                              +			map((term: string) => {
                                              +				if (term === '') {
                                              +					return this.cities;
                                              +				} else {
                                              +					return this.cities.filter(v => {
                                              +						const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase();
                                              +						return aux.indexOf(term.toLowerCase()) > -1;
                                              +					}).slice(0, 20);
                                              +				}
                                              +			}));
                                              +	}
                                              +	/**
                                              +	 * trigger for select county from county typeahead. will unlock the city field
                                              +	 * @param {any} val result object from typeahead that needs to be stored
                                              +	 */
                                              +	selectedCounty(val: any) {
                                              +		this.form.controls.county.markAsTouched();
                                              +		if (val.item && val.item._id) {
                                              +			this.form.patchValue({county: val.item});
                                              +			this.loadingCities = true;
                                              +			this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => {
                                              +				this.cities = res;
                                              +				this.cityPlaceholder = 'Alegeți Orașul';
                                              +				this.loadingCities = false;
                                              +				this.form.controls.city.enable();
                                              +			});
                                              +		} else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) {
                                              +			this.form.patchValue({county: '', city: ''});
                                              +		}
                                              +	}
                                              +
                                              +	/**
                                              +	 * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection
                                              +	 * @param {any} event to be verified for which key has been pressed
                                              +	*/
                                              +	countykey(event: any) {
                                              +		this.form.controls.county.markAsTouched();
                                              +		if (event.code !== 'Enter') {
                                              +			this.cities = [];
                                              +			this.form.controls.city.disable();
                                              +			this.form.controls.city.reset('');
                                              +			this.cityPlaceholder = 'Selectați mai întâi județul';
                                              +		}
                                              +	}
                                              +	/**
                                              +	 * trigger for select city from city typeahead
                                              +	 * @param {any} val result object from typeahead that needs to be stored
                                              +	 */
                                              +	selectedCity(val: { item: any }) {
                                              +		this.form.controls.city.markAsTouched();
                                              +		this.form.patchValue({city: val.item});
                                              +	}
                                              +
                                              +	/**
                                              +	 * Process form values and send data to server. If success close page
                                              +	 */
                                              +	onSubmit() {
                                              +		const ngoid = this.route.snapshot.paramMap.get('id');
                                              +		this.loading = true;
                                              +		const ngo = this.form.value;
                                              +		ngo.city = ngo.city._id;
                                              +		ngo.county = ngo.county._id;
                                              +
                                              +			this.organisationService.editOrganisation(ngoid, this.form.value).subscribe(() => {
                                              +				this.loading = false;
                                              +				this.location.back();
                                              +			}, () => {
                                              +				this.loading = false;
                                              +			});
                                              +	}
                                              +}
                                              +
                                              +
                                              + +
                                              +
                                              <div class="container wide-container mt-5">
                                              +	<nav
                                              +		class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                              +		<app-back-button></app-back-button>
                                              +	</nav>
                                              +	<p class="page-title">Modifică organizația:</p>
                                              +
                                              +	<form [formGroup]="form" (ngSubmit)="onSubmit()">
                                              +		<div class="row">
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Nume Organizație *</label>
                                              +					<input formControlName="name" class="form-control" type="text"
                                              +						[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }" />
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Website Organizație *</label>
                                              +					<input formControlName="website" class="form-control" type="text"
                                              +						[ngClass]="{ 'error': form.controls.website.invalid && form.controls.website.touched }" />
                                              +					<span class="error-message" *ngIf="form.controls.website.invalid && form.controls.website.touched">* {{form.controls.website.errors.website}}</span>
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Acoperire *</label>
                                              +					<select class="form-control" formControlName="cover"
                                              +					[ngClass]="{ 'error': form.controls.cover.invalid && form.controls.cover.touched }"
                                              +					class="form-control">
                                              +						<option>Națională</option>
                                              +						<option>Locală</option>
                                              +					</select>
                                              +					<span class="error-message" *ngIf="form.controls.cover.invalid && form.controls.cover.touched">* Trebuie să alegeți un tip.</span>
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Persoană de contact *</label>
                                              +					<input formControlName="contact_person" class="form-control" type="text"
                                              +						[ngClass]="{ 'error': form.controls.contact_person.invalid && form.controls.contact_person.touched }" />
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Email *</label>
                                              +					<input formControlName="email" class="form-control" type="email"
                                              +						[ngClass]="{ 'error': form.controls.email.invalid && form.controls.email.touched }" />
                                              +					<span class="error-message" *ngIf="form.controls.email.invalid && form.controls.email.touched">* {{form.controls.email.errors.email}}</span>
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Număr de Telefon *</label>
                                              +					<input formControlName="phone" class="form-control" type="tel"
                                              +						[ngClass]="{ 'error': form.controls.phone.invalid && form.controls.phone.touched }" />
                                              +					<span class="error-message" *ngIf="form.controls.phone.invalid && form.controls.phone.touched">* {{form.controls.phone.errors.phone}}</span>
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Județ *</label>
                                              +					<input type="text" formControlName="county" (selectItem)="selectedCounty($event)" (blur)="selectedCounty($event.target.value)"
                                              +						class="form-control" [ngbTypeahead]="searchcounty" (focus)="focus1$.next($event.target.value)"
                                              +						(keyup)="countykey($event)"
                                              +						[inputFormatter]="formatter" [resultFormatter]="formatter"
                                              +						[ngClass]="{ 'error': form.controls.county.invalid && form.controls.county.touched}"
                                              +						(click)="click1$.next($event.target.value)" #instance="ngbTypeahead" />
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Localitate *</label>
                                              +					<input type="text" formControlName="city" class="form-control"
                                              +						[ngbTypeahead]="searchcity" (selectItem)="selectedCity($event)"
                                              +						[ngClass]="{ 'error': form.controls.city.invalid && form.controls.city.touched }"
                                              +						placeholder="{{ cityPlaceholder }}" autocomplete="new-password" [inputFormatter]="formatter"
                                              +						[resultFormatter]="formatter" (focus)="focus2$.next($event.target.value)"
                                              +						(click)="click2$.next($event.target.value)" #instance="ngbTypeahead" />
                                              +					<div class="spinner-border text-grey input-loader" role="status" *ngIf="loadingCities">
                                              +						<span class="sr-only">Loading...</span>
                                              +					</div>
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-4 col-sm-12">
                                              +				<div class="form-group">
                                              +					<label>Adresă</label>
                                              +					<input formControlName="address" class="form-control" type="text"
                                              +						[ngClass]="{ 'error': form.controls.address.invalid && form.controls.address.touched}" />
                                              +				</div>
                                              +			</div>
                                              +
                                              +			<div class="mt-4 col-md-12">
                                              +				<div class="form-group">
                                              +					<label>Comentarii</label>
                                              +					<textarea rows="3" formControlName="comments" class="form-control" type="text"
                                              +						[ngClass]="{ 'error': form.controls.comments.invalid && form.controls.comments.touched}"></textarea>
                                              +				</div>
                                              +			</div>
                                              +		</div>
                                              +
                                              +		<div class="text-right">
                                              +			<button *ngIf="!loading" class="btn btn-info btn-rounded waves-effect waves-light mt-5" [disabled]="form.invalid"
                                              +				type="submit">
                                              +				Salvează
                                              +			</button>
                                              +			<div class="spinner-border text-green" role="status" *ngIf="loading">
                                              +				<span class="sr-only">Loading...</span>
                                              +			</div>
                                              +		</div>
                                              +	</form>
                                              +</div>
                                              +
                                              + +
                                              +

                                              + ./organisation-edit.component.scss +

                                              +
                                              .form-group{
                                              +    margin:0;
                                              +}
                                              +
                                              + +
                                              +
                                              +
                                              +
                                              + Legend +
                                              +
                                              +
                                              Html element +
                                              +
                                              +
                                              Component +
                                              +
                                              +
                                              Html element with directive +
                                              +
                                              +
                                              + + +
                                              + + + + + + + + + + + + + + + + + + + + + +
                                              +
                                              +

                                              result-matching ""

                                              +
                                                +
                                                +
                                                +

                                                No results matching ""

                                                +
                                                +
                                                +
                                                + +
                                                +
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/OrganisationaddComponent.html b/documentation/components/OrganisationaddComponent.html new file mode 100644 index 0000000..5aa4edf --- /dev/null +++ b/documentation/components/OrganisationaddComponent.html @@ -0,0 +1,1594 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                +
                                                + + +
                                                +
                                                + + + + + + + + +
                                                +

                                                +

                                                File

                                                +

                                                +

                                                + src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.ts +

                                                + + + +

                                                +

                                                Implements

                                                +

                                                +

                                                + OnInit +

                                                + + +
                                                +

                                                Metadata

                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                selectorapp-organisation-add
                                                styleUrls./organisation-add.component.scss
                                                templateUrl./organisation-add.component.html
                                                +
                                                + +
                                                +

                                                Index

                                                + + + + + + + + + + + + + + + + + + + + + +
                                                +
                                                Properties
                                                +
                                                + +
                                                +
                                                Methods
                                                +
                                                + +
                                                +
                                                + +
                                                +

                                                Constructor

                                                + + + + + + + + + + + + + +
                                                +constructor(route: ActivatedRoute, organisationService: OrganisationService, utilService: UtilService, location: Location, citiesandCounties: CitiesCountiesService, fb: FormBuilder) +
                                                + +
                                                +
                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                NameTypeOptional
                                                route + ActivatedRoute + + No +
                                                organisationService + OrganisationService + + No +
                                                utilService + UtilService + + No +
                                                location + Location + + No +
                                                citiesandCounties + CitiesCountiesService + + No +
                                                fb + FormBuilder + + No +
                                                +
                                                +
                                                +
                                                + + + + + +
                                                + +

                                                + Methods +

                                                + + + + + + + + + + + + + + + + + + + +
                                                + + + + countykey + + + +
                                                +countykey(event: any) +
                                                + +
                                                +

                                                trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection

                                                +
                                                + +
                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                NameTypeOptionalDescription
                                                event + any + + No + +

                                                to be verified for which key has been pressed

                                                + +
                                                +
                                                +
                                                +
                                                +
                                                + Returns : void + +
                                                +
                                                + +
                                                +
                                                + + + + + + + + + + + + + + + + + + + +
                                                + + + + ngOnInit + + + +
                                                +ngOnInit() +
                                                + +
                                                + +
                                                + Returns : void + +
                                                +
                                                + + + + + + + + + + + + + + + + + + + +
                                                + + + + onSubmit + + + +
                                                +onSubmit() +
                                                + +
                                                +

                                                Process form values and send data to server. If success close page

                                                +
                                                + +
                                                + Returns : void + +
                                                +
                                                + + + + + + + + + + + + + + + + + + + +
                                                + + + + selectedCity + + + +
                                                +selectedCity(val: literal type) +
                                                + +
                                                +

                                                trigger for select city from city typeahead

                                                +
                                                + +
                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                NameTypeOptionalDescription
                                                val + literal type + + No + +

                                                result object from typeahead that needs to be stored

                                                + +
                                                +
                                                +
                                                +
                                                +
                                                + Returns : void + +
                                                +
                                                + +
                                                +
                                                + + + + + + + + + + + + + + + + + + + +
                                                + + + + selectedCounty + + + +
                                                +selectedCounty(val: any) +
                                                + +
                                                +

                                                trigger for select county from county typeahead. will unlock the city field

                                                +
                                                + +
                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                NameTypeOptionalDescription
                                                val + any + + No + +

                                                result object from typeahead that needs to be stored

                                                + +
                                                +
                                                +
                                                +
                                                +
                                                + Returns : void + +
                                                +
                                                + +
                                                +
                                                +
                                                +
                                                + +

                                                + Properties +

                                                + + + + + + + + + + + + + + + + + + + + +
                                                + + + + cities + + +
                                                + Type : any[] + +
                                                + Default value : [] +
                                                + +
                                                +

                                                list of cities to pe parsed. edited when the user selects a county or edits this NGO

                                                +
                                                +
                                                + + + + + + + + + + + + + + + + + + + + +
                                                + + + + cityPlaceholder + + +
                                                + Type : string + +
                                                + Default value : 'Selectați mai întâi județul' +
                                                + +
                                                +

                                                placeholder for disabled city field

                                                +
                                                +
                                                + + + + + + + + + + + + + + +
                                                + + + + click1$ + + +
                                                + Default value : new Subject<string>() +
                                                + +
                                                + + + + + + + + + + + + + + +
                                                + + + + click2$ + + +
                                                + Default value : new Subject<string>() +
                                                + +
                                                + + + + + + + + + + + + + + +
                                                + + + + focus1$ + + +
                                                + Default value : new Subject<string>() +
                                                + +
                                                + + + + + + + + + + + + + + +
                                                + + + + focus2$ + + +
                                                + Default value : new Subject<string>() +
                                                + +
                                                + + + + + + + + + + + + + + + + + +
                                                + + + + form + + +
                                                + Type : FormGroup + +
                                                + +
                                                +

                                                form that holds data

                                                +
                                                +
                                                + + + + + + + + + + + + + + +
                                                + + + + formatter + + +
                                                + Default value : () => {...} +
                                                + +
                                                + + + + + + + + + + + + + + + + + + + + +
                                                + + + + instance1 + + +
                                                + Type : NgbTypeahead + +
                                                + Decorators : +
                                                + + @ViewChild('instance', {static: true})
                                                +
                                                +
                                                + +
                                                +

                                                references to NGBTypeahead for opening on focus or click

                                                +
                                                +
                                                + + + + + + + + + + + + + + + + + +
                                                + + + + instance2 + + +
                                                + Type : NgbTypeahead + +
                                                + Decorators : +
                                                + + @ViewChild('instance', {static: true})
                                                +
                                                +
                                                + +
                                                + + + + + + + + + + + + + + + + + +
                                                + + + + loading + + +
                                                + Default value : false +
                                                + +
                                                +

                                                flag for HTML to display loading animation

                                                +
                                                +
                                                + + + + + + + + + + + + + + +
                                                + + + + loadingCities + + +
                                                + Default value : false +
                                                + +
                                                + + + + + + + + + + + + + + + + + + + + +
                                                + + + + searchcity + + +
                                                + Default value : () => {...} +
                                                + +
                                                +

                                                trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities

                                                +
                                                +
                                                +
                                                + Parameters : + + + + + + + + + + + + + +
                                                NameDescription
                                                text +

                                                observable event with the filter text

                                                +
                                                +
                                                +
                                                +
                                                + + + + + + + + + + + + + + + + + + + + +
                                                + + + + searchcounty + + +
                                                + Default value : () => {...} +
                                                + +
                                                +

                                                trigger for county typeahead. registers typing, focus, and click and searches the backend

                                                +
                                                +
                                                +
                                                + Parameters : + + + + + + + + + + + + + +
                                                NameDescription
                                                text +

                                                observable event with the filter text

                                                +
                                                +
                                                +
                                                +
                                                +
                                                + +
                                                + + +
                                                +
                                                import { Component, OnInit, ViewChild } from '@angular/core';
                                                +import {
                                                +	FormGroup,
                                                +	Validators,
                                                +	FormBuilder
                                                +} from '@angular/forms';
                                                +import { OrganisationService } from '../../../organisations.service';
                                                +import { Router, ActivatedRoute } from '@angular/router';
                                                +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
                                                +import { Subject } from 'rxjs/internal/Subject';
                                                +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
                                                +import { Observable } from 'rxjs/internal/Observable';
                                                +import {
                                                +	debounceTime,
                                                +	distinctUntilChanged,
                                                +	filter,
                                                +	map,
                                                +	switchMap
                                                +} from 'rxjs/operators';
                                                +import { merge } from 'rxjs';
                                                +import { EmailValidation } from '@app/core/validators/email-validation';
                                                +import { PhoneValidation } from '@app/core/validators/phone-validation';
                                                +import { WebsiteValidation } from '@app/core/validators/website-validation';
                                                +import { Location } from '@angular/common';
                                                +import { LocationValidation } from '@app/core/validators/location-validation';
                                                +import { UtilService } from '@app/core';
                                                +
                                                +@Component({
                                                +	selector: 'app-organisation-add',
                                                +	templateUrl: './organisation-add.component.html',
                                                +	styleUrls: ['./organisation-add.component.scss']
                                                +})
                                                +
                                                +export class OrganisationaddComponent implements OnInit {
                                                +	/**
                                                +	* form that holds data
                                                +	*/
                                                +	form: FormGroup;
                                                +
                                                +	/**
                                                +	* placeholder for disabled city field
                                                +	*/
                                                +	cityPlaceholder = 'Selectați mai întâi județul';
                                                +
                                                +	/**
                                                +	* references to NGBTypeahead for opening on focus or click
                                                +	*/
                                                +	@ViewChild('instance', { static: true }) instance1: NgbTypeahead;
                                                +	focus1$ = new Subject<string>();
                                                +	click1$ = new Subject<string>();
                                                +
                                                +	@ViewChild('instance', { static: true }) instance2: NgbTypeahead;
                                                +	focus2$ = new Subject<string>();
                                                +	click2$ = new Subject<string>();
                                                +	/**
                                                +	 * flag for HTML to display loading animation
                                                +	 */
                                                +	loading = false;
                                                +	loadingCities = false;
                                                +	/**
                                                +	* list of cities to pe parsed. edited when the user selects a county or edits this NGO
                                                +	*/
                                                +	cities: any[] = [];
                                                +
                                                +	constructor(
                                                +		private route: ActivatedRoute,
                                                +		private organisationService: OrganisationService,
                                                +		private utilService: UtilService,
                                                +		private location: Location,
                                                +		private citiesandCounties: CitiesCountiesService,
                                                +		private fb: FormBuilder) { }
                                                +
                                                +	ngOnInit() {
                                                +		/**
                                                +		* init form with empty values
                                                +		*/
                                                +		this.form = this.fb.group({
                                                +			name: ['', [Validators.required]],
                                                +			website: ['', [Validators.required, WebsiteValidation.websiteValidation]],
                                                +			contact_person: ['', Validators.required],
                                                +			phone: ['', [Validators.required, PhoneValidation.phoneValidation]],
                                                +			address: [''],
                                                +			cover: [''],
                                                +			email: ['', [Validators.required, EmailValidation.emailValidation]],
                                                +			county: ['', [Validators.required, LocationValidation.locationValidation]],
                                                +			city: [{value: '', disabled: true }, [Validators.required, ]],
                                                +			comments: ['']
                                                +		});
                                                +	}
                                                +
                                                +	formatter = (result: { name: string }) => result.name;
                                                +	/**
                                                +	 * trigger for county typeahead. registers typing, focus, and click and searches the backend
                                                +	 * @param {Observable} text observable event with the filter text
                                                +	 */
                                                +	searchcounty = (text$: Observable<string>) => {
                                                +		const debouncedText$ = text$.pipe(
                                                +			debounceTime(200),
                                                +			distinctUntilChanged()
                                                +		);
                                                +		const clicksWithClosedPopup$ = this.click1$.pipe(
                                                +			filter(() => !this.instance1.isPopupOpen())
                                                +		);
                                                +		const inputFocus$ = this.focus1$;
                                                +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                                                +			switchMap((term: string) => this.citiesandCounties.getCounties(term))
                                                +		);
                                                +	}
                                                +	/**
                                                +	 * trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities
                                                +	 * @param {Observable} text observable event with the filter text
                                                +	 */
                                                +	searchcity = (text$: Observable<string>) => {
                                                +		const debouncedText$ = text$.pipe(
                                                +			debounceTime(200),
                                                +			distinctUntilChanged()
                                                +		);
                                                +		const clicksWithClosedPopup$ = this.click2$.pipe(
                                                +			filter(() => !this.instance2.isPopupOpen())
                                                +		);
                                                +		const inputFocus$ = this.focus2$;
                                                +		return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
                                                +			map((term: string) => {
                                                +				if (term === '') {
                                                +					return this.cities;
                                                +				} else {
                                                +					return this.cities.filter(v => {
                                                +						const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase();
                                                +						return aux.indexOf(term.toLowerCase()) > -1;
                                                +					}).slice(0, 20);
                                                +				}
                                                +			}));
                                                +	}
                                                +	/**
                                                +	 * trigger for select county from county typeahead. will unlock the city field
                                                +	 * @param {any} val result object from typeahead that needs to be stored
                                                +	 */
                                                +	selectedCounty(val: any) {
                                                +		this.form.controls.county.markAsTouched();
                                                +		if (val.item && val.item._id) {
                                                +			this.form.patchValue({county: val.item});
                                                +			this.loadingCities = true;
                                                +			this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => {
                                                +				this.cities = res;
                                                +				this.cityPlaceholder = 'Alegeți Orașul';
                                                +				this.loadingCities = false;
                                                +				this.form.controls.city.enable();
                                                +			});
                                                +		} else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) {
                                                +			this.form.patchValue({county: '', city: ''});
                                                +		}
                                                +	}
                                                +
                                                +	/**
                                                +	 * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection
                                                +	 * @param {any} event to be verified for which key has been pressed
                                                +	*/
                                                +	countykey(event: any) {
                                                +		this.form.controls.county.markAsTouched();
                                                +		if (event.code !== 'Enter') {
                                                +			this.cities = [];
                                                +			this.form.controls.city.disable();
                                                +			this.form.controls.city.reset('');
                                                +			this.cityPlaceholder = 'Selectați mai întâi județul';
                                                +		}
                                                +	}
                                                +	/**
                                                +	 * trigger for select city from city typeahead
                                                +	 * @param {any} val result object from typeahead that needs to be stored
                                                +	 */
                                                +	selectedCity(val: { item: any }) {
                                                +		this.form.controls.city.markAsTouched();
                                                +		this.form.patchValue({city: val.item});
                                                +	}
                                                +
                                                +	/**
                                                +	 * Process form values and send data to server. If success close page
                                                +	 */
                                                +	onSubmit() {
                                                +		this.loading = true;
                                                +		const ngo = this.form.value;
                                                +		ngo.city = ngo.city._id;
                                                +		ngo.county = ngo.county._id;
                                                +		this.organisationService
                                                +		.addorganisation(ngo)
                                                +		.subscribe(() => {
                                                +			this.loading = false;
                                                +			this.location.back();
                                                +		}, () => {
                                                +			this.loading = false;
                                                +		});
                                                +	}
                                                +}
                                                +
                                                +
                                                + +
                                                +
                                                <div class="container wide-container mt-5">
                                                +	<nav
                                                +		class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                +		<app-back-button></app-back-button>
                                                +	</nav>
                                                +
                                                +	<p class="page-title">Adaugă o organizație:</p>
                                                +
                                                +	<form [formGroup]="form" (ngSubmit)="onSubmit()">
                                                +		<div class="row">
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Nume Organizație *</label>
                                                +					<input formControlName="name" class="form-control" type="text"
                                                +						[ngClass]="{ 'error': form.controls.name.invalid && form.controls.name.touched }" />
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Website Organizație *</label>
                                                +					<input formControlName="website" class="form-control" type="text"
                                                +						[ngClass]="{ 'error': form.controls.website.invalid && form.controls.website.touched }" />
                                                +					<span class="error-message" *ngIf="form.controls.website.invalid && form.controls.website.touched">* {{form.controls.website.errors.website}}</span>
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Acoperire *</label>
                                                +					<select class="form-control" formControlName="cover"
                                                +					[ngClass]="{ 'error': form.controls.cover.invalid && form.controls.cover.touched }"
                                                +					class="form-control">
                                                +						<option>Națională</option>
                                                +						<option>Locală</option>
                                                +					</select>
                                                +					<span class="error-message" *ngIf="form.controls.cover.invalid && form.controls.cover.touched">* Trebuie să alegeți un tip.</span>
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Persoană de contact *</label>
                                                +					<input formControlName="contact_person" class="form-control" type="text"
                                                +						[ngClass]="{ 'error': form.controls.contact_person.invalid && form.controls.contact_person.touched }" />
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Email *</label>
                                                +					<input formControlName="email" class="form-control" type="email"
                                                +						[ngClass]="{ 'error': form.controls.email.invalid && form.controls.email.touched }" />
                                                +					<span class="error-message" *ngIf="form.controls.email.invalid && form.controls.email.touched">* {{form.controls.email.errors.email}}</span>
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Număr de Telefon *</label>
                                                +					<input formControlName="phone" class="form-control" type="tel"
                                                +						[ngClass]="{ 'error': form.controls.phone.invalid && form.controls.phone.touched }" />
                                                +					<span class="error-message" *ngIf="form.controls.phone.invalid && form.controls.phone.touched">* {{form.controls.phone.errors.phone}}</span>
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Județ *</label>
                                                +					<input type="text" formControlName="county" (selectItem)="selectedCounty($event)" (blur)="selectedCounty($event.target.value)"
                                                +						class="form-control" [ngbTypeahead]="searchcounty" (focus)="focus1$.next($event.target.value)"
                                                +						(keyup)="countykey($event)"
                                                +						[inputFormatter]="formatter" [resultFormatter]="formatter"
                                                +						[ngClass]="{ 'error': form.controls.county.invalid && form.controls.county.touched}"
                                                +						(click)="click1$.next($event.target.value)" #instance="ngbTypeahead" />
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Localitate *</label>
                                                +					<input type="text" formControlName="city" class="form-control"
                                                +						[ngbTypeahead]="searchcity" (selectItem)="selectedCity($event)"
                                                +						[ngClass]="{ 'error': form.controls.city.invalid && form.controls.city.touched }"
                                                +						placeholder="{{ cityPlaceholder }}" autocomplete="new-password" [inputFormatter]="formatter"
                                                +						[resultFormatter]="formatter" (focus)="focus2$.next($event.target.value)"
                                                +						(click)="click2$.next($event.target.value)" #instance="ngbTypeahead" />
                                                +					<div class="spinner-border text-grey input-loader" role="status" *ngIf="loadingCities">
                                                +						<span class="sr-only">Loading...</span>
                                                +					</div>
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-4 col-sm-12">
                                                +				<div class="form-group">
                                                +					<label>Adresă</label>
                                                +					<input formControlName="address" class="form-control" type="text"
                                                +						[ngClass]="{ 'error': form.controls.address.invalid && form.controls.address.touched}" />
                                                +				</div>
                                                +			</div>
                                                +
                                                +			<div class="mt-4 col-md-12">
                                                +				<div class="form-group">
                                                +					<label>Comentarii</label>
                                                +					<textarea rows="3" formControlName="comments" class="form-control" type="text"
                                                +						[ngClass]="{ 'error': form.controls.comments.invalid && form.controls.comments.touched}"></textarea>
                                                +				</div>
                                                +			</div>
                                                +		</div>
                                                +
                                                +		<div class="text-right">
                                                +			<button *ngIf="!loading" class="btn btn-info btn-rounded waves-effect waves-light mt-5" [disabled]="form.invalid"
                                                +				type="submit">
                                                +				Salvează
                                                +			</button>
                                                +			<div class="spinner-border text-green" role="status" *ngIf="loading">
                                                +				<span class="sr-only">Loading...</span>
                                                +			</div>
                                                +		</div>
                                                +	</form>
                                                +</div>
                                                +
                                                + +
                                                +

                                                + ./organisation-add.component.scss +

                                                +
                                                // .expandable-span{
                                                +//     min-width: 520px;
                                                +//     max-width: 920px;
                                                +//     display: block;
                                                +//     width: 100%;
                                                +//     height: calc(1.5em + 0.75rem + 2px);
                                                +//     padding: 0.375rem 0.75rem;
                                                +//     font-size: 1rem;
                                                +//     font-weight: 400;
                                                +//     line-height: 1.5;
                                                +//     color: #495057;
                                                +//     background-color: #ffffff;
                                                +//     background-clip: padding-box;
                                                +//     border: 1px solid #ced4da;
                                                +//     border-radius: 0.25rem;
                                                +//     transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
                                                +// }
                                                +// [contenteditable="true"].expandable-span {
                                                +//     white-space: nowrap;
                                                +//     overflow: hidden;
                                                +// } 
                                                +// [contenteditable="true"].expandable-span br {
                                                +//     display:none;
                                                +
                                                +// }
                                                +// [contenteditable="true"].expandable-span * {
                                                +//     display:inline;
                                                +//     white-space:nowrap;
                                                +// }
                                                +
                                                +.form-group{
                                                +    margin:0;
                                                +}
                                                +
                                                + +
                                                +
                                                +
                                                +
                                                + Legend +
                                                +
                                                +
                                                Html element +
                                                +
                                                +
                                                Component +
                                                +
                                                +
                                                Html element with directive +
                                                +
                                                +
                                                + + +
                                                + + + + + + + + + + + + + + + + + + + + + +
                                                +
                                                +

                                                result-matching ""

                                                +
                                                  +
                                                  +
                                                  +

                                                  No results matching ""

                                                  +
                                                  +
                                                  +
                                                  + +
                                                  +
                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/OrganisationsComponent.html b/documentation/components/OrganisationsComponent.html new file mode 100644 index 0000000..1523ea4 --- /dev/null +++ b/documentation/components/OrganisationsComponent.html @@ -0,0 +1,353 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                  +
                                                  + + +
                                                  +
                                                  + + + + + + + + +
                                                  +

                                                  +

                                                  File

                                                  +

                                                  +

                                                  + src/app/pages/organisations/organisations/organisations.component.ts +

                                                  + + + +

                                                  +

                                                  Implements

                                                  +

                                                  +

                                                  + OnInit +

                                                  + + +
                                                  +

                                                  Metadata

                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                  selectorapp-organisations
                                                  styleUrls./organisations.component.scss
                                                  templateUrl./organisations.component.html
                                                  +
                                                  + +
                                                  +

                                                  Index

                                                  + + + + + + + + + + + + + + + +
                                                  +
                                                  Methods
                                                  +
                                                  + +
                                                  +
                                                  + +
                                                  +

                                                  Constructor

                                                  + + + + + + + + + + + + + +
                                                  +constructor() +
                                                  + +
                                                  +

                                                  wrapper for the organisations pages. acts as frame

                                                  +
                                                  +
                                                  +
                                                  + + + + + +
                                                  + +

                                                  + Methods +

                                                  + + + + + + + + + + + + + + + + + + + +
                                                  + + + + ngOnInit + + + +
                                                  +ngOnInit() +
                                                  + +
                                                  + +
                                                  + Returns : void + +
                                                  +
                                                  +
                                                  + +
                                                  + + +
                                                  +
                                                  import { Component, OnInit } from '@angular/core';
                                                  +
                                                  +@Component({
                                                  +	selector: 'app-organisations',
                                                  +	templateUrl: './organisations.component.html',
                                                  +	styleUrls: ['./organisations.component.scss']
                                                  +})
                                                  +
                                                  +export class OrganisationsComponent implements OnInit {
                                                  +/**
                                                  +	 * wrapper for the organisations pages. acts as frame
                                                  +	 */
                                                  +	constructor() { }
                                                  +
                                                  +	ngOnInit() {
                                                  +	}
                                                  +
                                                  +}
                                                  +
                                                  +
                                                  + +
                                                  +
                                                  <router-outlet></router-outlet>
                                                  +
                                                  + +
                                                  +

                                                  + ./organisations.component.scss +

                                                  +
                                                  +
                                                  + +
                                                  +
                                                  +
                                                  +
                                                  + Legend +
                                                  +
                                                  +
                                                  Html element +
                                                  +
                                                  +
                                                  Component +
                                                  +
                                                  +
                                                  Html element with directive +
                                                  +
                                                  +
                                                  + + +
                                                  + + + + + + + + + + + + + + + + + + + + + +
                                                  +
                                                  +

                                                  result-matching ""

                                                  +
                                                    +
                                                    +
                                                    +

                                                    No results matching ""

                                                    +
                                                    +
                                                    +
                                                    + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/OrganisationsDashboardComponent.html b/documentation/components/OrganisationsDashboardComponent.html new file mode 100644 index 0000000..d056bf9 --- /dev/null +++ b/documentation/components/OrganisationsDashboardComponent.html @@ -0,0 +1,1697 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                    +
                                                    + + +
                                                    +
                                                    + + + + + + + + +
                                                    +

                                                    +

                                                    File

                                                    +

                                                    +

                                                    + src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.ts +

                                                    + + + +

                                                    +

                                                    Implements

                                                    +

                                                    +

                                                    + OnInit +

                                                    + + +
                                                    +

                                                    Metadata

                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                    selectorapp-organisations-dashboard
                                                    styleUrls./organisations-dashboard.component.scss
                                                    templateUrl./organisations-dashboard.component.html
                                                    +
                                                    + +
                                                    +

                                                    Index

                                                    + + + + + + + + + + + + + + + + + + + + + +
                                                    +
                                                    Properties
                                                    +
                                                    + +
                                                    +
                                                    Methods
                                                    +
                                                    + +
                                                    +
                                                    + +
                                                    +

                                                    Constructor

                                                    + + + + + + + + + + + + + +
                                                    +constructor(organisationService: OrganisationService, breakpointObserver: BreakpointObserver, filterService: FiltersService, citiesandcounties: CitiesCountiesService, router: Router) +
                                                    + +
                                                    +
                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                    NameTypeOptional
                                                    organisationService + OrganisationService + + No +
                                                    breakpointObserver + BreakpointObserver + + No +
                                                    filterService + FiltersService + + No +
                                                    citiesandcounties + CitiesCountiesService + + No +
                                                    router + Router + + No +
                                                    +
                                                    +
                                                    +
                                                    + + + + + +
                                                    + +

                                                    + Methods +

                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + filterChanged + + + +
                                                    +filterChanged(id?: number) +
                                                    + +
                                                    +

                                                    muliselect filter callback

                                                    +
                                                    + +
                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                    NameTypeOptionalDescription
                                                    id + number + + Yes + +

                                                    the index in the pager filters and filters selected array

                                                    + +
                                                    +
                                                    +
                                                    +
                                                    +
                                                    + Returns : void + +
                                                    +
                                                    + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + getData + + + +
                                                    +getData() +
                                                    + +
                                                    +

                                                    get ngo list with filters in pager

                                                    +
                                                    + +
                                                    + Returns : void + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + ngOnInit + + + +
                                                    +ngOnInit() +
                                                    + +
                                                    + +
                                                    + Returns : void + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + searchChanged + + + +
                                                    +searchChanged(pager: any) +
                                                    + +
                                                    +

                                                    search callback

                                                    +
                                                    + +
                                                    + Parameters : + + + + + + + + + + + + + + + + + + +
                                                    NameTypeOptional
                                                    pager + any + + No +
                                                    +
                                                    +
                                                    +
                                                    +
                                                    + Returns : void + +
                                                    +
                                                    + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + showOrganisationDetails + + + +
                                                    +showOrganisationDetails(id: string, property: string, e: any) +
                                                    + +
                                                    +

                                                    navigate to NGO details page with specific tab open

                                                    +
                                                    + +
                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                    NameTypeOptionalDescription
                                                    id + string + + No + +

                                                    the id of the organization to be show

                                                    + +
                                                    property + string + + No + +

                                                    the tab that needs to be open on page load

                                                    + +
                                                    e + any + + No + +

                                                    suppresed default event

                                                    + +
                                                    +
                                                    +
                                                    +
                                                    +
                                                    + Returns : void + +
                                                    +
                                                    + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + singleFilterChanged + + + +
                                                    +singleFilterChanged(id?: number) +
                                                    + +
                                                    +

                                                    single select filter callback

                                                    +
                                                    + +
                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                    NameTypeOptionalDescription
                                                    id + number + + Yes + +

                                                    the index in the pager filters and filters selected array

                                                    + +
                                                    +
                                                    +
                                                    +
                                                    +
                                                    + Returns : void + +
                                                    +
                                                    + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + sortChanged + + + +
                                                    +sortChanged(pager: any) +
                                                    + +
                                                    +

                                                    sort callback

                                                    +
                                                    + +
                                                    + Parameters : + + + + + + + + + + + + + + + + + + +
                                                    NameTypeOptional
                                                    pager + any + + No +
                                                    +
                                                    +
                                                    +
                                                    +
                                                    + Returns : void + +
                                                    +
                                                    + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + switchtoblock + + + +
                                                    +switchtoblock() +
                                                    + +
                                                    +

                                                    set class of display element with grid view

                                                    +
                                                    + +
                                                    + Returns : void + +
                                                    +
                                                    + + + + + + + + + + + + + + + + + + + +
                                                    + + + + switchtolist + + + +
                                                    +switchtolist() +
                                                    + +
                                                    +

                                                    set class of display element with list view

                                                    +
                                                    + +
                                                    + Returns : void + +
                                                    +
                                                    +
                                                    +
                                                    + +

                                                    + Properties +

                                                    + + + + + + + + + + + + + + +
                                                    + + + + Public + breakpointObserver + + +
                                                    + Type : BreakpointObserver + +
                                                    + +
                                                    + + + + + + + + + + + + + + + + + +
                                                    + + + + categoryFilterValues + + +
                                                    + Type : any[] + +
                                                    + +
                                                    +

                                                    values to be displayed in filter menus

                                                    +
                                                    +
                                                    + + + + + + + + + + + + + + + + + +
                                                    + + + + displayBlock + + +
                                                    + Default value : true +
                                                    + +
                                                    +

                                                    flag to indicate use of list or grid display

                                                    +
                                                    +
                                                    + + + + + + + + + + + + + + +
                                                    + + + + locationFilterValues + + +
                                                    + Type : any[] + +
                                                    + +
                                                    + + + + + + + + + + + + + + + + + +
                                                    + + + + ngosData + + +
                                                    + Type : any + +
                                                    + Default value : [] +
                                                    + +
                                                    + + + + + + + + + + + + + + + + + +
                                                    + + + + pager + + +
                                                    + Type : any + +
                                                    + Default value : {} +
                                                    + +
                                                    + + + + + + + + + + + + + + + + + + + + +
                                                    + + + + propertyMap + + +
                                                    + Type : object + +
                                                    + Default value : { + '_id': 'id', + 'parent_id': 'parent_id' + } +
                                                    + +
                                                    +

                                                    mapping of object keys to filter recognizable keys

                                                    +
                                                    +
                                                    + + + + + + + + + + + + + + + + + +
                                                    + + + + selected + + +
                                                    + Default value : Array(4) +
                                                    + +
                                                    +

                                                    selected values in the filters. Array of array of {id, name} objects

                                                    +
                                                    +
                                                    + + + + + + + + + + + + + + +
                                                    + + + + specializationFilterValues + + +
                                                    + Type : any[] + +
                                                    + +
                                                    + + + + + + + + + + + + + + + + + +
                                                    + + + + typeFilterValues + + +
                                                    + Type : [] + +
                                                    + Default value : [{id: 'Națională', name: 'Națională'}, {id: 'Locală', name: 'Locală'}] +
                                                    + +
                                                    +
                                                    + +
                                                    + + +
                                                    +
                                                    import { Component, OnInit } from '@angular/core';
                                                    +import { OrganisationService } from '../../../organisations.service';
                                                    +import { BreakpointObserver } from '@angular/cdk/layout';
                                                    +import { FiltersService, CitiesCountiesService } from '@app/core';
                                                    +import { Router, NavigationExtras } from '@angular/router';
                                                    +@Component({
                                                    +	selector: 'app-organisations-dashboard',
                                                    +	templateUrl: './organisations-dashboard.component.html',
                                                    +	styleUrls: ['./organisations-dashboard.component.scss']
                                                    +})
                                                    +export class OrganisationsDashboardComponent implements OnInit {
                                                    +	ngosData: any = [];
                                                    +	pager: any = {};
                                                    +	/**
                                                    +	* flag to indicate use of list or grid display
                                                    +	*/
                                                    +	displayBlock = true;
                                                    +	/**
                                                    +	* selected values in the filters. Array of array of {id, name} objects
                                                    +	*/
                                                    +	selected = Array(4);
                                                    +
                                                    +	/**
                                                    +	* values to be displayed in filter menus
                                                    +	*/
                                                    +	categoryFilterValues: any[];
                                                    +	typeFilterValues = [{id: 'Națională', name: 'Națională'}, {id: 'Locală', name: 'Locală'}];
                                                    +	specializationFilterValues: any[];
                                                    +	locationFilterValues: any[];
                                                    +	/**
                                                    +	* mapping of object keys to filter recognizable keys
                                                    +	*/
                                                    +	propertyMap = {
                                                    +		'_id': 'id',
                                                    +		'parent_id': 'parent_id'
                                                    +	};
                                                    +	constructor(
                                                    +		private organisationService: OrganisationService,
                                                    +		public breakpointObserver: BreakpointObserver,
                                                    +		private filterService: FiltersService,
                                                    +		private citiesandcounties: CitiesCountiesService,
                                                    +		private router: Router
                                                    +	) {}
                                                    +
                                                    +
                                                    +	ngOnInit() {
                                                    +		this.organisationService.setPager();
                                                    +		/**
                                                    +		* get and store filter values
                                                    +		*/
                                                    +		this.citiesandcounties.getCounties('').subscribe((response: any) => {
                                                    +			const aux = response;
                                                    +			aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id);
                                                    +			this.locationFilterValues = aux;
                                                    +		});
                                                    +
                                                    +		this.filterService.getSpecializationFilters().subscribe((data) => {
                                                    +			this.specializationFilterValues = data.map((elem: any) => {
                                                    +				return {id: elem._id, name: elem.name};
                                                    +			});
                                                    +		});
                                                    +		this.filterService.getCategoryFilters().subscribe((data) => {
                                                    +			this.categoryFilterValues = data.map((x: any) => {
                                                    +				const parent = data.find((y: any) => y._id === x.parent_id);
                                                    +				return {
                                                    +					id: x._id,
                                                    +					name: x.name,
                                                    +					parent_id: x.parent_id,
                                                    +					pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null),
                                                    +					level: x.parent_id === '0' ? 0 : 1
                                                    +				};
                                                    +			});
                                                    +		});
                                                    +		this.pager = this.organisationService.getPager();
                                                    +
                                                    +		this.getData();
                                                    +
                                                    +		/**
                                                    +		* subscribe to screen size in order to use list instead of grid for display
                                                    +		*/
                                                    +		this.breakpointObserver
                                                    +			.observe(['(max-width: 768px)'])
                                                    +			.subscribe(result => {
                                                    +				if (result.matches) {
                                                    +					this.switchtoblock();
                                                    +				}
                                                    +			});
                                                    +	}
                                                    +	/**
                                                    +	* sort callback
                                                    +	* @param {any} Pager pager is modified by external componet and passed as param
                                                    +	*/
                                                    +	sortChanged(pager: any) {
                                                    +		this.pager = pager;
                                                    +		this.getData();
                                                    +	}
                                                    +	/**
                                                    +	* search callback
                                                    +	* @param {any} Pager pager is modified by external componet and passed as param
                                                    +	*/
                                                    +	searchChanged(pager: any) {
                                                    +		this.pager = pager;
                                                    +		this.getData();
                                                    +	}
                                                    +	/**
                                                    +	* get ngo list with filters in pager
                                                    +	*/
                                                    +	getData() {
                                                    +		this.organisationService.getorganisations(this.pager).subscribe(element => {
                                                    +			this.ngosData = element.data.map((elem: any) => {
                                                    +				elem.nr_vol = 0;
                                                    +				elem.nr_res = 0;
                                                    +				return elem;
                                                    +			});
                                                    +			this.pager.total = element.pager.total;
                                                    +		});
                                                    +	}
                                                    +	/**
                                                    +	* muliselect filter callback
                                                    +	* @param {number} id the index in the pager filters and filters selected array
                                                    +	*/
                                                    +	filterChanged(id?: number) {
                                                    +		this.pager.filters[id] =  this.selected[id].map((elem: any) => elem.id).join(',');
                                                    +		this.getData();
                                                    +	}
                                                    +		/**
                                                    +	* single select filter callback
                                                    +	* @param {number} id the index in the pager filters and filters selected array
                                                    +	*/
                                                    +	singleFilterChanged(id?: number) {
                                                    +
                                                    +		if (this.selected[id]) {
                                                    +			this.pager.filters[id] =  this.selected[id].id;
                                                    +		} else {
                                                    +			this.pager.filters[id] = null;
                                                    +		}
                                                    +		console.log(this.pager.filters[id]);
                                                    +		this.getData();
                                                    +	}
                                                    +
                                                    +	/**
                                                    +	 * set class of display element with list view
                                                    +	 */
                                                    +	switchtolist() {
                                                    +		this.displayBlock = false;
                                                    +	}
                                                    +
                                                    +	/**
                                                    +	 * set class of display element with grid view
                                                    +	 */
                                                    +	switchtoblock() {
                                                    +		this.displayBlock = true;
                                                    +	}
                                                    +	/**
                                                    +	* navigate to NGO details page with specific tab open
                                                    +	* @param {string} id the id of the organization to be show
                                                    +	* @param {string} property the tab that needs to be open on page load
                                                    +	* @param {number} e suppresed default event
                                                    +	*/
                                                    +	showOrganisationDetails(id: string, property: string, e: any) {
                                                    +		e.preventDefault();
                                                    +		const navigationExtras: NavigationExtras = {
                                                    +			state: {
                                                    +				tabName: property
                                                    +			}
                                                    +		};
                                                    +		this.router.navigateByUrl('/organisations/id/' + id, navigationExtras);
                                                    +	}
                                                    +}
                                                    +
                                                    +
                                                    + +
                                                    +
                                                    <div class="container">
                                                    +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                    +        <h4 class="navtitle mb-2"> Organizații </h4>
                                                    +        <div class="form-inline ml-auto">
                                                    +            <app-table-search [pager]="pager" id=2 (searchChanged)="searchChanged($event)"></app-table-search>
                                                    +            <div class="btn-group btn-group-toggle m-2 hidden-radio" ngbRadioGroup name="radioBasic"
                                                    +                [(ngModel)]="displayBlock">
                                                    +                <label ngbButtonLabel (click)="switchtoblock()" class="btn-primary btn">
                                                    +                    <input ngbButton type="radio" [value]="true"><span class="fa fa-th-large"></span>
                                                    +                </label>
                                                    +                <label ngbButtonLabel (click)="switchtolist()" class="btn btn-primary">
                                                    +                    <input ngbButton type="radio" [value]="false"><span class="fa fa-bars"></span>
                                                    +                </label>
                                                    +            </div>
                                                    +            <button [routerLink]="['/organisations/add']" style="white-space: normal;"
                                                    +                class="btn-adjusting btn btn-info btn-rounded m-2"><span
                                                    +                    class="fa fa-plus-circle"></span>&nbsp;&nbsp;Adaugă Organizație</button>
                                                    +        </div>
                                                    +    </nav>
                                                    +    <div class="filters my-3 mx-30px row">
                                                    +        <span class='padding-rem'>Total: {{pager.total}}</span>
                                                    +        <span class='padding-rem'>&nbsp;&nbsp;</span>
                                                    +        <span class='padding-rem'>Filtrează după: &nbsp;</span>
                                                    +        <ngx-multiselect class="type"
                                                    +        [(ngModel)]="selected[0]"
                                                    +        showMaxLables = "1"
                                                    +        [options]="typeFilterValues"
                                                    +        [showSearchFilter]="false"
                                                    +        [multiple]="false"
                                                    +        [showHelperElements]="false"
                                                    +        (onClear)="singleFilterChanged(0)"
                                                    +        (onItemClick)="singleFilterChanged(0)"
                                                    +        (onSelectNone)="singleFilterChanged(0)"
                                                    +        (onSelectAll)="singleFilterChanged(0)">
                                                    +		</ngx-multiselect>
                                                    +        <span class="vertical-bar">&nbsp;</span>
                                                    +        <ngx-multiselect
                                                    +			[(ngModel)]="selected[1]"
                                                    +            showMaxLables = "1"
                                                    +			[options]="locationFilterValues"
                                                    +			(onItemClick)="filterChanged(1)"
                                                    +			(onSelectNone)="filterChanged(1)"
                                                    +			(onSelectAll)="filterChanged(1)">
                                                    +		</ngx-multiselect>
                                                    +        <span class="vertical-bar">&nbsp;</span>
                                                    +        <ngx-multiselect class="specialization"
                                                    +            [(ngModel)]="selected[3]"
                                                    +            showMaxLables = "1"
                                                    +            [options]="specializationFilterValues"
                                                    +            [multiple]="false"
                                                    +            [showHelperElements]="false"
                                                    +            (onClear)="singleFilterChanged(3)"
                                                    +            (onItemClick)="singleFilterChanged(3)"
                                                    +            (onSelectNone)="singleFilterChanged(3)"
                                                    +            (onSelectAll)="singleFilterChanged(3)">
                                                    +        </ngx-multiselect>
                                                    +        <span class="vertical-bar">&nbsp;</span>
                                                    +        <ngx-multiselect class="category"
                                                    +            [(ngModel)]="selected[4]"
                                                    +            showMaxLables = "1"
                                                    +            [options]="categoryFilterValues"
                                                    +            [multiple]="false"
                                                    +            [showHelperElements]="false"
                                                    +            [propertyMap]="propertyMap"
                                                    +            (onClear)="singleFilterChanged(4)"
                                                    +            (onItemClick)="singleFilterChanged(4)"
                                                    +            (onSelectNone)="singleFilterChanged(4)"
                                                    +            (onSelectAll)="singleFilterChanged(4)">
                                                    +            <ng-template let-option="option">
                                                    +                    <span [ngClass]="{'pl-3': option.parent_id!=='0'}">
                                                    +                       {{option.name}} 
                                                    +                    </span>
                                                    +                 </ng-template>
                                                    +        </ngx-multiselect>
                                                    +    </div>
                                                    +
                                                    +    <div *ngIf="displayBlock; else displayList" class="cardlist row mt-5">
                                                    +        <div *ngFor="let elem of ngosData" class="d-flex col-md-6 col-sm-12 col-lg-4">
                                                    +            <div class="card mb-2" style="flex-grow: 1" [routerLink]="['id',elem._id]">
                                                    +                <div class="card-body">
                                                    +                    <a class="btn btn-fix text-left">
                                                    +                        <h4 class="card-title">{{elem.name}}</h4>
                                                    +                        <div class="card-text row">
                                                    +                            <span class="col-md-12">
                                                    +                                <i class="fa fa-envelope"></i>
                                                    +                                {{elem.contact_person?.email}}
                                                    +                            </span>
                                                    +                            <span class="col-md-12">
                                                    +                                <i class="fa fa-phone"></i>
                                                    +                                {{elem.contact_person?.phone}}
                                                    +                            </span>
                                                    +                        </div>
                                                    +                    </a>
                                                    +                    <div class="btn btn-fix text-left">
                                                    +                        Resurse:<br>
                                                    +                        <a (click)="showOrganisationDetails(elem._id, 'volunteers', $event)" href="javascript:void(0);"
                                                    +                            class="card-link">voluntari: {{elem.volunteers}}</a>
                                                    +                        &sdot;
                                                    +                        <a (click)="showOrganisationDetails(elem._id, 'resources', $event)" href="javascript:void(0);"
                                                    +                            class="card-link">resurse: {{elem.resources}}</a>
                                                    +                    </div>
                                                    +                </div>
                                                    +            </div>
                                                    +        </div>
                                                    +        <div class="col-md-12 mx-30px">
                                                    +                <ngb-pagination
                                                    +                    [maxSize]="5"
                                                    +                    [(page)]="pager.page"
                                                    +                    [pageSize]="pager.size"
                                                    +                    (pageChange)="getData()"
                                                    +                    [collectionSize]="pager.total">
                                                    +                </ngb-pagination>
                                                    +            </div>
                                                    +    </div>
                                                    +
                                                    +    <ng-template #displayList>
                                                    +        <div class="table-responsive">
                                                    +            <table class="table customTable table-sm">
                                                    +                <thead>
                                                    +                    <tr>
                                                    +                        <!-- sortable="name" (sort)="onSort($event)" -->
                                                    +                        <th scope="col" appTableSort [pager]="pager" [value]="1" (sortChanged)="sortChanged($event)">
                                                    +                            Nume</th>
                                                    +                        <th scope="col" appTableSort [pager]="pager" [value]="2" (sortChanged)="sortChanged($event)">
                                                    +                            Locație</th>
                                                    +                        <th scope="col">
                                                    +                            Nr. Voluntari</th>
                                                    +                        <th scope="col">
                                                    +                            Nr. Resurse</th>
                                                    +                    </tr>
                                                    +                </thead>
                                                    +                <tbody>
                                                    +                    <tr *ngFor="let res of ngosData">
                                                    +                        <!-- <tr> -->
                                                    +                        <td>{{res.name}}</td>
                                                    +                        <td>{{res.city?.name}}, {{res.county?.name}}</td>
                                                    +                        <td>{{res.volunteers}}</td>
                                                    +                        <td>{{res.resources}}</td>
                                                    +                        <!-- <td>{{res.updated_at}}</td> -->
                                                    +                        <td class="text-right"><button class="btn btn-info" [routerLink]="['id',res._id]">Vezi
                                                    +                                detalii</button></td>
                                                    +                    </tr>
                                                    +
                                                    +                </tbody>
                                                    +            </table>
                                                    +
                                                    +            <ngb-pagination
                                                    +                    [maxSize]="5" [(page)]="pager.page" [pageSize]="pager.size" (pageChange)="getData()"
                                                    +                [collectionSize]="pager.total">
                                                    +            </ngb-pagination>
                                                    +        </div>
                                                    +    </ng-template>
                                                    +</div>
                                                    +
                                                    + +
                                                    +

                                                    + ./organisations-dashboard.component.scss +

                                                    +
                                                    .card{
                                                    +    background-color: transparent;
                                                    +    margin: 10px;
                                                    +}
                                                    +
                                                    +.card-body{
                                                    +    padding: 0.25rem;
                                                    +    background-color:white;
                                                    +}
                                                    +
                                                    +@media (max-width: 425px) {
                                                    +    .container {
                                                    +      width: 100%;
                                                    +      max-width: none;
                                                    +    }
                                                    +  }
                                                    +
                                                    +@media (max-width: 1199px){
                                                    +    .btn-adjusting{
                                                    +        width: min-content;       
                                                    +    }
                                                    +}
                                                    +
                                                    +
                                                    +.filters {
                                                    +    .padding-rem {
                                                    +        padding: 0.375rem 0.75rem
                                                    +    }
                                                    +
                                                    +    .vertical-bar {
                                                    +        background-color: #67757c;
                                                    +        width: 2px;
                                                    +        margin-left: 10px;
                                                    +        margin-right: 10px;
                                                    +    }
                                                    +}
                                                    +::ng-deep .specialization{
                                                    +    .none-selected:before{
                                                    +        content:'Specializări' !important;
                                                    +    }
                                                    +}
                                                    +::ng-deep .category{
                                                    +    .none-selected:before {
                                                    +        content: 'Categorie' !important;
                                                    +    }
                                                    +}
                                                    +::ng-deep .type{
                                                    +    .none-selected:before {
                                                    +        content: 'Acoperire' !important;
                                                    +    }
                                                    +}
                                                    +
                                                    +
                                                    + +
                                                    +
                                                    +
                                                    +
                                                    + Legend +
                                                    +
                                                    +
                                                    Html element +
                                                    +
                                                    +
                                                    Component +
                                                    +
                                                    +
                                                    Html element with directive +
                                                    +
                                                    +
                                                    + + +
                                                    + + + + + + + + + + + + + + + + + + + + + +
                                                    +
                                                    +

                                                    result-matching ""

                                                    +
                                                      +
                                                      +
                                                      +

                                                      No results matching ""

                                                      +
                                                      +
                                                      +
                                                      + +
                                                      +
                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/RecoverPasswordComponent.html b/documentation/components/RecoverPasswordComponent.html new file mode 100644 index 0000000..80ebb7a --- /dev/null +++ b/documentation/components/RecoverPasswordComponent.html @@ -0,0 +1,670 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                      +
                                                      + + +
                                                      +
                                                      + + + + + + + + +
                                                      +

                                                      +

                                                      File

                                                      +

                                                      +

                                                      + src/app/pages/authentication/recover-password/recover-password.component.ts +

                                                      + + + +

                                                      +

                                                      Implements

                                                      +

                                                      +

                                                      + OnInit +

                                                      + + +
                                                      +

                                                      Metadata

                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      selectorapp-recover-password
                                                      styleUrls./recover-password.component.scss
                                                      templateUrl./recover-password.component.html
                                                      +
                                                      + +
                                                      +

                                                      Index

                                                      + + + + + + + + + + + + + + + + + + + + + +
                                                      +
                                                      Properties
                                                      +
                                                      + +
                                                      +
                                                      Methods
                                                      +
                                                      + +
                                                      +
                                                      + +
                                                      +

                                                      Constructor

                                                      + + + + + + + + + + + + + +
                                                      +constructor(router: Router, authenticationService: AuthenticationService) +
                                                      + +
                                                      +
                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      NameTypeOptional
                                                      router + Router + + No +
                                                      authenticationService + AuthenticationService + + No +
                                                      +
                                                      +
                                                      +
                                                      + + + + + +
                                                      + +

                                                      + Methods +

                                                      + + + + + + + + + + + + + + + + + + + +
                                                      + + + + ngOnInit + + + +
                                                      +ngOnInit() +
                                                      + +
                                                      + +
                                                      + Returns : void + +
                                                      +
                                                      + + + + + + + + + + + + + + + + + + + +
                                                      + + + + resetPassword + + + +
                                                      +resetPassword() +
                                                      + +
                                                      +

                                                      Login with username and password obtained from form resetPasswordForm.

                                                      +

                                                      On success redirects to dashboard

                                                      +
                                                      + +
                                                      + Returns : void + +
                                                      +
                                                      +
                                                      +
                                                      + +

                                                      + Properties +

                                                      + + + + + + + + + + + + + + + + + + + + +
                                                      + + + + errorMessage + + +
                                                      + Type : string + +
                                                      + Default value : null +
                                                      + +
                                                      +

                                                      Message to be displaied on error

                                                      +
                                                      +
                                                      + + + + + + + + + + + + + + + + + +
                                                      + + + + loading + + +
                                                      + Default value : false +
                                                      + +
                                                      +

                                                      flag for HTML to display loading animation

                                                      +
                                                      +
                                                      + + + + + + + + + + + + + + + + + +
                                                      + + + + resetPasswordForm + + +
                                                      + Type : FormGroup + +
                                                      + +
                                                      +

                                                      Form holds data to be completed

                                                      +
                                                      +
                                                      + + + + + + + + + + + + + + +
                                                      + + + + Public + router + + +
                                                      + Type : Router + +
                                                      + +
                                                      +
                                                      + +
                                                      + + +
                                                      +
                                                      import { Component, OnInit } from '@angular/core';
                                                      +import { FormGroup, Validators, FormControl } from '@angular/forms';
                                                      +import { Router } from '@angular/router';
                                                      +import { AuthenticationService } from '@app/core';
                                                      +import { EmailValidation } from '@app/core/validators/email-validation';
                                                      +
                                                      +@Component({
                                                      +	selector: 'app-recover-password',
                                                      +	templateUrl: './recover-password.component.html',
                                                      +	styleUrls: ['./recover-password.component.scss']
                                                      +})
                                                      +export class RecoverPasswordComponent implements OnInit {
                                                      +	/**
                                                      +	 * Form holds data to be completed
                                                      +	 */
                                                      +	resetPasswordForm: FormGroup;
                                                      +/**
                                                      +	 * flag for HTML to display loading animation
                                                      +	 */
                                                      +	loading = false;
                                                      +	/**
                                                      +	 * Message to be displaied on error
                                                      +	 */
                                                      +	errorMessage: string = null;
                                                      +
                                                      +	constructor(
                                                      +		public router: Router,
                                                      +		private authenticationService: AuthenticationService
                                                      +	) {}
                                                      +
                                                      +	ngOnInit() {
                                                      +		this.resetPasswordForm = new FormGroup({
                                                      +			email: new FormControl('', [Validators.required, EmailValidation.emailValidation])
                                                      +		});
                                                      +	}
                                                      +	/**
                                                      +	 * Login with username and password obtained from form {@link resetPasswordForm}.
                                                      +	 *
                                                      +	 * On success redirects to dashboard
                                                      +	 */
                                                      +	resetPassword() {
                                                      +		this.loading = true;
                                                      +		this.authenticationService.recoverPassword(this.resetPasswordForm.value.email).subscribe(response => {
                                                      +			this.loading = false;
                                                      +			this.router.navigate(['/login']);
                                                      +		}, error => {
                                                      +			this.loading = false;
                                                      +			this.errorMessage = 'Adresa de email specificată nu există. Te rugăm să verifici și să încerci din nou.';
                                                      +		});
                                                      +	}
                                                      +}
                                                      +
                                                      +
                                                      + +
                                                      +
                                                      <section id="wrapper" class="login-register login-sidebar">
                                                      +	<div class="logo-container col-md-12 col-sm-12 col-xs-12">
                                                      +		<img src="../../../assets/images/DSU_logo.PNG" />
                                                      +	</div>
                                                      +
                                                      +	<div class="login-box col-md-12 col-sm-12 col-xs-12">
                                                      +		<div class="card-body">
                                                      +			<form [formGroup]="resetPasswordForm" (ngSubmit)="resetPassword()" class="form-horizontal form-material"
                                                      +				id="resetPasswordForm">
                                                      +				<div class="form-group mt-4">
                                                      +					<div class="col-xs-12">
                                                      +						<input formControlName="email" class="form-control" type="email"
                                                      +							placeholder="Adresă de email" />
                                                      +					</div>
                                                      +				</div>
                                                      +
                                                      +				<ngb-alert [dismissible]="false" *ngIf="(resetPasswordForm.invalid && resetPasswordForm.touched) || !!errorMessage"
                                                      +					class="error-message" type="success">
                                                      +					{{ resetPasswordForm.controls.email.errors?.email || errorMessage }}
                                                      +				</ngb-alert>
                                                      +
                                                      +				<div class="form-group text-center mt-4">
                                                      +					<div class="col-xs-12">
                                                      +						<button class="btn button-login btn-lg btn-block text-uppercase waves-effect waves-light"
                                                      +							*ngIf="!loading"
                                                      +							type="submit" [disabled]="resetPasswordForm.invalid">
                                                      +							<app-button-loader [label]="'Trimite'"></app-button-loader>
                                                      +						</button>
                                                      +						<div class="spinner-border text-white" role="status" *ngIf="loading">
                                                      +							<span class="sr-only">Loading...</span>
                                                      +						</div>
                                                      +					</div>
                                                      +				</div>
                                                      +			</form>
                                                      +		</div>
                                                      +	</div>
                                                      +
                                                      +	<div class="d-flex my-5">
                                                      +		<a [routerLink]="['/login']" class="navigation">
                                                      +			Autentificare
                                                      +		</a>
                                                      +	</div>
                                                      +</section>
                                                      +
                                                      + +
                                                      +

                                                      + ./recover-password.component.scss +

                                                      +
                                                      +
                                                      + +
                                                      +
                                                      +
                                                      +
                                                      + Legend +
                                                      +
                                                      +
                                                      Html element +
                                                      +
                                                      +
                                                      Component +
                                                      +
                                                      +
                                                      Html element with directive +
                                                      +
                                                      +
                                                      + + +
                                                      + + + + + + + + + + + + + + + + + + + + + +
                                                      +
                                                      +

                                                      result-matching ""

                                                      +
                                                        +
                                                        +
                                                        +

                                                        No results matching ""

                                                        +
                                                        +
                                                        +
                                                        + +
                                                        +
                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ResetPasswordComponent.html b/documentation/components/ResetPasswordComponent.html new file mode 100644 index 0000000..6a5ec6a --- /dev/null +++ b/documentation/components/ResetPasswordComponent.html @@ -0,0 +1,789 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                        +
                                                        + + +
                                                        +
                                                        + + + + + + + + +
                                                        +

                                                        +

                                                        File

                                                        +

                                                        +

                                                        + src/app/pages/authentication/reset-password/reset-password.component.ts +

                                                        + + + +

                                                        +

                                                        Implements

                                                        +

                                                        +

                                                        + OnInit +

                                                        + + +
                                                        +

                                                        Metadata

                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                        selectorapp-reset-password
                                                        styleUrls./reset-password.component.scss
                                                        templateUrl./reset-password.component.html
                                                        +
                                                        + +
                                                        +

                                                        Index

                                                        + + + + + + + + + + + + + + + + + + + + + +
                                                        +
                                                        Properties
                                                        +
                                                        + +
                                                        +
                                                        Methods
                                                        +
                                                        + +
                                                        +
                                                        + +
                                                        +

                                                        Constructor

                                                        + + + + + + + + + + + + + +
                                                        +constructor(router: Router, authenticationService: AuthenticationService, formBuilder: FormBuilder, route: ActivatedRoute) +
                                                        + +
                                                        +
                                                        + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                        NameTypeOptional
                                                        router + Router + + No +
                                                        authenticationService + AuthenticationService + + No +
                                                        formBuilder + FormBuilder + + No +
                                                        route + ActivatedRoute + + No +
                                                        +
                                                        +
                                                        +
                                                        + + + + + +
                                                        + +

                                                        + Methods +

                                                        + + + + + + + + + + + + + + + + + + + +
                                                        + + + + ngOnInit + + + +
                                                        +ngOnInit() +
                                                        + +
                                                        + +
                                                        + Returns : void + +
                                                        +
                                                        + + + + + + + + + + + + + + + + + + + +
                                                        + + + + resetPassword + + + +
                                                        +resetPassword() +
                                                        + +
                                                        +

                                                        function to call on form submit

                                                        +
                                                        + +
                                                        + Returns : void + +
                                                        +
                                                        +
                                                        +
                                                        + +

                                                        + Properties +

                                                        + + + + + + + + + + + + + + + + + + + + +
                                                        + + + + errorMessage + + +
                                                        + Type : string + +
                                                        + Default value : null +
                                                        + +
                                                        +

                                                        error message to display in html

                                                        +
                                                        +
                                                        + + + + + + + + + + + + + + + + + +
                                                        + + + + loading + + +
                                                        + Default value : false +
                                                        + +
                                                        +

                                                        flag for HTML to display a loading animation

                                                        +
                                                        +
                                                        + + + + + + + + + + + + + + + + + +
                                                        + + + + resetPasswordForm + + +
                                                        + Type : FormGroup + +
                                                        + +
                                                        +

                                                        Form holds data to be completed

                                                        +
                                                        +
                                                        + + + + + + + + + + + + + + +
                                                        + + + + Public + router + + +
                                                        + Type : Router + +
                                                        + +
                                                        + + + + + + + + + + + + + + + + + +
                                                        + + + + token + + +
                                                        + Type : string + +
                                                        + +
                                                        +

                                                        reset password token received from reset link

                                                        +
                                                        +
                                                        +
                                                        + +
                                                        + + +
                                                        +
                                                        import { Component, OnInit } from '@angular/core';
                                                        +import {
                                                        +	FormGroup,
                                                        +	Validators,
                                                        +	FormBuilder
                                                        +} from '@angular/forms';
                                                        +import { Router, ActivatedRoute } from '@angular/router';
                                                        +import { AuthenticationService } from '@app/core';
                                                        +import { PasswordValidation } from '@app/core/validators/password-validation';
                                                        +
                                                        +@Component({
                                                        +	selector: 'app-reset-password',
                                                        +	templateUrl: './reset-password.component.html',
                                                        +	styleUrls: ['./reset-password.component.scss']
                                                        +})
                                                        +
                                                        +export class ResetPasswordComponent implements OnInit {
                                                        +	/**
                                                        +	 * Form holds data to be completed
                                                        +	 */
                                                        +	resetPasswordForm: FormGroup;
                                                        +	/**
                                                        +	 * reset password token received from reset link
                                                        +	 */
                                                        +	token: string;
                                                        +	/**
                                                        +	 * error message to display in html
                                                        +	 */
                                                        +	errorMessage: string = null;
                                                        +	/**
                                                        +	 * flag for HTML to display a loading animation
                                                        +	 */
                                                        +	loading = false;
                                                        +
                                                        +	constructor(
                                                        +		public router: Router,
                                                        +		private authenticationService: AuthenticationService,
                                                        +		private formBuilder: FormBuilder,
                                                        +		private route: ActivatedRoute
                                                        +	) {}
                                                        +
                                                        +	ngOnInit() {
                                                        +		/**
                                                        +		 * Check if user is logged in. if true, redirect to login
                                                        +		 */
                                                        +		if (!!this.authenticationService.isAuthenticated()) {
                                                        +			this.authenticationService.logout().subscribe(
                                                        +				(didlogout: Boolean) => {
                                                        +					if (didlogout) {
                                                        +						this.router.navigate(['/login']);
                                                        +					}
                                                        +				},
                                                        +				(error: any) => {
                                                        +					console.log('logout error: ', error);
                                                        +				});
                                                        +		}
                                                        +
                                                        +			/**
                                                        +		 * get token from email link
                                                        +		 */
                                                        +		this.route.params.subscribe(params => {
                                                        +			this.token = params['token'];
                                                        +		});
                                                        +		/**
                                                        +		 * build form that holds data to be completed
                                                        +		 */
                                                        +		this.resetPasswordForm = this.formBuilder.group(
                                                        +			{
                                                        +				password: ['',
                                                        +					[
                                                        +						Validators.required,
                                                        +						Validators.minLength(8),
                                                        +						PasswordValidation.passwordValidation
                                                        +					]
                                                        +				],
                                                        +				confirmPassword: ['',
                                                        +					[
                                                        +						Validators.required,
                                                        +						Validators.minLength(8),
                                                        +						PasswordValidation.passwordValidation
                                                        +					]
                                                        +				]
                                                        +			},
                                                        +			{
                                                        +				validator: PasswordValidation.MatchPassword
                                                        +			}
                                                        +		);
                                                        +	}
                                                        +	/**
                                                        +		 * function to call on form submit
                                                        +		 */
                                                        +	resetPassword() {
                                                        +		this.loading = true;
                                                        +		this.authenticationService.resetPassword(this.resetPasswordForm.value.password, this.token).subscribe(response => {
                                                        +			this.loading = false;
                                                        +			this.errorMessage = null;
                                                        +			this.router.navigate(['/login']);
                                                        +		}, error => {
                                                        +			this.loading = false;
                                                        +
                                                        +			// tslint:disable-next-line: max-line-length
                                                        +			this.errorMessage = 'Token-ul de resetare al parolei nu este valid, te rugăm să reîncerci din email-ul primit. Dacă problema persistă, te rugăm să ceri din nou schimbarea parolei.';
                                                        +		});
                                                        +	}
                                                        +}
                                                        +
                                                        +
                                                        + +
                                                        +
                                                        <section id="wrapper" class="login-register login-sidebar">
                                                        +	<div class="logo-container col-md-12 col-sm-12 col-xs-12">
                                                        +		<img src="../../../assets/images/DSU_logo.PNG" />
                                                        +	</div>
                                                        +
                                                        +	<div class="login-box col-md-12 col-sm-12 col-xs-12">
                                                        +		<div class="card-body">
                                                        +			<form [formGroup]="resetPasswordForm" (ngSubmit)="resetPassword()" class="form-horizontal form-material"
                                                        +				id="resetPasswordForm">
                                                        +				<div class="form-group mt-4">
                                                        +					<div class="col-xs-12">
                                                        +						<input formControlName="password" class="form-control" type="password" placeholder="Parolă" />
                                                        +					</div>
                                                        +				</div>
                                                        +
                                                        +				<div class="form-group mt-4">
                                                        +					<div class="col-xs-12">
                                                        +						<input formControlName="confirmPassword" class="form-control" type="password"
                                                        +							placeholder="Confirmă Parola" />
                                                        +					</div>
                                                        +				</div>
                                                        +
                                                        +				<ngb-alert [dismissible]="false" *ngIf="(resetPasswordForm.invalid && resetPasswordForm.touched) || !!errorMessage"
                                                        +					class="error-message" type="success">
                                                        +					{{ resetPasswordForm.controls.password.errors?.password || resetPasswordForm.errors?.password || errorMessage }}
                                                        +				</ngb-alert>
                                                        +
                                                        +				<div class="form-group text-center mt-4">
                                                        +					<div class="col-xs-12">
                                                        +						<button *ngIf="!loading" class="btn button-login btn-lg btn-block text-uppercase waves-effect waves-light"
                                                        +							type="submit" [disabled]="resetPasswordForm.invalid">
                                                        +							<app-button-loader [label]="'Trimite'"></app-button-loader>
                                                        +						</button>
                                                        +						<div class="spinner-border text-white" role="status" *ngIf="loading">
                                                        +							<span class="sr-only">Loading...</span>
                                                        +						</div>
                                                        +					</div>
                                                        +				</div>
                                                        +
                                                        +			</form>
                                                        +		</div>
                                                        +	</div>
                                                        +
                                                        +	<div class="d-flex my-5">
                                                        +		<a [routerLink]="['/login']" class="navigation">
                                                        +			Autentificare
                                                        +		</a>
                                                        +	</div>
                                                        +</section>
                                                        +
                                                        + +
                                                        +

                                                        + ./reset-password.component.scss +

                                                        +
                                                        +
                                                        + +
                                                        +
                                                        +
                                                        +
                                                        + Legend +
                                                        +
                                                        +
                                                        Html element +
                                                        +
                                                        +
                                                        Component +
                                                        +
                                                        +
                                                        Html element with directive +
                                                        +
                                                        +
                                                        + + +
                                                        + + + + + + + + + + + + + + + + + + + + + +
                                                        +
                                                        +

                                                        result-matching ""

                                                        +
                                                          +
                                                          +
                                                          +

                                                          No results matching ""

                                                          +
                                                          +
                                                          +
                                                          + +
                                                          +
                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ResourceListComponent.html b/documentation/components/ResourceListComponent.html new file mode 100644 index 0000000..c3eda87 --- /dev/null +++ b/documentation/components/ResourceListComponent.html @@ -0,0 +1,963 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                          +
                                                          + + +
                                                          +
                                                          + + + + + + + + +
                                                          +

                                                          +

                                                          File

                                                          +

                                                          +

                                                          + src/app/pages/resources/resources/components/resource-list/resource-list.component.ts +

                                                          + + + +

                                                          +

                                                          Implements

                                                          +

                                                          +

                                                          + OnInit +

                                                          + + +
                                                          +

                                                          Metadata

                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                          selectorapp-resource-list
                                                          styleUrls./resource-list.component.scss
                                                          templateUrl./resource-list.component.html
                                                          +
                                                          + +
                                                          +

                                                          Index

                                                          + + + + + + + + + + + + + + + + + + + + + +
                                                          +
                                                          Properties
                                                          +
                                                          + +
                                                          +
                                                          Methods
                                                          +
                                                          + +
                                                          +
                                                          + +
                                                          +

                                                          Constructor

                                                          + + + + + + + + + + + + + +
                                                          +constructor(resourceService: ResourcesService, route: ActivatedRoute, authService: AuthenticationService, router: Router) +
                                                          + +
                                                          +
                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                          NameTypeOptional
                                                          resourceService + ResourcesService + + No +
                                                          route + ActivatedRoute + + No +
                                                          authService + AuthenticationService + + No +
                                                          router + Router + + No +
                                                          +
                                                          +
                                                          +
                                                          + + + + + +
                                                          + +

                                                          + Methods +

                                                          + + + + + + + + + + + + + + + + + + + +
                                                          + + + + deleteSelf + + + +
                                                          +deleteSelf(resId: string) +
                                                          + +
                                                          +

                                                          delete the selected res

                                                          +
                                                          + +
                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                          NameTypeOptionalDescription
                                                          resId + string + + No + +

                                                          of the resource that will be deleted

                                                          + +
                                                          +
                                                          +
                                                          +
                                                          +
                                                          + Returns : void + +
                                                          +
                                                          + +
                                                          +
                                                          + + + + + + + + + + + + + + + + + + + +
                                                          + + + + getData + + + +
                                                          +getData() +
                                                          + +
                                                          +

                                                          get the resourses with the same slug from server

                                                          +
                                                          + +
                                                          + Returns : void + +
                                                          +
                                                          + + + + + + + + + + + + + + + + + + + +
                                                          + + + + ngOnInit + + + +
                                                          +ngOnInit() +
                                                          + +
                                                          + +
                                                          + Returns : void + +
                                                          +
                                                          + + + + + + + + + + + + + + + + + + + +
                                                          + + + + sortChanged + + + +
                                                          +sortChanged(pager: any) +
                                                          + +
                                                          +

                                                          when sorting we will set the pager and get data from server with the new pager

                                                          +
                                                          + +
                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                          NameTypeOptional
                                                          pager + any + + No +
                                                          +
                                                          +
                                                          +
                                                          +
                                                          + Returns : void + +
                                                          +
                                                          + +
                                                          +
                                                          +
                                                          +
                                                          + +

                                                          + Properties +

                                                          + + + + + + + + + + + + + + +
                                                          + + + + Public + authService + + +
                                                          + Type : AuthenticationService + +
                                                          + +
                                                          + + + + + + + + + + + + + + + + + +
                                                          + + + + data + + +
                                                          + Type : any + +
                                                          + +
                                                          +

                                                          data holds info about current resource

                                                          +
                                                          +
                                                          + + + + + + + + + + + + + + + + + +
                                                          + + + + loading + + +
                                                          + Default value : false +
                                                          + +
                                                          +

                                                          flag for HTML to display loading animation

                                                          +
                                                          +
                                                          + + + + + + + + + + + + + + + + + + + + +
                                                          + + + + pager + + +
                                                          + Type : any + +
                                                          + Default value : {} +
                                                          + +
                                                          +

                                                          pager for table

                                                          +
                                                          +
                                                          + + + + + + + + + + + + + + + + + + + + +
                                                          + + + + resources + + +
                                                          + Type : any[] + +
                                                          + Default value : null +
                                                          + +
                                                          +

                                                          list of resources with same slug

                                                          +
                                                          +
                                                          + + + + + + + + + + + + + + + + + +
                                                          + + + + resslug + + +
                                                          + Type : string + +
                                                          + +
                                                          +

                                                          var holds slug of the resource

                                                          +
                                                          +
                                                          +
                                                          + +
                                                          + + +
                                                          +
                                                          import { Component, OnInit } from '@angular/core';
                                                          +import { ResourcesService } from '@app/pages/resources/resources.service';
                                                          +import { ActivatedRoute, Router } from '@angular/router';
                                                          +import { AuthenticationService } from '@app/core';
                                                          +
                                                          +@Component({
                                                          +	selector: 'app-resource-list',
                                                          +	templateUrl: './resource-list.component.html',
                                                          +	styleUrls: ['./resource-list.component.scss']
                                                          +})
                                                          +export class ResourceListComponent implements OnInit {
                                                          +/**
                                                          +	 * data holds info about current resource
                                                          +	 */
                                                          +	data: any;
                                                          +	/**
                                                          +	 * list of resources with same slug
                                                          +	 */
                                                          +	resources: any[] = null;
                                                          +	/**
                                                          +	 * var holds slug of the resource
                                                          +	 */
                                                          +	resslug: string;
                                                          +	/**
                                                          +	 * pager for table
                                                          +	 */
                                                          +	pager: any = {};
                                                          +	/**
                                                          +	 * flag for HTML to display loading animation
                                                          +	 */
                                                          +	loading = false;
                                                          +
                                                          +	constructor(private resourceService: ResourcesService,
                                                          +		private route: ActivatedRoute,
                                                          +		public authService: AuthenticationService,
                                                          +		private router: Router) {
                                                          +		this.resslug = this.route.snapshot.paramMap.get('id');
                                                          +	}
                                                          +
                                                          +	ngOnInit() {
                                                          +		this.pager = this.resourceService.getPager();
                                                          +		this.getData();
                                                          +	}
                                                          +	/**
                                                          +	 * delete the selected res
                                                          +	 * @param {string} resId of the resource that will be deleted
                                                          +	 */
                                                          +	deleteSelf(resId: string) {
                                                          +		if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) {
                                                          +			this.loading = true;
                                                          +			this.resourceService.deleteResource(resId).subscribe((data) => {
                                                          +				this.loading = false;
                                                          +				this.router.navigateByUrl('/resources');
                                                          +			}, () => {
                                                          +				this.loading = false;
                                                          +			});
                                                          +		}
                                                          +	}
                                                          +	/**
                                                          +	 * when sorting we will set the pager and get data from server with the new pager
                                                          +	 */
                                                          +	sortChanged(pager: any) {
                                                          +		this.pager = pager;
                                                          +		this.getData();
                                                          +	}
                                                          +/**
                                                          +	 * get the resourses with the same slug from server
                                                          +	 */
                                                          +	getData() {
                                                          +		this.resourceService.getResourceBySlug(this.resslug, this.pager).subscribe((response: any) => {
                                                          +			this.data = response.data[0];
                                                          +			this.resources = response.data;
                                                          +			this.pager.total = response.pager.total;
                                                          +		});
                                                          +	}
                                                          +
                                                          +}
                                                          +
                                                          +
                                                          + +
                                                          +
                                                          <div class="container">
                                                          +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                          +        <app-back-button></app-back-button>
                                                          +    </nav>
                                                          +    <div class="ngo-details row">
                                                          +        <h3 class="col-md-12">Denumire resursă: {{data?.name}}</h3>
                                                          +    </div>
                                                          +    <div class="resource-list">
                                                          +
                                                          +        <div class="table-responsive-md">
                                                          +            <table class="table customTable table-sm">
                                                          +                <thead>
                                                          +                    <tr>
                                                          +                        <!-- sortable="name" (sort)="onSort($event)" -->
                                                          +                        <th scope="col" appTableSort [pager]="pager" [value]="1" (sortChanged)="sortChanged($event)">
                                                          +                            Organizație</th>
                                                          +                        <th scope="col" appTableSort [pager]="pager" [value]="2" (sortChanged)="sortChanged($event)">
                                                          +                            Cantitate</th>
                                                          +                        <th scope="col">
                                                          +                            Adresă</th>
                                                          +                        <th scope="col" appTableSort [pager]="pager" [value]="4" (sortChanged)="sortChanged($event)">
                                                          +                            Județ</th>
                                                          +                        <th scope="col" appTableSort [pager]="pager" [value]="5" (sortChanged)="sortChanged($event)">
                                                          +                            Data ultimului update</th>
                                                          +                    </tr>
                                                          +                </thead>
                                                          +                <tbody>
                                                          +                    <tr *ngFor="let res of resources">
                                                          +                        <td>{{res.organisation?.name ? res.organisation?.name : ''}}</td>
                                                          +                        <td>{{res.quantity}}</td>
                                                          +                        <td>{{res.address}}</td>
                                                          +                        <td>{{res.city?.name}}, {{res.county?.name}}</td>
                                                          +                        <td>{{res.updated_at | date: 'dd.MM.yyyy'}}</td>
                                                          +                        <td class="text-right">
                                                          +                            <div>
                                                          +                                <button *ngIf="res.organisation && res.organisation._id" class="btn btn-info mb-1" [routerLink]="['/organisations/id',res.organisation._id]">Detalii</button>
                                                          +                                <button *ngIf="authService.is('DSU','NGO') && !loading" (click)="deleteSelf(res._id)"
                                                          +                                    class="btn btn-danger mb-1 ml-1">
                                                          +                                    <span class="fa fa-trash-o"></span>&nbsp;Șterge
                                                          +                                </button>
                                                          +                                <div class="spinner-border text-danger m-1" role="status"
                                                          +                                    *ngIf="authService.is('DSU','NGO') && loading">
                                                          +                                    <span class="sr-only">Loading...</span>
                                                          +                                </div>
                                                          +                            </div>
                                                          +                        </td>
                                                          +                    </tr>
                                                          +                </tbody>
                                                          +            </table>
                                                          +            <ngb-pagination
                                                          +                    [maxSize]="5" [(page)]="pager.page" [pageSize]="pager.size" (pageChange)="getData()"
                                                          +                [collectionSize]="pager.total">
                                                          +            </ngb-pagination>
                                                          +        </div>
                                                          +    </div>
                                                          +
                                                          + +
                                                          +

                                                          + ./resource-list.component.scss +

                                                          +
                                                          +
                                                          + +
                                                          +
                                                          +
                                                          +
                                                          + Legend +
                                                          +
                                                          +
                                                          Html element +
                                                          +
                                                          +
                                                          Component +
                                                          +
                                                          +
                                                          Html element with directive +
                                                          +
                                                          +
                                                          + + +
                                                          + + + + + + + + + + + + + + + + + + + + + +
                                                          +
                                                          +

                                                          result-matching ""

                                                          +
                                                            +
                                                            +
                                                            +

                                                            No results matching ""

                                                            +
                                                            +
                                                            +
                                                            + +
                                                            +
                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ResourcedetailsComponent.html b/documentation/components/ResourcedetailsComponent.html new file mode 100644 index 0000000..fba4504 --- /dev/null +++ b/documentation/components/ResourcedetailsComponent.html @@ -0,0 +1,796 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                            +
                                                            + + +
                                                            +
                                                            + + + + + + + + +
                                                            +

                                                            +

                                                            File

                                                            +

                                                            +

                                                            + src/app/pages/resources/resources/components/resource-details/resource-details.component.ts +

                                                            + + + +

                                                            +

                                                            Implements

                                                            +

                                                            +

                                                            + OnInit +

                                                            + + +
                                                            +

                                                            Metadata

                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                            selectorapp-resource-details
                                                            styleUrls./resource-details.component.scss
                                                            templateUrl./resource-details.component.html
                                                            +
                                                            + +
                                                            +

                                                            Index

                                                            + + + + + + + + + + + + + + + + + + + + + +
                                                            +
                                                            Properties
                                                            +
                                                            + +
                                                            +
                                                            Methods
                                                            +
                                                            + +
                                                            +
                                                            + +
                                                            +

                                                            Constructor

                                                            + + + + + + + + + + + + + +
                                                            +constructor(resourceService: ResourcesService, route: ActivatedRoute, authService: AuthenticationService, router: Router, location: Location) +
                                                            + +
                                                            +
                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                            NameTypeOptional
                                                            resourceService + ResourcesService + + No +
                                                            route + ActivatedRoute + + No +
                                                            authService + AuthenticationService + + No +
                                                            router + Router + + No +
                                                            location + Location + + No +
                                                            +
                                                            +
                                                            +
                                                            + + + + + +
                                                            + +

                                                            + Methods +

                                                            + + + + + + + + + + + + + + + + + + + +
                                                            + + + + deleteSelf + + + +
                                                            +deleteSelf() +
                                                            + +
                                                            +

                                                            delete this resource

                                                            +
                                                            + +
                                                            + Returns : void + +
                                                            +
                                                            + + + + + + + + + + + + + + + + + + + +
                                                            + + + + edit + + + +
                                                            +edit() +
                                                            + +
                                                            +

                                                            edit this resource

                                                            +
                                                            + +
                                                            + Returns : void + +
                                                            +
                                                            + + + + + + + + + + + + + + + + + + + +
                                                            + + + + getData + + + +
                                                            +getData() +
                                                            + +
                                                            +

                                                            get resource data from server

                                                            +
                                                            + +
                                                            + Returns : void + +
                                                            +
                                                            + + + + + + + + + + + + + + + + + + + +
                                                            + + + + ngOnInit + + + +
                                                            +ngOnInit() +
                                                            + +
                                                            + +
                                                            + Returns : void + +
                                                            +
                                                            +
                                                            +
                                                            + +

                                                            + Properties +

                                                            + + + + + + + + + + + + + + +
                                                            + + + + Public + authService + + +
                                                            + Type : AuthenticationService + +
                                                            + +
                                                            + + + + + + + + + + + + + + + + + +
                                                            + + + + canEdit + + +
                                                            + Default value : true +
                                                            + +
                                                            +

                                                            flag for HTML to display edit button

                                                            +
                                                            +
                                                            + + + + + + + + + + + + + + + + + +
                                                            + + + + Public + data + + +
                                                            + Type : any + +
                                                            + +
                                                            +

                                                            store resource data

                                                            +
                                                            +
                                                            + + + + + + + + + + + + + + + + + +
                                                            + + + + loading + + +
                                                            + Default value : false +
                                                            + +
                                                            +

                                                            flag for HTML to display loading animation

                                                            +
                                                            +
                                                            +
                                                            + +
                                                            + + +
                                                            +
                                                            import { Component, OnInit } from '@angular/core';
                                                            +import { ResourcesService } from '@app/pages/resources/resources.service';
                                                            +import { ActivatedRoute, Router } from '@angular/router';
                                                            +import { AuthenticationService } from '@app/core';
                                                            +import { Location } from '@angular/common';
                                                            +
                                                            +
                                                            +@Component({
                                                            +	selector: 'app-resource-details',
                                                            +	templateUrl: './resource-details.component.html',
                                                            +	styleUrls: ['./resource-details.component.scss']
                                                            +})
                                                            +export class ResourcedetailsComponent implements OnInit {
                                                            +	/**
                                                            +	 * store resource data
                                                            +	 */
                                                            +	public data: any;
                                                            +	/**
                                                            +	 * flag for HTML to display edit button
                                                            +	 */
                                                            +	canEdit = true;
                                                            +	/**
                                                            +	 * flag for HTML to display loading animation
                                                            +	 */
                                                            +	loading = false;
                                                            +	constructor(private resourceService: ResourcesService,
                                                            +		private route: ActivatedRoute,
                                                            +		public authService: AuthenticationService,
                                                            +		private router: Router,
                                                            +		private location: Location) { }
                                                            +
                                                            +	ngOnInit() {
                                                            +		this.getData();
                                                            +	}
                                                            +/**
                                                            +	 * edit this resource
                                                            +	 */
                                                            +	edit() {
                                                            +		this.router.navigateByUrl(`/resources/edit/${this.data._id}`);
                                                            +	}
                                                            +/**
                                                            +	 * delete this resource
                                                            +	 */
                                                            +	deleteSelf() {
                                                            +		if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) {
                                                            +			this.loading = true;
                                                            +			this.resourceService.deleteResource(this.data._id).subscribe(() => {
                                                            +				this.loading = false;
                                                            +				this.location.back();
                                                            +			}, () => {
                                                            +				this.loading = false;
                                                            +			});
                                                            +		}
                                                            +	}
                                                            +/**
                                                            +	 * get resource data from server
                                                            +	 */
                                                            +
                                                            +	getData() {
                                                            +		this.resourceService.getResource(this.route.snapshot.paramMap.get('id')).subscribe((data) => {
                                                            +			this.data = data;
                                                            +
                                                            +			this.canEdit = this.authService.is('DSU') ||
                                                            +			(this.authService.is('NGO') && (this.data.organisation._id === this.authService.user.organisation._id));
                                                            +		});
                                                            +	}
                                                            +
                                                            +}
                                                            +
                                                            +
                                                            + +
                                                            +
                                                            <div class="container">
                                                            +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                            +        <app-back-button></app-back-button>
                                                            +            <div class="mx-2 my-sm-0">
                                                            +                <button *ngIf="canEdit && !loading" (click)="deleteSelf()" class="btn btn-danger mx-2 my-sm-0"><span
                                                            +                    class="fa fa-trash-o"></span>&nbsp;&nbsp;Șterge Resursa</button>
                                                            +                <div class="spinner-border text-danger" role="status" *ngIf="canEdit && loading">
                                                            +                    <span class="sr-only">Loading...</span>
                                                            +                </div>
                                                            +                <button (click)="edit()" class="mx-2 btn btn-info" *ngIf="canEdit"><span class="fa fa-edit"></span>&nbsp;&nbsp;Modifică</button>
                                                            +                <!-- <button></button> -->
                                                            +            </div>
                                                            +    </nav>
                                                            +    <div class="ngo-details row">
                                                            +            <h3 class="col-md-12">Nume resursa: {{data?.name}}</h3>
                                                            +
                                                            +            <span class="col-md-12"><b>Organizație: </b> {{data?.organisation?.name || 'Neafiliat'}}</span>
                                                            +            <span class="col-md-12"><b>Localizare: </b>{{data?.city.name}}, {{data?.county.name}}</span>
                                                            +            <span *ngIf="data?.address" class="col-md-12"><b>Adresa: </b> {{data?.address }}</span>
                                                            +            <span class="col-md-12"><b>Tip Resursa: </b> {{data?.resource_type }}</span>
                                                            +            <span class="col-md-12"><b>Comentarii: </b> {{data?.comments}}</span>
                                                            +            <div class="col-md-12">
                                                            +                <span><b>Data ultimului update: </b> {{ (data?.updated_at | date: 'dd.MM.yyyy') || 'Nu există' }}</span>
                                                            +            </div>
                                                            +            <div class="col-md-12 mt-3 ml-3">
                                                            +                <h4> Categorii: </h4>
                                                            +                <span *ngFor = "let elem of data?.categories">
                                                            +                    {{elem.name}}
                                                            +                </span>
                                                            +            </div>
                                                            +    </div>
                                                            +</div>
                                                            +
                                                            + +
                                                            +

                                                            + ./resource-details.component.scss +

                                                            +
                                                            
                                                            +
                                                            +
                                                            + +
                                                            +
                                                            +
                                                            +
                                                            + Legend +
                                                            +
                                                            +
                                                            Html element +
                                                            +
                                                            +
                                                            Component +
                                                            +
                                                            +
                                                            Html element with directive +
                                                            +
                                                            +
                                                            + + +
                                                            + + + + + + + + + + + + + + + + + + + + + +
                                                            +
                                                            +

                                                            result-matching ""

                                                            +
                                                              +
                                                              +
                                                              +

                                                              No results matching ""

                                                              +
                                                              +
                                                              +
                                                              + +
                                                              +
                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ResourcesComponent.html b/documentation/components/ResourcesComponent.html new file mode 100644 index 0000000..97f8022 --- /dev/null +++ b/documentation/components/ResourcesComponent.html @@ -0,0 +1,353 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                              +
                                                              + + +
                                                              +
                                                              + + + + + + + + +
                                                              +

                                                              +

                                                              File

                                                              +

                                                              +

                                                              + src/app/pages/resources/resources/resources.component.ts +

                                                              + + + +

                                                              +

                                                              Implements

                                                              +

                                                              +

                                                              + OnInit +

                                                              + + +
                                                              +

                                                              Metadata

                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                              selectorapp-resources
                                                              styleUrls./resources.component.scss
                                                              templateUrl./resources.component.html
                                                              +
                                                              + +
                                                              +

                                                              Index

                                                              + + + + + + + + + + + + + + + +
                                                              +
                                                              Methods
                                                              +
                                                              + +
                                                              +
                                                              + +
                                                              +

                                                              Constructor

                                                              + + + + + + + + + + + + + +
                                                              +constructor() +
                                                              + +
                                                              +

                                                              wrapper for the resources pages. acts as frame

                                                              +
                                                              +
                                                              +
                                                              + + + + + +
                                                              + +

                                                              + Methods +

                                                              + + + + + + + + + + + + + + + + + + + +
                                                              + + + + ngOnInit + + + +
                                                              +ngOnInit() +
                                                              + +
                                                              + +
                                                              + Returns : void + +
                                                              +
                                                              +
                                                              + +
                                                              + + +
                                                              +
                                                              import { Component, OnInit } from '@angular/core';
                                                              +
                                                              +@Component({
                                                              +	selector: 'app-resources',
                                                              +	templateUrl: './resources.component.html',
                                                              +	styleUrls: ['./resources.component.scss']
                                                              +})
                                                              +
                                                              +export class ResourcesComponent implements OnInit {
                                                              +	/**
                                                              +	 * wrapper for the resources pages. acts as frame
                                                              +	 */
                                                              +	constructor() { }
                                                              +
                                                              +	ngOnInit() {
                                                              +	}
                                                              +
                                                              +}
                                                              +
                                                              +
                                                              + +
                                                              +
                                                              <router-outlet></router-outlet>
                                                              +
                                                              + +
                                                              +

                                                              + ./resources.component.scss +

                                                              +
                                                              +
                                                              + +
                                                              +
                                                              +
                                                              +
                                                              + Legend +
                                                              +
                                                              +
                                                              Html element +
                                                              +
                                                              +
                                                              Component +
                                                              +
                                                              +
                                                              Html element with directive +
                                                              +
                                                              +
                                                              + + +
                                                              + + + + + + + + + + + + + + + + + + + + + +
                                                              +
                                                              +

                                                              result-matching ""

                                                              +
                                                                +
                                                                +
                                                                +

                                                                No results matching ""

                                                                +
                                                                +
                                                                +
                                                                + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/ResourcesdashboardComponent.html b/documentation/components/ResourcesdashboardComponent.html new file mode 100644 index 0000000..3bf5e9d --- /dev/null +++ b/documentation/components/ResourcesdashboardComponent.html @@ -0,0 +1,1643 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                +
                                                                + + +
                                                                +
                                                                + + + + + + + + +
                                                                +

                                                                +

                                                                File

                                                                +

                                                                +

                                                                + src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.ts +

                                                                + + + +

                                                                +

                                                                Implements

                                                                +

                                                                +

                                                                + OnInit +

                                                                + + +
                                                                +

                                                                Metadata

                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                selectorapp-resources-dashboard
                                                                styleUrls./resources-dashboard.component.scss
                                                                templateUrl./resources-dashboard.component.html
                                                                +
                                                                + +
                                                                +

                                                                Index

                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                +
                                                                Properties
                                                                +
                                                                + +
                                                                +
                                                                Methods
                                                                +
                                                                + +
                                                                +
                                                                + +
                                                                +

                                                                Constructor

                                                                + + + + + + + + + + + + + +
                                                                +constructor(resourceService: ResourcesService, filterService: FiltersService, citiesandCounties: CitiesCountiesService, breakpointObserver: BreakpointObserver, authService: AuthenticationService, router: Router) +
                                                                + +
                                                                +
                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                NameTypeOptional
                                                                resourceService + ResourcesService + + No +
                                                                filterService + FiltersService + + No +
                                                                citiesandCounties + CitiesCountiesService + + No +
                                                                breakpointObserver + BreakpointObserver + + No +
                                                                authService + AuthenticationService + + No +
                                                                router + Router + + No +
                                                                +
                                                                +
                                                                +
                                                                + + + + + +
                                                                + +

                                                                + Methods +

                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + addresource + + + +
                                                                +addresource() +
                                                                + +
                                                                +

                                                                send user to add resource. if is NGO the ngo id is static.

                                                                +
                                                                + +
                                                                + Returns : void + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + filterChanged + + + +
                                                                +filterChanged(id?: number) +
                                                                + +
                                                                +

                                                                filter callback. Filters added to pager and then a request is made

                                                                +
                                                                + +
                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                NameTypeOptionalDescription
                                                                id + number + + Yes + +

                                                                the index in the pager filters and filters Selected array

                                                                + +
                                                                +
                                                                +
                                                                +
                                                                +
                                                                + Returns : void + +
                                                                +
                                                                + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + getData + + + +
                                                                +getData() +
                                                                + +
                                                                +

                                                                get data from server and store localy

                                                                +
                                                                + +
                                                                + Returns : void + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + ngOnInit + + + +
                                                                +ngOnInit() +
                                                                + +
                                                                + +
                                                                + Returns : void + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + searchChanged + + + +
                                                                +searchChanged(pager: any) +
                                                                + +
                                                                +

                                                                search callback. Filters added to pager and then a request is made

                                                                +
                                                                + +
                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                NameTypeOptionalDescription
                                                                pager + any + + No + +

                                                                the pager with the search filer added

                                                                + +
                                                                +
                                                                +
                                                                +
                                                                +
                                                                + Returns : void + +
                                                                +
                                                                + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + sortChanged + + + +
                                                                +sortChanged(pager: any) +
                                                                + +
                                                                +

                                                                sort callback. Filters added to pager and then a request is made

                                                                +
                                                                + +
                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                NameTypeOptionalDescription
                                                                pager + any + + No + +

                                                                the pager with the search filer added

                                                                + +
                                                                +
                                                                +
                                                                +
                                                                +
                                                                + Returns : void + +
                                                                +
                                                                + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + switchtoblock + + + +
                                                                +switchtoblock() +
                                                                + +
                                                                +

                                                                set flag for HTML to grid view

                                                                +
                                                                + +
                                                                + Returns : void + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + switchtolist + + + +
                                                                +switchtolist() +
                                                                + +
                                                                +

                                                                set flag for HTML to list view

                                                                +
                                                                + +
                                                                + Returns : void + +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + +
                                                                + + + + viewdetails + + + +
                                                                +viewdetails(res: any) +
                                                                + +
                                                                +

                                                                view details about resource by slug if DSU and by id if NGO

                                                                +
                                                                + +
                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                NameTypeOptionalDescription
                                                                res + any + + No + +

                                                                the resource to be viewed

                                                                + +
                                                                +
                                                                +
                                                                +
                                                                +
                                                                + Returns : void + +
                                                                +
                                                                + +
                                                                +
                                                                +
                                                                +
                                                                + +

                                                                + Properties +

                                                                + + + + + + + + + + + + + + +
                                                                + + + + Public + authService + + +
                                                                + Type : AuthenticationService + +
                                                                + +
                                                                + + + + + + + + + + + + + + +
                                                                + + + + Public + breakpointObserver + + +
                                                                + Type : BreakpointObserver + +
                                                                + +
                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                + + + + categoryFilterValues + + +
                                                                + Type : any[] + +
                                                                + Default value : [] +
                                                                + +
                                                                +

                                                                values to select from when filtering

                                                                +
                                                                +
                                                                + + + + + + + + + + + + + + + + + +
                                                                + + + + displayBlock + + +
                                                                + Default value : false +
                                                                + +
                                                                +

                                                                flag for HTML to know how to display data

                                                                +
                                                                +
                                                                + + + + + + + + + + + + + + + + + +
                                                                + + + + locationFilterValues + + +
                                                                + Type : any[] + +
                                                                + Default value : [] +
                                                                + +
                                                                + + + + + + + + + + + + + + + + + +
                                                                + + + + navigationExtras + + +
                                                                + Type : any + +
                                                                + +
                                                                +

                                                                navigation extras will be sent to add resource if user is ngo.

                                                                +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                + + + + pager + + +
                                                                + Type : any + +
                                                                + Default value : {} +
                                                                + +
                                                                +

                                                                pager for the resources table

                                                                +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                + + + + propertyMap + + +
                                                                + Type : object + +
                                                                + Default value : { + '_id': 'id', + 'parent_id': 'parent_id' + } +
                                                                + +
                                                                +

                                                                match the id with _id and display parent_id in order to indent the apropriate subcategories

                                                                +
                                                                +
                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                + + + + resourcesData + + +
                                                                + Type : any[] + +
                                                                + Default value : [] +
                                                                + +
                                                                +

                                                                store the resources list

                                                                +
                                                                +
                                                                + + + + + + + + + + + + + + + + + +
                                                                + + + + selected + + +
                                                                + Default value : new Array(2) +
                                                                + +
                                                                +

                                                                selected filters array

                                                                +
                                                                +
                                                                +
                                                                + +
                                                                + + +
                                                                +
                                                                import { Component, OnInit } from '@angular/core';
                                                                +import { ResourcesService } from '../../../resources.service';
                                                                +
                                                                +import { FiltersService, CitiesCountiesService } from '../../../../../core/service';
                                                                +import { BreakpointObserver } from '@angular/cdk/layout';
                                                                +import { AuthenticationService } from '@app/core';
                                                                +import { Router } from '@angular/router';
                                                                +
                                                                +@Component({
                                                                +	selector: 'app-resources-dashboard',
                                                                +	templateUrl: './resources-dashboard.component.html',
                                                                +	styleUrls: ['./resources-dashboard.component.scss']
                                                                +})
                                                                +export class ResourcesdashboardComponent implements OnInit {
                                                                +	/**
                                                                +	 * store the resources list
                                                                +	 */
                                                                +	resourcesData: any[] = [];
                                                                +	/**
                                                                +	 * pager for the resources table
                                                                +	 */
                                                                +	pager: any = {};
                                                                +	/**
                                                                +	 * flag for HTML to know how to display data
                                                                +	 */
                                                                +	displayBlock = false;
                                                                +		/**
                                                                +	 *values to select from when filtering
                                                                +	 */
                                                                +	categoryFilterValues: any[] = [];
                                                                +	locationFilterValues: any[] = [];
                                                                +	/**
                                                                +	 * selected filters array
                                                                +	 */
                                                                +	selected = new Array(2);
                                                                +	/**
                                                                +	 * match the id with _id and display parent_id in order to indent the apropriate subcategories
                                                                +	 */
                                                                +	propertyMap = {
                                                                +		'_id': 'id',
                                                                +		'parent_id': 'parent_id'
                                                                +	};
                                                                +		/**
                                                                +	 * navigation extras will be sent to add resource if user is ngo.
                                                                +	 */
                                                                +	navigationExtras: any;
                                                                +	constructor(private resourceService: ResourcesService,
                                                                +		private filterService: FiltersService,
                                                                +		private citiesandCounties: CitiesCountiesService,
                                                                +		public breakpointObserver: BreakpointObserver,
                                                                +		public authService: AuthenticationService,
                                                                +		private router: Router) { }
                                                                +
                                                                +	ngOnInit() {
                                                                +		this.resourceService.setPager();
                                                                +		this.pager = this.resourceService.getPager();
                                                                +
                                                                +		this.getData();
                                                                +	/**
                                                                +	 * get filterable values
                                                                +	 */
                                                                +		this.filterService.getCategoryFilters().subscribe((data) => {
                                                                +			this.categoryFilterValues = data.map((x: any) => {
                                                                +				const parent = data.find((y: any) => y._id === x.parent_id);
                                                                +				return {
                                                                +					id: x._id,
                                                                +					name: x.name,
                                                                +					parent_id: x.parent_id,
                                                                +					pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null),
                                                                +					level: x.parent_id === '0' ? 0 : 1
                                                                +				};
                                                                +			});
                                                                +		});
                                                                +
                                                                +		this.citiesandCounties.getCounties('').subscribe((response: any) => {
                                                                +			const aux = response;
                                                                +			aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id);
                                                                +			this.locationFilterValues = aux;
                                                                +		});
                                                                +	/**
                                                                +	 *observe screen chage and and switch to grid view if screen is too smal
                                                                +	 */
                                                                +		this.breakpointObserver
                                                                +			.observe(['(max-width: 768px)'])
                                                                +			.subscribe(result => {
                                                                +				if (result.matches) {
                                                                +					this.switchtoblock();
                                                                +				}
                                                                +			});
                                                                +	}
                                                                +	/**
                                                                +	 * get data from server and store localy
                                                                +
                                                                +	 */
                                                                +	getData() {
                                                                +		this.resourceService.getResources(this.pager).subscribe((data) => {
                                                                +			this.resourcesData = data.data;
                                                                +			this.pager.total = data.pager.total;
                                                                +		});
                                                                +	}
                                                                +	/**
                                                                +	 * send user to add resource. if is NGO the ngo id is static.
                                                                +	 */
                                                                +	addresource() {
                                                                +		if (this.authService.is('NGO')) {
                                                                +			const navigationExtras = {
                                                                +				state: {
                                                                +					ngo: {
                                                                +						// TO-DO: extragere informatiilor din contu utilizatorului
                                                                +						name: this.authService.user.organisation.name,
                                                                +						ngoid: this.authService.user.organisation._id
                                                                +					}
                                                                +				}
                                                                +			};
                                                                +			this.router.navigateByUrl('/resources/add', navigationExtras);
                                                                +		} else {
                                                                +			this.router.navigate(['resources/add']);
                                                                +		}
                                                                +	}
                                                                +	/**
                                                                +	 * sort callback. Filters added to pager and then a request is made
                                                                +	 * @param {any} pager the pager with the search filer added
                                                                +	 */
                                                                +	sortChanged(pager: any) {
                                                                +		this.pager = pager;
                                                                +		this.getData();
                                                                +	}
                                                                +	/**
                                                                +	 * search callback. Filters added to pager and then a request is made
                                                                +	 * @param {any} pager the pager with the search filer added
                                                                +	 */
                                                                +	searchChanged(pager: any) {
                                                                +		this.pager = pager;
                                                                +		this.getData();
                                                                +	}
                                                                +	/**
                                                                +	 * filter callback. Filters added to pager and then a request is made
                                                                +	 * @param {number} id the index in the pager filters and filters Selected array
                                                                +	 */
                                                                +	filterChanged(id?: number) {
                                                                +		console.log(this.selected);
                                                                +		this.pager.filters[id] = this.selected[id].map((elem: any) => elem.id).join(',');
                                                                +		this.getData();
                                                                +	}
                                                                +	/**
                                                                +	 * view details about resource by slug if DSU and by id if NGO
                                                                +	 * @param {any} res the resource to be viewed
                                                                +	 */
                                                                +	viewdetails(res: any) {
                                                                +		if (this.authService.is('DSU')) {
                                                                +			this.router.navigateByUrl(`/resources/name/${res.slug}`);
                                                                +		} else {
                                                                +			this.router.navigateByUrl(`/resources/id/${res.resources[0]._id}`);
                                                                +		}
                                                                +	}
                                                                +	/**
                                                                +	 * set flag for HTML to list view
                                                                +	 */
                                                                +	switchtolist() {
                                                                +		this.displayBlock = false;
                                                                +	}
                                                                +
                                                                +	/**
                                                                +	 * set flag for HTML to grid view
                                                                +	 */
                                                                +	switchtoblock() {
                                                                +		this.displayBlock = true;
                                                                +	}
                                                                +}
                                                                +
                                                                +
                                                                + +
                                                                +
                                                                <div class="container">
                                                                +	<nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                                +		<h4 class="navtitle mb-2"> Resurse </h4>
                                                                +		<div class="form-inline ml-auto">
                                                                +			<app-table-search [pager]="pager" id=2 (searchChanged)="searchChanged($event)"></app-table-search>
                                                                +			<div class="btn-group btn-group-toggle m-2 hidden-radio" ngbRadioGroup name="radioBasic"
                                                                +				[(ngModel)]="displayBlock">
                                                                +				<label ngbButtonLabel (click)="switchtoblock()" class="btn btn-primary">
                                                                +					<input ngbButton type="radio" [value]="true"><span class="fa fa-th-large"></span>
                                                                +				</label>
                                                                +				<label ngbButtonLabel (click)="switchtolist()" class="btn btn-primary">
                                                                +					<input ngbButton type="radio" [value]="false"><span class="fa fa-bars"></span>
                                                                +				</label>
                                                                +			</div>
                                                                +			<button (click)="addresource()" class="add-btn btn-adjusting btn btn-info btn-rounded m-2">
                                                                +				<span class="fa fa-plus-circle"></span>&nbsp;&nbsp;Adaugă Resursă
                                                                +			</button>
                                                                +		</div>
                                                                +	</nav>
                                                                +	<div class="filters my-3 mx-30px row">
                                                                +		<span class="padding-rem">Total: {{pager.total}}</span>
                                                                +		<span class="padding-rem">&nbsp;&nbsp;</span>
                                                                +		<span class="padding-rem">Filtrează după: &nbsp;</span>
                                                                +		<ngx-multiselect class="category"
                                                                +			[(ngModel)]="selected[0]"
                                                                +			[options]="categoryFilterValues"
                                                                +			(showMaxLables) = "1"
                                                                +			(onItemClick)="filterChanged(0)"
                                                                +			(onSelectNone)="filterChanged(0)"
                                                                +			(onSelectAll)="filterChanged(0)"
                                                                +			[propertyMap]="propertyMap"	>
                                                                +			<ng-template let-option="option">
                                                                +				<span [ngClass]="{'pl-3': option.parent_id!=='0'}">
                                                                +				   {{option.name}} 
                                                                +				</span>
                                                                +			 </ng-template>
                                                                +		</ngx-multiselect>
                                                                +		<span class="vertical-bar">&nbsp;</span>
                                                                +		<ngx-multiselect
                                                                +			class="location"
                                                                +			[(ngModel)]="selected[1]"
                                                                +			showMaxLables = "1"
                                                                +			[options]="locationFilterValues"
                                                                +			(onItemClick)="filterChanged(1)"
                                                                +			(onSelectNone)="filterChanged(1)"
                                                                +			(onSelectAll)="filterChanged(1)">
                                                                +		</ngx-multiselect>
                                                                +	</div>
                                                                +	<div *ngIf="displayBlock; else displayList" class="cardlist row mt-5">
                                                                +			<div *ngFor="let elem of resourcesData" class="d-flex col-md-6 col-sm-12 col-lg-4">
                                                                +				<div class="card mb-2" style="flex-grow: 1" (click)="viewdetails(elem)">
                                                                +					<div class="card-body">
                                                                +						<a class="btn btn-fix text-left">
                                                                +							<h4 class="card-title">{{elem.name}}</h4>
                                                                +							<div class="card-text row">
                                                                +								<div *ngIf="elem.categories" class="col-md-12 d-flex">
                                                                +									<i class="fa fa-list"></i>
                                                                +									<span *ngFor="let cat of elem.categories;let isLast=last">
                                                                +										&nbsp;{{cat?.name}}{{isLast ? '' : ', '}}
                                                                +									</span>
                                                                +								</div>
                                                                +								
                                                                +								<span class="col-md-12">
                                                                +									<i class="fa fa-hashtag"></i>
                                                                +									{{elem.quantity}}
                                                                +								</span>
                                                                +								<span class="col-md-12">
                                                                +									<i class="fa fa-building"></i>
                                                                +									{{elem.organisations_total}}
                                                                +									<!-- TODO add actual organisations number -->
                                                                +								</span>
                                                                +							</div>
                                                                +						</a>
                                                                +					</div>
                                                                +				</div>
                                                                +			</div>
                                                                +		<div class="col-md-12  mx-30px">
                                                                +			<ngb-pagination
                                                                +                    [maxSize]="5"
                                                                +				[(page)]="pager.page"
                                                                +				[pageSize]="pager.size"
                                                                +				(pageChange)="getData()"
                                                                +				[collectionSize]="pager.total">
                                                                +			</ngb-pagination>
                                                                +		</div>
                                                                +	</div>
                                                                +	<ng-template #displayList>
                                                                +		<div class="table-responsive">
                                                                +			<table class="table customTable table-sm">
                                                                +				<thead>
                                                                +					<tr>
                                                                +						<!-- sortable="name" (sort)="onSort($event)" -->
                                                                +						<th scope="col" appTableSort [pager]="pager" [value]="1" (sortChanged)="sortChanged($event)">
                                                                +							Nume Resursă</th>
                                                                +						<th scope="col" appTableSort [pager]="pager" [value]="2" (sortChanged)="sortChanged($event)">
                                                                +							Categorie</th>
                                                                +						<th scope="col" appTableSort [pager]="pager" [value]="3" (sortChanged)="sortChanged($event)">
                                                                +							Cantitate</th>
                                                                +						<th scope="col" appTableSort [pager]="pager" [value]="4" (sortChanged)="sortChanged($event)">
                                                                +							Nr. Organizații</th>
                                                                +					</tr>
                                                                +				</thead>
                                                                +				<tbody>
                                                                +					<tr *ngFor="let res of resourcesData">
                                                                +						<!-- <tr> -->
                                                                +						<td>{{res.name}}</td>
                                                                +						<td>
                                                                +							<div *ngIf="res.categories">
                                                                +								<div  *ngFor="let cat of res.categories;let isLast=last">
                                                                +									{{cat?.name}}{{isLast ? '' : ', '}}
                                                                +								</div>
                                                                +							</div>
                                                                +						</td>
                                                                +						<td>{{res.quantity}}</td>
                                                                +						<td>{{res.organisations_total}}</td>
                                                                +						<!-- <td>{{res.updated_at}}</td> -->
                                                                +						<td *ngIf="authService.is('DSU')" class="text-right"><button class="btn btn-info"
                                                                +								[routerLink]="['name',res.slug]">Vezi detalii</button></td>
                                                                +						<td *ngIf="authService.is('NGO')" class="text-right"><button class="btn btn-info"
                                                                +								[routerLink]="['id',res.resources[0]._id]">Vezi detalii</button></td>
                                                                +						<!-- <td *ngIf="authService.is('NGO')" class="text-right"><button class="btn btn-danger"
                                                                +							(click)="deleteres(res)">Șterge</button></td> -->
                                                                +					</tr>
                                                                +
                                                                +				</tbody>
                                                                +			</table>
                                                                +		</div>
                                                                +		<ngb-pagination
                                                                +                    [maxSize]="5" [(page)]="pager.page" [pageSize]="pager.size" (pageChange)="getData()"
                                                                +			[collectionSize]="pager.total">
                                                                +		</ngb-pagination>
                                                                +	</ng-template>
                                                                +</div>
                                                                +
                                                                + +
                                                                +

                                                                + ./resources-dashboard.component.scss +

                                                                +
                                                                
                                                                +.card {
                                                                +    background-color: transparent;
                                                                +    margin: 10px;
                                                                +}
                                                                +
                                                                +.card-body {
                                                                +    padding: 0.25rem;
                                                                +    background-color:white;
                                                                +}
                                                                +
                                                                +@media (max-width: 425px) {
                                                                +    .container {
                                                                +      width: 100%;
                                                                +      max-width: none;
                                                                +    }
                                                                +}
                                                                +
                                                                +@media (max-width: 1199px) {
                                                                +    .btn-adjusting {
                                                                +        width: min-content;       
                                                                +    }
                                                                +}
                                                                +::ng-deep .category{
                                                                +    .none-selected:before {
                                                                +        content: 'Categorie' !important;
                                                                +    }
                                                                +}
                                                                +.card-text {
                                                                +	
                                                                +	span {
                                                                +		line-height: 1;
                                                                +		height: auto;
                                                                +		display: block;
                                                                +		overflow: initial;
                                                                +		overflow-wrap: initial;
                                                                +		word-break:initial;
                                                                +    }
                                                                +}
                                                                +
                                                                + +
                                                                +
                                                                +
                                                                +
                                                                + Legend +
                                                                +
                                                                +
                                                                Html element +
                                                                +
                                                                +
                                                                Component +
                                                                +
                                                                +
                                                                Html element with directive +
                                                                +
                                                                +
                                                                + + +
                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                +
                                                                +

                                                                result-matching ""

                                                                +
                                                                  +
                                                                  +
                                                                  +

                                                                  No results matching ""

                                                                  +
                                                                  +
                                                                  +
                                                                  + +
                                                                  +
                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/SignupComponent.html b/documentation/components/SignupComponent.html new file mode 100644 index 0000000..02ae6c3 --- /dev/null +++ b/documentation/components/SignupComponent.html @@ -0,0 +1,682 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                  +
                                                                  + + +
                                                                  +
                                                                  + + + + + + + + +
                                                                  +

                                                                  +

                                                                  File

                                                                  +

                                                                  +

                                                                  + src/app/pages/authentication/signup/signup.component.ts +

                                                                  + + + +

                                                                  +

                                                                  Implements

                                                                  +

                                                                  +

                                                                  + OnInit +

                                                                  + + +
                                                                  +

                                                                  Metadata

                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                  selectorapp-signup
                                                                  styleUrls./signup.component.scss
                                                                  templateUrl./signup.component.html
                                                                  +
                                                                  + +
                                                                  +

                                                                  Index

                                                                  + + + + + + + + + + + + + + + + + + + + + +
                                                                  +
                                                                  Properties
                                                                  +
                                                                  + +
                                                                  +
                                                                  Methods
                                                                  +
                                                                  + +
                                                                  +
                                                                  + +
                                                                  +

                                                                  Constructor

                                                                  + + + + + + + + + + + + + +
                                                                  +constructor(router: Router, formBuilder: FormBuilder, authenticationService: AuthenticationService) +
                                                                  + +
                                                                  +

                                                                  Component to show signup page

                                                                  +
                                                                  +
                                                                  + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                  NameTypeOptional
                                                                  router + Router + + No +
                                                                  formBuilder + FormBuilder + + No +
                                                                  authenticationService + AuthenticationService + + No +
                                                                  +
                                                                  +
                                                                  +
                                                                  + + + + + +
                                                                  + +

                                                                  + Methods +

                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                  + + + + Private + createForm + + + +
                                                                  + + createForm() +
                                                                  + +
                                                                  +

                                                                  Sign up form definition for reactive forms

                                                                  +
                                                                  + +
                                                                  + Returns : void + +
                                                                  +
                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                  + + + + ngOnInit + + + +
                                                                  +ngOnInit() +
                                                                  + +
                                                                  +

                                                                  Angular ng on init

                                                                  +
                                                                  + +
                                                                  + Returns : void + +
                                                                  +
                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                  + + + + signup + + + +
                                                                  +signup() +
                                                                  + +
                                                                  +

                                                                  Signup method called on form submit

                                                                  +
                                                                  + +
                                                                  + Returns : void + +
                                                                  +
                                                                  +
                                                                  +
                                                                  + +

                                                                  + Properties +

                                                                  + + + + + + + + + + + + + + +
                                                                  + + + + isLoading + + +
                                                                  + Default value : false +
                                                                  + +
                                                                  + + + + + + + + + + + + + + +
                                                                  + + + + Public + router + + +
                                                                  + Type : Router + +
                                                                  + +
                                                                  + + + + + + + + + + + + + + + + + +
                                                                  + + + + signupForm + + +
                                                                  + Type : FormGroup + +
                                                                  + +
                                                                  +

                                                                  Signup internal variables

                                                                  +
                                                                  +
                                                                  +
                                                                  + +
                                                                  + + +
                                                                  +
                                                                  import { Component, OnInit } from '@angular/core';
                                                                  +import { FormBuilder, FormGroup, Validators } from '@angular/forms';
                                                                  +import { Router } from '@angular/router';
                                                                  +import { AuthenticationService } from '@app/core';
                                                                  +import { finalize } from 'rxjs/operators';
                                                                  +import { EmailValidation } from '@app/core/validators/email-validation';
                                                                  +import { PhoneValidation } from '@app/core/validators/phone-validation';
                                                                  +
                                                                  +@Component({
                                                                  +	selector: 'app-signup',
                                                                  +	templateUrl: './signup.component.html',
                                                                  +	styleUrls: ['./signup.component.scss']
                                                                  +})
                                                                  +export class SignupComponent implements OnInit {
                                                                  +	/**
                                                                  +	 * Signup internal variables
                                                                  +	 */
                                                                  +	signupForm: FormGroup;
                                                                  +	isLoading = false;
                                                                  +	/**
                                                                  +	* Component to show signup page
                                                                  +	*/
                                                                  +	constructor(
                                                                  +		public router: Router,
                                                                  +		private formBuilder: FormBuilder,
                                                                  +		private authenticationService: AuthenticationService
                                                                  +	) {
                                                                  +		this.createForm();
                                                                  +	}
                                                                  +
                                                                  +	/**
                                                                  +	 * Angular ng on init
                                                                  +	 */
                                                                  +	ngOnInit() {}
                                                                  +
                                                                  +
                                                                  +	/**
                                                                  +	 * Signup method called on form submit
                                                                  +	 */
                                                                  +	signup() {
                                                                  +		this.isLoading = true;
                                                                  +		this.authenticationService
                                                                  +			.signup(this.signupForm.value)
                                                                  +			.pipe(
                                                                  +				finalize(() => {
                                                                  +					this.signupForm.markAsPristine();
                                                                  +					this.isLoading = false;
                                                                  +				})
                                                                  +			)
                                                                  +			.subscribe(
                                                                  +				(user: Authentication.User) => {
                                                                  +					console.log(user);
                                                                  +					this.router.navigate(['/login']);
                                                                  +				},
                                                                  +				(error: any) => {
                                                                  +					console.log('Signup error: ', error);
                                                                  +				}
                                                                  +			);
                                                                  +	}
                                                                  +
                                                                  +	/**
                                                                  +	 * Sign up form definition for reactive forms
                                                                  +	 */
                                                                  +	private createForm() {
                                                                  +		this.signupForm = this.formBuilder.group({
                                                                  +			firstName: ['', [Validators.required]],
                                                                  +			lastName: ['', [Validators.required]],
                                                                  +			email: ['', [Validators.required, EmailValidation.emailValidation]],
                                                                  +			phone: ['', [Validators.required, PhoneValidation.phoneValidation]],
                                                                  +			password: ['', Validators.required],
                                                                  +			cPassword: ['', Validators.required]
                                                                  +		});
                                                                  +	}
                                                                  +}
                                                                  +
                                                                  +
                                                                  + +
                                                                  +
                                                                  +
                                                                  + +
                                                                  +

                                                                  + ./signup.component.scss +

                                                                  +
                                                                  
                                                                  +.login-register {
                                                                  +	.login-box.card {
                                                                  +		.card-body {
                                                                  +			height: 100%;
                                                                  +			overflow-y: scroll;
                                                                  +			flex: 1 1 auto;
                                                                  +			padding: 1.25rem;
                                                                  +			margin-left: auto;
                                                                  +			margin-right: auto;
                                                                  +			/* display: block; */
                                                                  +			max-width: 550px;
                                                                  +			/* margin: auto; */
                                                                  +		}
                                                                  +	}
                                                                  +}
                                                                  +
                                                                  +
                                                                  + +
                                                                  +
                                                                  +
                                                                  +
                                                                  + Legend +
                                                                  +
                                                                  +
                                                                  Html element +
                                                                  +
                                                                  +
                                                                  Component +
                                                                  +
                                                                  +
                                                                  Html element with directive +
                                                                  +
                                                                  +
                                                                  + + +
                                                                  + + + + + + + + + + + + + + + + + + + + + +
                                                                  +
                                                                  +

                                                                  result-matching ""

                                                                  +
                                                                    +
                                                                    +
                                                                    +

                                                                    No results matching ""

                                                                    +
                                                                    +
                                                                    +
                                                                    + +
                                                                    +
                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/SpinnerComponent.html b/documentation/components/SpinnerComponent.html new file mode 100644 index 0000000..ea10268 --- /dev/null +++ b/documentation/components/SpinnerComponent.html @@ -0,0 +1,529 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                    +
                                                                    + + +
                                                                    +
                                                                    + + + + + + + + +
                                                                    +

                                                                    +

                                                                    File

                                                                    +

                                                                    +

                                                                    + src/app/shared/spinner.component.ts +

                                                                    + + + +

                                                                    +

                                                                    Implements

                                                                    +

                                                                    +

                                                                    + OnDestroy +

                                                                    + + +
                                                                    +

                                                                    Metadata

                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                    encapsulationViewEncapsulation.None
                                                                    selectorapp-spinner
                                                                    template
                                                                    <div class="preloader" *ngIf="isSpinnerVisible">				<div class="spinner">
                                                                    +					<div class="double-bounce1"></div>
                                                                    +					<div class="double-bounce2"></div>
                                                                    +				</div>
                                                                    +		</div>
                                                                    +
                                                                    + +
                                                                    +

                                                                    Index

                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                    +
                                                                    Properties
                                                                    +
                                                                    + +
                                                                    +
                                                                    Methods
                                                                    +
                                                                    + +
                                                                    +
                                                                    Inputs
                                                                    +
                                                                    + +
                                                                    +
                                                                    + +
                                                                    +

                                                                    Constructor

                                                                    + + + + + + + + + + + + + +
                                                                    +constructor(router: Router, document: Document) +
                                                                    + +
                                                                    +

                                                                    loading screen spinner trigger

                                                                    +
                                                                    +
                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                    NameTypeOptional
                                                                    router + Router + + No +
                                                                    document + Document + + No +
                                                                    +
                                                                    +
                                                                    +
                                                                    + +
                                                                    +

                                                                    Inputs

                                                                    + + + + + + + + + + + + + + + +
                                                                    + + backgroundColor +
                                                                    + Default value : 'rgba(0, 115, 170, 0.69)' +
                                                                    + +
                                                                    +

                                                                    Background input variable

                                                                    +
                                                                    +
                                                                    +
                                                                    + + + +
                                                                    + +

                                                                    + Methods +

                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                    + + + + ngOnDestroy + + + +
                                                                    +ngOnDestroy() +
                                                                    + +
                                                                    +

                                                                    Spinner component destroy method called by Angular internally

                                                                    +
                                                                    + +
                                                                    + Returns : void + +
                                                                    +
                                                                    +
                                                                    +
                                                                    + +

                                                                    + Properties +

                                                                    + + + + + + + + + + + + + + + + + +
                                                                    + + + + Public + isSpinnerVisible + + +
                                                                    + Default value : true +
                                                                    + +
                                                                    +

                                                                    Variable for spinner visibility status

                                                                    +
                                                                    +
                                                                    +
                                                                    + +
                                                                    + + +
                                                                    +
                                                                    import {
                                                                    +	Component,
                                                                    +	Input,
                                                                    +	OnDestroy,
                                                                    +	Inject,
                                                                    +	ViewEncapsulation
                                                                    +} from '@angular/core';
                                                                    +import {
                                                                    +	Router,
                                                                    +	NavigationStart,
                                                                    +	NavigationEnd,
                                                                    +	NavigationCancel,
                                                                    +	NavigationError
                                                                    +} from '@angular/router';
                                                                    +import { DOCUMENT } from '@angular/common';
                                                                    +
                                                                    +@Component({
                                                                    +	selector: 'app-spinner',
                                                                    +	template: `<div class="preloader" *ngIf="isSpinnerVisible">
                                                                    +				<div class="spinner">
                                                                    +					<div class="double-bounce1"></div>
                                                                    +					<div class="double-bounce2"></div>
                                                                    +				</div>
                                                                    +		</div>`,
                                                                    +	encapsulation: ViewEncapsulation.None
                                                                    +})
                                                                    +export class SpinnerComponent implements OnDestroy {
                                                                    +	/**
                                                                    +	 * Variable for spinner visibility status
                                                                    +	 */
                                                                    +	public isSpinnerVisible = true;
                                                                    +
                                                                    +	/**
                                                                    +	 * Background input variable
                                                                    +	 */
                                                                    +	@Input()
                                                                    +	public backgroundColor = 'rgba(0, 115, 170, 0.69)';
                                                                    +	/**
                                                                    +	 * loading screen spinner trigger
                                                                    +	 */
                                                                    +	constructor(
                                                                    +		private router: Router,
                                                                    +		@Inject(DOCUMENT) private document: Document
                                                                    +	) {
                                                                    +		this.router.events.subscribe(
                                                                    +			event => {
                                                                    +				if (event instanceof NavigationStart) {
                                                                    +					this.isSpinnerVisible = true;
                                                                    +				} else if (
                                                                    +					event instanceof NavigationEnd ||
                                                                    +					event instanceof NavigationCancel ||
                                                                    +					event instanceof NavigationError
                                                                    +				) {
                                                                    +					this.isSpinnerVisible = false;
                                                                    +				}
                                                                    +			},
                                                                    +			() => {
                                                                    +				this.isSpinnerVisible = false;
                                                                    +			}
                                                                    +		);
                                                                    +	}
                                                                    +
                                                                    +	/**
                                                                    +	 * Spinner component destroy method called by Angular internally
                                                                    +	 */
                                                                    +	ngOnDestroy(): void {
                                                                    +		this.isSpinnerVisible = false;
                                                                    +	}
                                                                    +}
                                                                    +
                                                                    +
                                                                    + + + +
                                                                    +
                                                                    +
                                                                    +
                                                                    + Legend +
                                                                    +
                                                                    +
                                                                    Html element +
                                                                    +
                                                                    +
                                                                    Component +
                                                                    +
                                                                    +
                                                                    Html element with directive +
                                                                    +
                                                                    +
                                                                    + + +
                                                                    + + + + + + + + + + + + + + + + + + + + + +
                                                                    +
                                                                    +

                                                                    result-matching ""

                                                                    +
                                                                      +
                                                                      +
                                                                      +

                                                                      No results matching ""

                                                                      +
                                                                      +
                                                                      +
                                                                      + +
                                                                      +
                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/TableSearchComponent.html b/documentation/components/TableSearchComponent.html new file mode 100644 index 0000000..1189ab7 --- /dev/null +++ b/documentation/components/TableSearchComponent.html @@ -0,0 +1,918 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                      +
                                                                      + + +
                                                                      +
                                                                      + + + + + + + + +
                                                                      +

                                                                      +

                                                                      File

                                                                      +

                                                                      +

                                                                      + src/app/shared/table-search/table-search.component.ts +

                                                                      + + + +

                                                                      +

                                                                      Implements

                                                                      +

                                                                      +

                                                                      + OnInit +

                                                                      + + +
                                                                      +

                                                                      Metadata

                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                      selectorapp-table-search
                                                                      templateUrl./table-search.component.html
                                                                      +
                                                                      + +
                                                                      +

                                                                      Index

                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                      +
                                                                      Properties
                                                                      +
                                                                      + +
                                                                      +
                                                                      Methods
                                                                      +
                                                                      + +
                                                                      +
                                                                      Inputs
                                                                      +
                                                                      + +
                                                                      +
                                                                      Outputs
                                                                      +
                                                                      + +
                                                                      +
                                                                      Accessors
                                                                      +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      +

                                                                      Constructor

                                                                      + + + + + + + + + + +
                                                                      +constructor() +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      +

                                                                      Inputs

                                                                      + + + + + + + + + + + + + + + +
                                                                      + + id +
                                                                      + Type : any + +
                                                                      + +
                                                                      +

                                                                      input val to set id for filter

                                                                      +
                                                                      +
                                                                      + + + + + + + + + + + + + + + +
                                                                      + + pager +
                                                                      + Type : any + +
                                                                      + +
                                                                      +

                                                                      input val to set pager for filter

                                                                      +
                                                                      +
                                                                      +
                                                                      +
                                                                      +

                                                                      Outputs

                                                                      + + + + + + + + + + + + + + + +
                                                                      + + searchChanged +
                                                                      + Type : EventEmitter + +
                                                                      + +
                                                                      +

                                                                      Observable sortChanged for triggering modifications in the main component

                                                                      +
                                                                      +
                                                                      +
                                                                      + + +
                                                                      + +

                                                                      + Methods +

                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                      + + + + ngOnInit + + + +
                                                                      +ngOnInit() +
                                                                      + +
                                                                      + +
                                                                      + Returns : void + +
                                                                      +
                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                      + + + + search + + + +
                                                                      +search(term: string) +
                                                                      + +
                                                                      +

                                                                      emit search event with the input term

                                                                      +
                                                                      + +
                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                      NameTypeOptionalDescription
                                                                      term + string + + No + +

                                                                      the current value of the input

                                                                      + +
                                                                      +
                                                                      +
                                                                      +
                                                                      +
                                                                      + Returns : void + +
                                                                      +
                                                                      + +
                                                                      +
                                                                      +
                                                                      +
                                                                      + +

                                                                      + Properties +

                                                                      + + + + + + + + + + + + + + + + + +
                                                                      + + + + _id + + +
                                                                      + Type : number + +
                                                                      + +
                                                                      +

                                                                      internal id for filter

                                                                      +
                                                                      +
                                                                      + + + + + + + + + + + + + + + + + + + + +
                                                                      + + + + _pager + + +
                                                                      + Type : any + +
                                                                      + Default value : {} +
                                                                      + +
                                                                      +

                                                                      internal pager value

                                                                      +
                                                                      +
                                                                      + + + + + + + + + + + + + + + + + +
                                                                      + + + + searchInput + + +
                                                                      + Type : ElementRef + +
                                                                      + Decorators : +
                                                                      + + @ViewChild('searchInput', {static: true})
                                                                      +
                                                                      +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      +

                                                                      + Accessors +

                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                      + + id +
                                                                      + getid() +
                                                                      + +
                                                                      +

                                                                      return id

                                                                      +
                                                                      + +
                                                                      + setid(data: any) +
                                                                      + +
                                                                      +

                                                                      input val to set id for filter

                                                                      +
                                                                      + +
                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                      NameTypeOptional
                                                                      data + any + + No +
                                                                      +
                                                                      +
                                                                      +
                                                                      +
                                                                      + Returns : void + +
                                                                      +
                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                      + + pager +
                                                                      + getpager() +
                                                                      + +
                                                                      +

                                                                      return pager

                                                                      +
                                                                      + +
                                                                      + Returns : any + +
                                                                      +
                                                                      + setpager(data: any) +
                                                                      + +
                                                                      +

                                                                      input val to set pager for filter

                                                                      +
                                                                      + +
                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                      NameTypeOptional
                                                                      data + any + + No +
                                                                      +
                                                                      +
                                                                      +
                                                                      +
                                                                      + Returns : void + +
                                                                      +
                                                                      +
                                                                      +
                                                                      + + +
                                                                      +
                                                                      import { Component, HostBinding, Input, Output, EventEmitter, HostListener, OnInit, ViewChild, ElementRef } from '@angular/core';
                                                                      +import { Subject, fromEvent } from 'rxjs';
                                                                      +import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';
                                                                      +
                                                                      +@Component({
                                                                      +	selector: 'app-table-search',
                                                                      +	templateUrl: './table-search.component.html'// ,
                                                                      +	// styleUrls: ['./table-search.directive.scss']
                                                                      +})
                                                                      +/**
                                                                      +	 * Reusable table search component
                                                                      +	 */
                                                                      +export class TableSearchComponent implements OnInit {
                                                                      +	/**
                                                                      +	 * internal pager value
                                                                      +	 */
                                                                      +	_pager: any = {};
                                                                      +	/**
                                                                      +	 * internal id for filter
                                                                      +	 */
                                                                      +	_id: number;
                                                                      +	/**
                                                                      +	 * input val to set id for filter
                                                                      +	 */
                                                                      +	@Input()
                                                                      +	set id(data: any) {
                                                                      +		this._id = data;
                                                                      +	}
                                                                      +	/**
                                                                      +	 * return id
                                                                      +	 */
                                                                      +	get id() {
                                                                      +		return this._id;
                                                                      +	}
                                                                      +	@ViewChild('searchInput', {static: true}) searchInput: ElementRef;
                                                                      +/**
                                                                      +	 * return pager
                                                                      +	 */
                                                                      +	get pager(): any {
                                                                      +		return this._pager;
                                                                      +	}
                                                                      +/**
                                                                      +	 *  input val to set pager for filter
                                                                      +	 */
                                                                      +	@Input()
                                                                      +	set pager(data: any) {
                                                                      +		this._pager = data;
                                                                      +	}
                                                                      +/**
                                                                      +	 *  Observable sortChanged for triggering modifications in the main component
                                                                      +	 */
                                                                      +	@Output() searchChanged = new EventEmitter();
                                                                      +
                                                                      +
                                                                      +	constructor() {
                                                                      +	}
                                                                      +
                                                                      +
                                                                      +	ngOnInit() {
                                                                      +		/**
                                                                      +	 *  register to key events in the referenced input
                                                                      +	 */
                                                                      +		fromEvent(this.searchInput.nativeElement, 'keyup').pipe(
                                                                      +			debounceTime(500),
                                                                      +			map((event: any) => {
                                                                      +				return event.target.value;
                                                                      +			}),
                                                                      +			filter(res => res.length > 2 || res.length === 0),
                                                                      +			distinctUntilChanged(),
                                                                      +			).subscribe(term => {
                                                                      +				this.search(term);
                                                                      +			});
                                                                      +	}
                                                                      +	/**
                                                                      +	 * emit search event with the input term
                                                                      +	 * @param {string} term the current value of the input
                                                                      +	 */
                                                                      +	search(term: string) {
                                                                      +		this.pager.filters[this.id] = term;
                                                                      +		this.searchChanged.emit({...this.pager});
                                                                      +	}
                                                                      +
                                                                      +}
                                                                      +
                                                                      +
                                                                      + +
                                                                      +
                                                                      <div class="p-2">
                                                                      +    <div class="input-group">
                                                                      +        <div class="input-group-prepend">
                                                                      +            <span class="input-group-text" id="basic-addon1"><span class="fa fa-search"></span></span>
                                                                      +        </div>
                                                                      +        <input type="text" class="form-control" placeholder="Caută" aria-label="Caută"
                                                                      +            aria-describedby="basic-addon1" #searchInput>  
                                                                      +    </div>
                                                                      +</div>
                                                                      +
                                                                      + + +
                                                                      +
                                                                      +
                                                                      +
                                                                      + Legend +
                                                                      +
                                                                      +
                                                                      Html element +
                                                                      +
                                                                      +
                                                                      Component +
                                                                      +
                                                                      +
                                                                      Html element with directive +
                                                                      +
                                                                      +
                                                                      + + +
                                                                      + + + + + + + + + + + + + + + + + + + + + +
                                                                      +
                                                                      +

                                                                      result-matching ""

                                                                      +
                                                                        +
                                                                        +
                                                                        +

                                                                        No results matching ""

                                                                        +
                                                                        +
                                                                        +
                                                                        + +
                                                                        +
                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/TopBarComponent.html b/documentation/components/TopBarComponent.html new file mode 100644 index 0000000..7e17502 --- /dev/null +++ b/documentation/components/TopBarComponent.html @@ -0,0 +1,690 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                        +
                                                                        + + +
                                                                        +
                                                                        + + + + + + + + +
                                                                        +

                                                                        +

                                                                        File

                                                                        +

                                                                        +

                                                                        + src/app/top-bar/top-bar.component.ts +

                                                                        + + + +

                                                                        +

                                                                        Implements

                                                                        +

                                                                        +

                                                                        + OnInit +

                                                                        + + +
                                                                        +

                                                                        Metadata

                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                        selectorapp-top-bar
                                                                        styleUrls./top-bar.component.scss
                                                                        templateUrl./top-bar.component.html
                                                                        +
                                                                        + +
                                                                        +

                                                                        Index

                                                                        + + + + + + + + + + + + + + + + + + + + + +
                                                                        +
                                                                        Properties
                                                                        +
                                                                        + +
                                                                        +
                                                                        Methods
                                                                        +
                                                                        + +
                                                                        +
                                                                        + +
                                                                        +

                                                                        Constructor

                                                                        + + + + + + + + + + + + + +
                                                                        +constructor(authService: AuthenticationService, router: Router) +
                                                                        + +
                                                                        +

                                                                        top bar to be shown over all the other components

                                                                        +
                                                                        +
                                                                        + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                        NameTypeOptional
                                                                        authService + AuthenticationService + + No +
                                                                        router + Router + + No +
                                                                        +
                                                                        +
                                                                        +
                                                                        + + + + + +
                                                                        + +

                                                                        + Methods +

                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                        + + + + goToDashboard + + + +
                                                                        +goToDashboard() +
                                                                        + +
                                                                        +

                                                                        go to home path on icon click

                                                                        +
                                                                        + +
                                                                        + Returns : void + +
                                                                        +
                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                        + + + + logout + + + +
                                                                        +logout() +
                                                                        + +
                                                                        +

                                                                        logout from account

                                                                        +
                                                                        + +
                                                                        + Returns : void + +
                                                                        +
                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                        + + + + ngOnInit + + + +
                                                                        +ngOnInit() +
                                                                        + +
                                                                        + +
                                                                        + Returns : void + +
                                                                        +
                                                                        +
                                                                        +
                                                                        + +

                                                                        + Properties +

                                                                        + + + + + + + + + + + + + + +
                                                                        + + + + Public + authService + + +
                                                                        + Type : AuthenticationService + +
                                                                        + +
                                                                        +
                                                                        + +
                                                                        + + +
                                                                        +
                                                                        import { Component, OnInit } from '@angular/core';
                                                                        +import { AuthenticationService } from '@app/core';
                                                                        +import { Router } from '@angular/router';
                                                                        +
                                                                        +@Component({
                                                                        +	selector: 'app-top-bar',
                                                                        +	templateUrl: './top-bar.component.html',
                                                                        +	styleUrls: ['./top-bar.component.scss']
                                                                        +})
                                                                        +
                                                                        +export class TopBarComponent implements OnInit {
                                                                        +	/**
                                                                        +	 * top bar to be shown over all the other components
                                                                        +	 */
                                                                        +	constructor(public authService: AuthenticationService,
                                                                        +		private router: Router) {}
                                                                        +
                                                                        +	ngOnInit() { }
                                                                        +/**
                                                                        +	 * logout from account
                                                                        +	 */
                                                                        +	logout() {
                                                                        +		this.authService.logout().subscribe(
                                                                        +		(didlogout: Boolean) => {
                                                                        +			if (didlogout) {
                                                                        +				this.router.navigate(['/login']);
                                                                        +			}
                                                                        +		},
                                                                        +		(error: any) => {
                                                                        +			console.log('logout error: ', error);
                                                                        +		});
                                                                        +	}
                                                                        +/**
                                                                        +	 * go to home path on icon click
                                                                        +	 */
                                                                        +	goToDashboard() {
                                                                        +		this.router.navigate(['/' + this.authService.homePath()], {
                                                                        +			replaceUrl: true
                                                                        +		});
                                                                        +	}
                                                                        +}
                                                                        +
                                                                        +
                                                                        + +
                                                                        +
                                                                        <header *ngIf="authService.isAuthenticated()">
                                                                        +	<nav class=" yellow  container-full-height">
                                                                        +		<div class="flex-container container flex-row">
                                                                        +			<div class="px-3 bg-white">
                                                                        +				<a (click)="goToDashboard()" class=" navbar-brand logo" href="javascript:void(0);">
                                                                        +					<img src="../../assets/images/DSU_logo.PNG">
                                                                        +				</a>
                                                                        +			</div>
                                                                        +			<div class="row" style="width: 100%; margin: 0">
                                                                        +				<div class="flex-column pr-3 d-none d-xl-block col-xl-10 pl-0">
                                                                        +					<ul class="nav">
                                                                        +						<li>
                                                                        +							<a routerLink="/volunteers" class="nav__link" routerLinkActive="active-link">Voluntari</a>
                                                                        +						</li>
                                                                        +						<li *ngIf="authService.is('DSU', 'NGO')">
                                                                        +							<a routerLink='/resources' class="nav__link" routerLinkActive="active-link">Resurse</a>
                                                                        +						</li>
                                                                        +						<li *ngIf="authService.is('DSU')">
                                                                        +							<a routerLink='/organisations' class="nav__link" routerLinkActive="active-link">Organizații</a>
                                                                        +						</li>
                                                                        +						<li *ngIf="authService.is('DSU', 'INS')">
                                                                        +							<a routerLink='/users' class="nav__link" routerLinkActive="active-link">Utilizatori</a>
                                                                        +						</li>
                                                                        +						<li *ngIf="authService.is('DSU')">
                                                                        +							<a routerLink='/map' class="nav__link" routerLinkActive="active-link">Hartă</a>
                                                                        +						</li>
                                                                        +						<li>
                                                                        +							<a routerLink="/info" class="nav__link" routerLinkActive="active-link">Info</a>
                                                                        +						</li>
                                                                        +					</ul>
                                                                        +				</div>
                                                                        +				<div class="navbar-btn flex-row d-flex justify-end align-center col-xs-12 col-sm-12 col-md-12 col-lg-12 col-xl-2 pr-4 pl-0">
                                                                        +						<div ngbDropdown class="d-inline-block">
                                                                        +								<div class="userarea" id="dropdown1" ngbDropdownToggle>
                                                                        +										<app-current-profile></app-current-profile>
                                                                        +									</div>
                                                                        +								<div ngbDropdownMenu aria-labelledby="dropdown1">
                                                                        +									<button ngbDropdownItem [routerLink]="['users', 'id', authService.user._id]">Profil</button>
                                                                        +									<button ngbDropdownItem routerLink='/volunteers' class="hidden-button">Voluntari</button>
                                                                        +									<button *ngIf="authService.is('DSU', 'NGO')" ngbDropdownItem routerLink='/resources' class="hidden-button">Resurse</button>
                                                                        +									<button *ngIf="authService.is('DSU')" ngbDropdownItem routerLink='/organisations' class="hidden-button">Organizații</button>
                                                                        +									<button *ngIf="authService.is('DSU', 'INS')" ngbDropdownItem routerLink='/users' class="hidden-button">Utilizatori</button>
                                                                        +									<button *ngIf="authService.is('DSU')" ngbDropdownItem routerLink='/map' class="hidden-button">Hartă</button>
                                                                        +									<button ngbDropdownItem routerLink='/info' class="hidden-button">Info</button>
                                                                        +									<div class="dropdown-divider"></div>
                                                                        +									<button ngbDropdownItem (click)="logout()">Delogare</button>
                                                                        +								</div>
                                                                        +							</div>
                                                                        +				</div>
                                                                        +			</div>
                                                                        +		</div>
                                                                        +	</nav>
                                                                        +</header>
                                                                        +
                                                                        +
                                                                        + +
                                                                        +

                                                                        + ./top-bar.component.scss +

                                                                        +
                                                                        header {
                                                                        +  height: 60px;
                                                                        +}
                                                                        +
                                                                        +.logo {
                                                                        +  display: inline-block;
                                                                        +  height: 60px;
                                                                        +  width:60px;
                                                                        +  margin: auto;
                                                                        +  img{
                                                                        +    margin: auto;
                                                                        +    display: block;
                                                                        +    max-width: 100%;
                                                                        +    max-height: 100%;
                                                                        +  }
                                                                        +}
                                                                        +
                                                                        +.nav {
                                                                        +  display: flex;
                                                                        +  height: 60px;
                                                                        +  flex-direction: row;
                                                                        +  line-height: 60px;
                                                                        +  white-space: nowrap;
                                                                        +}
                                                                        +
                                                                        +.nav .nav__link {
                                                                        +  color: #000;
                                                                        +  display: inline-block;
                                                                        +  font-weight: bold;
                                                                        +  font-size: 14px;
                                                                        +  padding: 0 25px;
                                                                        +  text-transform: uppercase;
                                                                        +}
                                                                        +
                                                                        +.nav .nav__link:hover {
                                                                        +  background-color: #264998;
                                                                        +  color: #fff;
                                                                        +}
                                                                        +
                                                                        +.yellow {
                                                                        +  background-color:rgb(243,	217,	115	);
                                                                        +}
                                                                        +/* Layout */
                                                                        +.flex-container {
                                                                        +  display: flex;
                                                                        +  width: 100%;
                                                                        +}
                                                                        +
                                                                        +.flex-row {
                                                                        +  flex-direction: row;
                                                                        +}
                                                                        +
                                                                        +.align-center {
                                                                        +  align-items: center;
                                                                        +}
                                                                        +
                                                                        +.justify-end {
                                                                        +  justify-content: flex-end;
                                                                        +}
                                                                        +
                                                                        +.container-full-height {
                                                                        + height: 100%;
                                                                        +}
                                                                        +
                                                                        +.hidden-button {
                                                                        +  display: none;
                                                                        +}
                                                                        +
                                                                        +@media (max-width: 1199px) {
                                                                        +  .hidden-button {
                                                                        +    display: block;
                                                                        +  }
                                                                        +}
                                                                        +
                                                                        +.dropdown-item:active {
                                                                        +  background-color: gray;
                                                                        +}
                                                                        +
                                                                        +.dropdown-item:focus {
                                                                        +  outline:none;
                                                                        +  border:none;
                                                                        +}
                                                                        +
                                                                        +.active-link {
                                                                        +  background-color: #264998;
                                                                        +  color: #fff!important;
                                                                        +}
                                                                        +
                                                                        + +
                                                                        +
                                                                        +
                                                                        +
                                                                        + Legend +
                                                                        +
                                                                        +
                                                                        Html element +
                                                                        +
                                                                        +
                                                                        Component +
                                                                        +
                                                                        +
                                                                        Html element with directive +
                                                                        +
                                                                        +
                                                                        + + +
                                                                        + + + + + + + + + + + + + + + + + + + + + +
                                                                        +
                                                                        +

                                                                        result-matching ""

                                                                        +
                                                                          +
                                                                          +
                                                                          +

                                                                          No results matching ""

                                                                          +
                                                                          +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/UserDashboardComponent.html b/documentation/components/UserDashboardComponent.html new file mode 100644 index 0000000..1723a75 --- /dev/null +++ b/documentation/components/UserDashboardComponent.html @@ -0,0 +1,1773 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                          +
                                                                          + + +
                                                                          +
                                                                          + + + + + + + + +
                                                                          +

                                                                          +

                                                                          File

                                                                          +

                                                                          +

                                                                          + src/app/pages/users/users/components/user-dashboard/user-dashboard.component.ts +

                                                                          + + + +

                                                                          +

                                                                          Implements

                                                                          +

                                                                          +

                                                                          + OnInit +

                                                                          + + +
                                                                          +

                                                                          Metadata

                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                          selectorapp-user-dashboard
                                                                          styleUrls./user-dashboard.component.scss
                                                                          templateUrl./user-dashboard.component.html
                                                                          +
                                                                          + +
                                                                          +

                                                                          Index

                                                                          + + + + + + + + + + + + + + + + + + + + + +
                                                                          +
                                                                          Properties
                                                                          +
                                                                          + +
                                                                          +
                                                                          Methods
                                                                          +
                                                                          + +
                                                                          +
                                                                          + +
                                                                          +

                                                                          Constructor

                                                                          + + + + + + + + + + + + + +
                                                                          +constructor(usersService: UsersService, breakpointObserver: BreakpointObserver, modalService: NgbModal, filterService: FiltersService, router: Router, authService: AuthenticationService, fb: FormBuilder) +
                                                                          + +
                                                                          +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptional
                                                                          usersService + UsersService + + No +
                                                                          breakpointObserver + BreakpointObserver + + No +
                                                                          modalService + NgbModal + + No +
                                                                          filterService + FiltersService + + No +
                                                                          router + Router + + No +
                                                                          authService + AuthenticationService + + No +
                                                                          fb + FormBuilder + + No +
                                                                          +
                                                                          +
                                                                          +
                                                                          + + + + + +
                                                                          + +

                                                                          + Methods +

                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + addUser + + + +
                                                                          +addUser(content: any) +
                                                                          + +
                                                                          +

                                                                          go to add page for rescue officer or open the modal to select type of user

                                                                          +
                                                                          + +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptional
                                                                          content + any + + No +
                                                                          +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Returns : void + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + continue + + + +
                                                                          +continue() +
                                                                          + +
                                                                          +

                                                                          go to add page and dismiss the modal

                                                                          +
                                                                          + +
                                                                          + Returns : void + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + filterChanged + + + +
                                                                          +filterChanged(id?: number) +
                                                                          + +
                                                                          +

                                                                          filter callback. Filters added to pager and then a request is made

                                                                          +
                                                                          + +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptionalDescription
                                                                          id + number + + Yes + +

                                                                          the index in the pager filters and filters Selected array

                                                                          + +
                                                                          +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Returns : void + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + getData + + + +
                                                                          +getData() +
                                                                          + +
                                                                          +

                                                                          get data from server and store localy

                                                                          +
                                                                          + +
                                                                          + Returns : void + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + getRole + + + +
                                                                          +getRole(id: string) +
                                                                          + +
                                                                          +

                                                                          get role names from local list to display in select

                                                                          +
                                                                          + +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptionalDescription
                                                                          id + string + + No + +

                                                                          of the role to be found in the roles array

                                                                          + +
                                                                          +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Returns : any + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + goToOrganisation + + + +
                                                                          +goToOrganisation(id: string, e: any) +
                                                                          + +
                                                                          +

                                                                          navigate to organisation by id

                                                                          +
                                                                          + +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptionalDescription
                                                                          id + string + + No + +

                                                                          of the NGO to display

                                                                          + +
                                                                          e + any + + No + +
                                                                          +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Returns : void + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + ngOnInit + + + +
                                                                          +ngOnInit() +
                                                                          + +
                                                                          + +
                                                                          + Returns : void + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + searchChanged + + + +
                                                                          +searchChanged(pager: any) +
                                                                          + +
                                                                          +

                                                                          search callback. Filters added to pager and then a request is made

                                                                          +
                                                                          + +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptionalDescription
                                                                          pager + any + + No + +

                                                                          the pager with the search filer added

                                                                          + +
                                                                          +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Returns : void + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + sortChanged + + + +
                                                                          +sortChanged(pager: any) +
                                                                          + +
                                                                          +

                                                                          sort callback. Filters added to pager and then a request is made

                                                                          +
                                                                          + +
                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                          NameTypeOptionalDescription
                                                                          pager + any + + No + +

                                                                          the pager with the search filer added

                                                                          + +
                                                                          +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Returns : void + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + switchtoblock + + + +
                                                                          +switchtoblock() +
                                                                          + +
                                                                          +

                                                                          set class of display element with grid view

                                                                          +
                                                                          + +
                                                                          + Returns : void + +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + switchtolist + + + +
                                                                          +switchtolist() +
                                                                          + +
                                                                          +

                                                                          set class of display element with list view

                                                                          +
                                                                          + +
                                                                          + Returns : void + +
                                                                          +
                                                                          +
                                                                          +
                                                                          + +

                                                                          + Properties +

                                                                          + + + + + + + + + + + + + + +
                                                                          + + + + Public + authService + + +
                                                                          + Type : AuthenticationService + +
                                                                          + +
                                                                          + + + + + + + + + + + + + + +
                                                                          + + + + Public + breakpointObserver + + +
                                                                          + Type : BreakpointObserver + +
                                                                          + +
                                                                          + + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + data + + +
                                                                          + Type : any[] + +
                                                                          + Default value : [] +
                                                                          + +
                                                                          +

                                                                          var to hold the users

                                                                          +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + +
                                                                          + + + + displayBlock + + +
                                                                          + Default value : true +
                                                                          + +
                                                                          +

                                                                          flag for HTML to know how to display data

                                                                          +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + +
                                                                          + + + + form + + +
                                                                          + Type : FormGroup + +
                                                                          + +
                                                                          +

                                                                          form in which to store the role from the modal

                                                                          +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + institutionfiltervalues + + +
                                                                          + Type : any[] + +
                                                                          + Default value : [] +
                                                                          + +
                                                                          +

                                                                          insitution to select from

                                                                          +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + + + + +
                                                                          + + + + pager + + +
                                                                          + Type : any + +
                                                                          + Default value : {} +
                                                                          + +
                                                                          +

                                                                          pager for the resources table

                                                                          +
                                                                          +
                                                                          + + + + + + + + + + + + + + + + + +
                                                                          + + + + roles + + +
                                                                          + Type : [] + +
                                                                          + Default value : [ + { + id: 0, + name: 'Ofițer de intervenție' + }, + { + id: 1, + name: 'Administrator instituțional' + }, + { + id: 2, + name: 'Administrator ONG' + }, + { + id: 3, + name: 'Administrator General' + }, + ] +
                                                                          + +
                                                                          + + + + + + + + + + + + + + + + + +
                                                                          + + + + selected + + +
                                                                          + Default value : Array(1) +
                                                                          + +
                                                                          +

                                                                          selected values for the filter

                                                                          +
                                                                          +
                                                                          +
                                                                          + +
                                                                          + + +
                                                                          +
                                                                          import { Component, OnInit } from '@angular/core';
                                                                          +import { BreakpointObserver } from '@angular/cdk/layout';
                                                                          +import { UsersService } from '@app/core/service/users.service';
                                                                          +import {
                                                                          +	FormGroup,
                                                                          +	Validators,
                                                                          +	FormBuilder
                                                                          +} from '@angular/forms';
                                                                          +import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
                                                                          +import { Router } from '@angular/router';
                                                                          +import { AuthenticationService, FiltersService } from '@app/core';
                                                                          +
                                                                          +@Component({
                                                                          +	selector: 'app-user-dashboard',
                                                                          +	templateUrl: './user-dashboard.component.html',
                                                                          +	styleUrls: ['./user-dashboard.component.scss']
                                                                          +})
                                                                          +
                                                                          +export class UserDashboardComponent implements OnInit {
                                                                          +	/**
                                                                          +	 * var to hold the users
                                                                          +	 */
                                                                          +	data: any[] = [];
                                                                          +	/**
                                                                          +	 * pager for the resources table
                                                                          +	 */
                                                                          +	pager: any = {};
                                                                          +	/**
                                                                          +	 * flag for HTML to know how to display data
                                                                          +	 */
                                                                          +	displayBlock = true;
                                                                          +	/**
                                                                          +	 * form in which to store the role from the modal
                                                                          +	 */
                                                                          +	form: FormGroup;
                                                                          +	roles = [
                                                                          +		{
                                                                          +			id: 0,
                                                                          +			name: 'Ofițer de intervenție'
                                                                          +		},
                                                                          +		{
                                                                          +			id: 1,
                                                                          +			name: 'Administrator instituțional'
                                                                          +		},
                                                                          +		{
                                                                          +			id: 2,
                                                                          +			name: 'Administrator ONG'
                                                                          +		},
                                                                          +		{
                                                                          +			id: 3,
                                                                          +			name: 'Administrator General'
                                                                          +		},
                                                                          +	];
                                                                          +	/**
                                                                          +	 * selected values for the filter
                                                                          +	 */
                                                                          +	selected = Array(1);
                                                                          +	/**
                                                                          +	 * insitution to select from
                                                                          +	 */
                                                                          +	institutionfiltervalues: any[] = [];
                                                                          +
                                                                          +	constructor(private usersService: UsersService,
                                                                          +		public breakpointObserver: BreakpointObserver,
                                                                          +		private modalService: NgbModal,
                                                                          +		private filterService: FiltersService,
                                                                          +		private router: Router, public authService: AuthenticationService,
                                                                          +		private fb: FormBuilder) { }
                                                                          +
                                                                          +	ngOnInit() {
                                                                          +		this.pager = this.usersService.getPager();
                                                                          +		this.getData();
                                                                          +		this.filterService.getInstitutionFilters().subscribe((data: any) => {
                                                                          +			this.institutionfiltervalues = data.map((elem: any) => {
                                                                          +				return {id: elem._id, name: elem.name};
                                                                          +			});
                                                                          +		});
                                                                          +		this.breakpointObserver.observe([
                                                                          +			'(max-width: 768px)'
                                                                          +				]).subscribe(result => {
                                                                          +				if (result.matches) {
                                                                          +					this.switchtoblock();
                                                                          +				}
                                                                          +			});
                                                                          +
                                                                          +			this.form = this.fb.group({
                                                                          +				role: ['', Validators.required]
                                                                          +			});
                                                                          +	}
                                                                          +/**
                                                                          +	 * get role names from local list to display in select
                                                                          +	 * @param {string} id of the role to be found in the roles array
                                                                          +	 */
                                                                          +	getRole(id: string) {
                                                                          +		for (const elem of this.roles) {
                                                                          +			if (elem.id === parseInt(id, 10)) { return elem.name; }
                                                                          +		}
                                                                          +	}
                                                                          +/**
                                                                          +	 * go to add page for rescue officer or open the modal to select type of user
                                                                          +	 */
                                                                          +	addUser(content: any) {
                                                                          +		if (this.authService.is('DSU')) {
                                                                          +			this.modalService.open(content, { centered: true });
                                                                          +		} else {
                                                                          +			this.router.navigateByUrl('/users/add/0');
                                                                          +		}
                                                                          +	}
                                                                          +/**
                                                                          +	 * get data from server and store localy
                                                                          +
                                                                          +	 */
                                                                          +	getData() {
                                                                          +		this.usersService.getUsers(this.pager).subscribe(element => {
                                                                          +			if (element.data) {
                                                                          +				this.data = element.data;
                                                                          +				this.pager.total = element.pager.total;
                                                                          +			}
                                                                          +		});
                                                                          +	}
                                                                          +	/**
                                                                          +	 * go to add page and dismiss the modal
                                                                          +	 */
                                                                          +	continue() {
                                                                          +		this.router.navigateByUrl('/users/add/' + this.form.value.role);
                                                                          +		this.modalService.dismissAll();
                                                                          +	}
                                                                          +	/**
                                                                          +	 * sort callback. Filters added to pager and then a request is made
                                                                          +	 * @param {any} pager the pager with the search filer added
                                                                          +	 */
                                                                          +	sortChanged(pager: any) {
                                                                          +		this.pager = pager;
                                                                          +		this.getData();
                                                                          +	}
                                                                          +	/**
                                                                          +	 * search callback. Filters added to pager and then a request is made
                                                                          +	 * @param {any} pager the pager with the search filer added
                                                                          +	 */
                                                                          +	searchChanged(pager: any) {
                                                                          +		this.pager = pager;
                                                                          +		this.getData();
                                                                          +	}
                                                                          +/**
                                                                          +	 * filter callback. Filters added to pager and then a request is made
                                                                          +	 * @param {number} id the index in the pager filters and filters Selected array
                                                                          +	 */
                                                                          +	filterChanged(id?: number) {
                                                                          +		this.pager.filters[id] = this.selected[id].map((elem: any) => elem.id).join(',');
                                                                          +		this.getData();
                                                                          +	}
                                                                          +
                                                                          +	/**
                                                                          +	 * set class of display element with list view
                                                                          +	 */
                                                                          +	switchtolist() {
                                                                          +		this.displayBlock = false;
                                                                          +	}
                                                                          +	/**
                                                                          +	 * set class of display element with grid view
                                                                          +	 */
                                                                          +	switchtoblock() {
                                                                          +		this.displayBlock = true;
                                                                          +	}
                                                                          +	/**
                                                                          +	 * navigate to organisation by id
                                                                          +	 * @param {string} id of the NGO to display
                                                                          +	 */
                                                                          +	goToOrganisation(id: string, e: any) {
                                                                          +		e.preventDefault();
                                                                          +		this.router.navigate(['../organisations/id/' + id]);
                                                                          +	}
                                                                          +}
                                                                          +
                                                                          +
                                                                          + +
                                                                          +
                                                                          <div class="container">
                                                                          +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                                          +        <h4 class="navtitle mb-2"> Utilizatori </h4> 
                                                                          +        <div class="form-inline ml-auto">
                                                                          +            <app-table-search [pager]="pager" id=1 (searchChanged)="searchChanged($event)"></app-table-search>
                                                                          +            <div class="btn-group btn-group-toggle m-2 hidden-radio"  ngbRadioGroup name="radioBasic" [(ngModel)]="displayBlock">
                                                                          +                <label ngbButtonLabel (click)="switchtoblock()" class="btn btn-primary">
                                                                          +                    <input ngbButton type="radio" [value]="true"><span class="fa fa-th-large"></span>
                                                                          +                </label>
                                                                          +                <label ngbButtonLabel (click)="switchtolist()" class="btn btn-primary">
                                                                          +                    <input ngbButton type="radio" [value]="false"><span class="fa fa-bars"></span>
                                                                          +                </label>
                                                                          +            </div>
                                                                          +            <button (click)="addUser(content)" class=" add-btn btn-adjusting btn btn-info btn-rounded m-2"><span class="fa fa-plus-circle"></span>&nbsp;&nbsp;Adaugă Utilizator</button>
                                                                          +        </div>
                                                                          +    </nav>
                                                                          +    <div class="filters my-3 mx-30px row">
                                                                          +		<span class="padding-rem">Total: {{pager.total}}</span>
                                                                          +		<span class="padding-rem">&nbsp;&nbsp;</span>
                                                                          +		<span class="padding-rem">Filtrează după: &nbsp;</span>
                                                                          +		<ngx-multiselect
                                                                          +			class="institutie"
                                                                          +			[(ngModel)]="selected[0]"
                                                                          +			showMaxLables = "1"
                                                                          +			[options]="institutionfiltervalues"
                                                                          +			(onItemClick)="filterChanged(0)"
                                                                          +			(onSelectNone)="filterChanged(0)"
                                                                          +			(onSelectAll)="filterChanged(0)">
                                                                          +		</ngx-multiselect>
                                                                          +	</div>
                                                                          +    <div *ngIf="displayBlock; else displayList" class="cardlist row mt-5">
                                                                          +        <div *ngFor="let elem of data" class="d-flex col-md-6 col-sm-12 col-lg-4">
                                                                          +            <div class="card mb-2" style="flex-grow: 1" [routerLink]="['id',elem._id]" >
                                                                          +                    <div class="card-body">
                                                                          +                        <a class="btn btn-fix text-left">
                                                                          +                            <h4 class="card-title">{{ elem.name }}</h4>
                                                                          +                            <div class="card-text row"> 
                                                                          +                                <span class="col-md-12">
                                                                          +                                    <i class="fa fa-envelope"></i>
                                                                          +                                    {{ elem.email }}
                                                                          +                                </span>
                                                                          +                                <span class="col-md-12">
                                                                          +                                    <i class="fa fa-phone"></i>
                                                                          +                                    {{ elem.phone }}
                                                                          +                                </span>
                                                                          +                            </div>
                                                                          +                        </a>
                                                                          +                        
                                                                          +                        <span *ngIf="!!elem.organisation" class="ml-3"> 
                                                                          +                            <i class="fa fa-building"></i>
                                                                          +                            <a class="col-md-12 text-left pl-0" (click)="goToOrganisation(elem.organisation?._id, $event)" href="javascript:void(0);">
                                                                          +                                {{ elem.organisation.name }}
                                                                          +                            </a>
                                                                          +                        </span>
                                                                          +
                                                                          +                        <span *ngIf="!!elem.institution" class="ml-3">
                                                                          +                            <i class="fa fa-building"></i>
                                                                          +                            {{ elem.institution.name }}
                                                                          +                        </span>
                                                                          +
                                                                          +                        <span *ngIf="elem.role === '3'" class="ml-3">
                                                                          +                            <i class="fa fa-building"></i>
                                                                          +                            Administrator General
                                                                          +                        </span>
                                                                          +                    </div>
                                                                          +
                                                                          +            </div>
                                                                          +        </div>
                                                                          +        <div class="col-md-12  mx-30px">
                                                                          +			<ngb-pagination
                                                                          +                    [maxSize]="5"
                                                                          +				[(page)]="pager.page"
                                                                          +				[pageSize]="pager.size"
                                                                          +				(pageChange)="getData()"
                                                                          +				[collectionSize]="pager.total">
                                                                          +			</ngb-pagination>
                                                                          +		</div>
                                                                          +    </div>
                                                                          +
                                                                          +    <ng-template #displayList>
                                                                          +        <div class="table-responsive">
                                                                          +		<table class="table customTable table-sm">
                                                                          +			<thead>
                                                                          +					<tr>
                                                                          +						<!-- sortable="name" (sort)="onSort($event)" -->
                                                                          +						<th scope="col" appTableSort [pager]="pager" [value]="1" (sortChanged)="sortChanged($event)">Nume</th>
                                                                          +						<th scope="col" appTableSort [pager]="pager" [value]="2" (sortChanged)="sortChanged($event)">Tip</th>
                                                                          +						<th scope="col" appTableSort [pager]="pager" [value]="3" (sortChanged)="sortChanged($event)">Instituție</th>
                                                                          +						<!-- <th scope="col" appTableSort [pager]="pager" [value]="4" (sortChanged)="sortChanged($event)"></!-->
                                                                          +					</tr>
                                                                          +				</thead>
                                                                          +				<tbody>
                                                                          +					<tr *ngFor="let res of data">
                                                                          +						<!-- <tr> -->
                                                                          +							<td>{{res.name}}</td>
                                                                          +							<td>{{getRole(res.role)}}</td>
                                                                          +							<td>{{res.institution?.name}}</td>
                                                                          +							<td class="text-right"><button class="btn btn-info" [routerLink]="['id',res._id]">Vezi detalii</button></td>
                                                                          +						</tr>
                                                                          +					
                                                                          +				</tbody>
                                                                          +		</table>
                                                                          +     </div>
                                                                          +		<ngb-pagination
                                                                          +                    [maxSize]="5"
                                                                          +			[(page)]="pager.page"
                                                                          +			[pageSize]="pager.size"
                                                                          +			(pageChange)="getData()"
                                                                          +			[collectionSize]="pager.total">
                                                                          +		</ngb-pagination>
                                                                          +	</ng-template>
                                                                          +</div>
                                                                          +
                                                                          +<ng-template #content let-modal>
                                                                          +    <div class="modal-header">
                                                                          +        <h4 class="modal-title">Utilizator nou</h4>
                                                                          +        <button type="button" class="close" (click)="modal.dismiss('Cross click')">
                                                                          +            <span aria-hidden="true">&times;</span>
                                                                          +        </button>
                                                                          +    </div>
                                                                          +    <form [formGroup]="form">
                                                                          +        <div class="modal-body">
                                                                          +            <div class="row">
                                                                          +                <div class="mt-4 col-md-12">
                                                                          +                    <div class="form-group">
                                                                          +                        <label>Tipul utilizatorului</label>
                                                                          +                        <select formControlName="role" class="form-control">
                                                                          +                            <option [value]="role.id" *ngFor="let role of roles"> {{role.name}} </option>
                                                                          +                        </select>
                                                                          +                    </div>
                                                                          +                </div>
                                                                          +            </div>
                                                                          +        </div>
                                                                          +        <div class="modal-footer">
                                                                          +            <button type="button" ngbAutofocus class="btn btn-info rounded" (click)="continue()" [disabled]="form.invalid">Continuă</button>
                                                                          +        </div>
                                                                          +    </form>
                                                                          +</ng-template>
                                                                          +    
                                                                          +
                                                                          + +
                                                                          +

                                                                          + ./user-dashboard.component.scss +

                                                                          +
                                                                          ::ng-deep .institutie{
                                                                          +    .none-selected::before{
                                                                          +        content: 'Instituție' !important;
                                                                          +    }
                                                                          +}
                                                                          +
                                                                          + +
                                                                          +
                                                                          +
                                                                          +
                                                                          + Legend +
                                                                          +
                                                                          +
                                                                          Html element +
                                                                          +
                                                                          +
                                                                          Component +
                                                                          +
                                                                          +
                                                                          Html element with directive +
                                                                          +
                                                                          +
                                                                          + + +
                                                                          + + + + + + + + + + + + + + + + + + + + + +
                                                                          +
                                                                          +

                                                                          result-matching ""

                                                                          +
                                                                            +
                                                                            +
                                                                            +

                                                                            No results matching ""

                                                                            +
                                                                            +
                                                                            +
                                                                            + +
                                                                            +
                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/UserDetailsComponent.html b/documentation/components/UserDetailsComponent.html new file mode 100644 index 0000000..6d11be6 --- /dev/null +++ b/documentation/components/UserDetailsComponent.html @@ -0,0 +1,727 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                            +
                                                                            + + +
                                                                            +
                                                                            + + + + + + + + +
                                                                            +

                                                                            +

                                                                            File

                                                                            +

                                                                            +

                                                                            + src/app/pages/users/users/components/user-details/user-details.component.ts +

                                                                            + + + +

                                                                            +

                                                                            Implements

                                                                            +

                                                                            +

                                                                            + OnInit +

                                                                            + + +
                                                                            +

                                                                            Metadata

                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                            selectorapp-user-details
                                                                            styleUrls./user-details.component.scss
                                                                            templateUrl./user-details.component.html
                                                                            +
                                                                            + +
                                                                            +

                                                                            Index

                                                                            + + + + + + + + + + + + + + + + + + + + + +
                                                                            +
                                                                            Properties
                                                                            +
                                                                            + +
                                                                            +
                                                                            Methods
                                                                            +
                                                                            + +
                                                                            +
                                                                            + +
                                                                            +

                                                                            Constructor

                                                                            + + + + + + + + + + + + + +
                                                                            +constructor(route: ActivatedRoute, authService: AuthenticationService, router: Router, usersService: UsersService, location: Location) +
                                                                            + +
                                                                            +
                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                            NameTypeOptional
                                                                            route + ActivatedRoute + + No +
                                                                            authService + AuthenticationService + + No +
                                                                            router + Router + + No +
                                                                            usersService + UsersService + + No +
                                                                            location + Location + + No +
                                                                            +
                                                                            +
                                                                            +
                                                                            + + + + + +
                                                                            + +

                                                                            + Methods +

                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                            + + + + delete + + + +
                                                                            +delete() +
                                                                            + +
                                                                            +

                                                                            send to delete page

                                                                            +
                                                                            + +
                                                                            + Returns : void + +
                                                                            +
                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                            + + + + edit + + + +
                                                                            +edit() +
                                                                            + +
                                                                            +

                                                                            send to edit page

                                                                            +
                                                                            + +
                                                                            + Returns : void + +
                                                                            +
                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                            + + + + ngOnInit + + + +
                                                                            +ngOnInit() +
                                                                            + +
                                                                            + +
                                                                            + Returns : void + +
                                                                            +
                                                                            +
                                                                            +
                                                                            + +

                                                                            + Properties +

                                                                            + + + + + + + + + + + + + + + + + +
                                                                            + + + + data + + +
                                                                            + Type : any + +
                                                                            + +
                                                                            +

                                                                            store the user details

                                                                            +
                                                                            +
                                                                            + + + + + + + + + + + + + + + + + +
                                                                            + + + + loading + + +
                                                                            + Default value : false +
                                                                            + +
                                                                            +

                                                                            flag for HTML to display loading animation

                                                                            +
                                                                            +
                                                                            + + + + + + + + + + + + + + + + + + + + +
                                                                            + + + + userTypes + + +
                                                                            + Type : [] + +
                                                                            + Default value : [ 'Ofițer de intervenție', 'Administratorul instituțional', 'Administrator ONG', 'Administrator General'] +
                                                                            + +
                                                                            +

                                                                            user types to display instead of role which is number

                                                                            +
                                                                            +
                                                                            +
                                                                            + +
                                                                            + + +
                                                                            +
                                                                            import { Component, OnInit } from '@angular/core';
                                                                            +import { ActivatedRoute, Router } from '@angular/router';
                                                                            +import { UsersService } from '@app/core/service/users.service';
                                                                            +import { Location } from '@angular/common';
                                                                            +import { AuthenticationService } from '@app/core';
                                                                            +
                                                                            +@Component({
                                                                            +	selector: 'app-user-details',
                                                                            +	templateUrl: './user-details.component.html',
                                                                            +	styleUrls: ['./user-details.component.scss']
                                                                            +})
                                                                            +export class UserDetailsComponent implements OnInit {
                                                                            +	/**
                                                                            +	 * store the user details
                                                                            +	 */
                                                                            +	data: any;
                                                                            +	/**
                                                                            +	 * user types to display instead of role which is number
                                                                            +	 */
                                                                            +	userTypes = [ 'Ofițer de intervenție', 'Administratorul instituțional', 'Administrator ONG', 'Administrator General'];
                                                                            +	/**
                                                                            +	 * flag for HTML to display loading animation
                                                                            +	 */
                                                                            +	loading = false;
                                                                            +
                                                                            +	constructor(private route: ActivatedRoute,
                                                                            +		private authService: AuthenticationService,
                                                                            +		private router: Router,
                                                                            +		private usersService: UsersService,
                                                                            +		private location: Location) { }
                                                                            +
                                                                            +	ngOnInit() {
                                                                            +		this.usersService.getUser(this.route.snapshot.paramMap.get('id')).subscribe(response => {
                                                                            +			this.data = response;
                                                                            +		});
                                                                            +	}
                                                                            +/**
                                                                            +	 * send to edit page
                                                                            +	 */
                                                                            +	edit() {
                                                                            +		this.router.navigate(['/users/edit/' + this.data._id]);
                                                                            +	}
                                                                            +/**
                                                                            +	 * send to delete page
                                                                            +	 */
                                                                            +	delete() {
                                                                            +		/**
                                                                            +	 * check if is the current user deleting his own account
                                                                            +	 */
                                                                            +		if (this.authService.user._id === this.data._id) {
                                                                            +			if (confirm('Sunteți sigur că doriți să vă ștergeți contul?')) {
                                                                            +				this.loading = true;
                                                                            +				this.usersService.deleteUser(this.data._id).subscribe(response => {
                                                                            +					this.loading = false;
                                                                            +					this.authService.setCredentials();
                                                                            +					this.router.navigateByUrl('/login');
                                                                            +				}, () => {
                                                                            +					this.location.back();
                                                                            +				});
                                                                            +			}
                                                                            +		} else {
                                                                            +			if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) {
                                                                            +				this.loading = true;
                                                                            +				this.usersService.deleteUser(this.data._id).subscribe(response => {
                                                                            +					this.loading = false;
                                                                            +					this.location.back();
                                                                            +				}, () => {
                                                                            +					this.location.back();
                                                                            +				});
                                                                            +			}
                                                                            +		}
                                                                            +	}
                                                                            +}
                                                                            +
                                                                            +
                                                                            + +
                                                                            +
                                                                            <div class="container">
                                                                            +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                                            +        <app-back-button></app-back-button>
                                                                            +    </nav>
                                                                            +    <div class="ngo-details row">
                                                                            +            <h3 class="col-md-12">Profil Utilizator: {{data?.name}}</h3>
                                                                            +            
                                                                            +            <span class="col-md-12 mt-1"><span class="fa fa-envelope"></span>  {{data?.email}}</span>
                                                                            +            <span class="col-md-12 mt-1"><span class="fa fa-phone"></span>  {{data?.phone}}</span>
                                                                            +            
                                                                            +            <div class="col-md-12 mt-1">
                                                                            +                <span><b>Tipul utilizatorului: </b> {{ userTypes[data?.role] }}</span>
                                                                            +            </div>
                                                                            +            <div class="col-md-12 mt-1">
                                                                            +                    <span><b>Data adăugării: </b> {{ data?.created_at | date: 'dd.MM.yyyy' }}</span>
                                                                            +            </div>
                                                                            +    </div>
                                                                            +
                                                                            +    <button class="btn btn-info rounded mt-3" (click)="edit()" [disabled]="!data">
                                                                            +        <span class="fa fa-edit"></span>
                                                                            +        Editează utilizatorul
                                                                            +    </button>
                                                                            +    <button class="btn btn-danger rounded mt-3 ml-3" (click)="delete()" [disabled]="!data" *ngIf="!loading">
                                                                            +        <span class="fa fa-trash-o"></span>
                                                                            +        Șterge utilizatorul
                                                                            +    </button>
                                                                            +    <div class="spinner-border text-danger" role="status" *ngIf="loading">
                                                                            +        <span class="sr-only">Loading...</span>
                                                                            +    </div>
                                                                            +</div>
                                                                            +
                                                                            +
                                                                            + +
                                                                            +

                                                                            + ./user-details.component.scss +

                                                                            +
                                                                            +
                                                                            + +
                                                                            +
                                                                            +
                                                                            +
                                                                            + Legend +
                                                                            +
                                                                            +
                                                                            Html element +
                                                                            +
                                                                            +
                                                                            Component +
                                                                            +
                                                                            +
                                                                            Html element with directive +
                                                                            +
                                                                            +
                                                                            + + +
                                                                            + + + + + + + + + + + + + + + + + + + + + +
                                                                            +
                                                                            +

                                                                            result-matching ""

                                                                            +
                                                                              +
                                                                              +
                                                                              +

                                                                              No results matching ""

                                                                              +
                                                                              +
                                                                              +
                                                                              + +
                                                                              +
                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/UsersComponent.html b/documentation/components/UsersComponent.html new file mode 100644 index 0000000..adfc268 --- /dev/null +++ b/documentation/components/UsersComponent.html @@ -0,0 +1,352 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                              +
                                                                              + + +
                                                                              +
                                                                              + + + + + + + + +
                                                                              +

                                                                              +

                                                                              File

                                                                              +

                                                                              +

                                                                              + src/app/pages/users/users/users.component.ts +

                                                                              + + + +

                                                                              +

                                                                              Implements

                                                                              +

                                                                              +

                                                                              + OnInit +

                                                                              + + +
                                                                              +

                                                                              Metadata

                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                              selectorapp-users
                                                                              styleUrls./users.component.scss
                                                                              templateUrl./users.component.html
                                                                              +
                                                                              + +
                                                                              +

                                                                              Index

                                                                              + + + + + + + + + + + + + + + +
                                                                              +
                                                                              Methods
                                                                              +
                                                                              + +
                                                                              +
                                                                              + +
                                                                              +

                                                                              Constructor

                                                                              + + + + + + + + + + + + + +
                                                                              +constructor() +
                                                                              + +
                                                                              +

                                                                              wrapper for the users pages. acts as frame

                                                                              +
                                                                              +
                                                                              +
                                                                              + + + + + +
                                                                              + +

                                                                              + Methods +

                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                              + + + + ngOnInit + + + +
                                                                              +ngOnInit() +
                                                                              + +
                                                                              + +
                                                                              + Returns : void + +
                                                                              +
                                                                              +
                                                                              + +
                                                                              + + +
                                                                              +
                                                                              import { Component, OnInit } from '@angular/core';
                                                                              +@Component({
                                                                              +	selector: 'app-users',
                                                                              +	templateUrl: './users.component.html',
                                                                              +	styleUrls: ['./users.component.scss']
                                                                              +})
                                                                              +
                                                                              +export class UsersComponent implements OnInit {
                                                                              +	/**
                                                                              +	 * wrapper for the users pages. acts as frame
                                                                              +	 */
                                                                              +	constructor() { }
                                                                              +
                                                                              +	ngOnInit() {
                                                                              +	}
                                                                              +
                                                                              +}
                                                                              +
                                                                              +
                                                                              + +
                                                                              +
                                                                              <router-outlet></router-outlet>
                                                                              +
                                                                              + +
                                                                              +

                                                                              + ./users.component.scss +

                                                                              +
                                                                              +
                                                                              + +
                                                                              +
                                                                              +
                                                                              +
                                                                              + Legend +
                                                                              +
                                                                              +
                                                                              Html element +
                                                                              +
                                                                              +
                                                                              Component +
                                                                              +
                                                                              +
                                                                              Html element with directive +
                                                                              +
                                                                              +
                                                                              + + +
                                                                              + + + + + + + + + + + + + + + + + + + + + +
                                                                              +
                                                                              +

                                                                              result-matching ""

                                                                              +
                                                                                +
                                                                                +
                                                                                +

                                                                                No results matching ""

                                                                                +
                                                                                +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/VolunteerDashboardComponent.html b/documentation/components/VolunteerDashboardComponent.html new file mode 100644 index 0000000..7dee5e7 --- /dev/null +++ b/documentation/components/VolunteerDashboardComponent.html @@ -0,0 +1,1556 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                +
                                                                                + + +
                                                                                +
                                                                                + + + + + + + + +
                                                                                +

                                                                                +

                                                                                File

                                                                                +

                                                                                +

                                                                                + src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.ts +

                                                                                + + + +

                                                                                +

                                                                                Implements

                                                                                +

                                                                                +

                                                                                + OnInit +

                                                                                + + +
                                                                                +

                                                                                Metadata

                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                selectorapp-volunteer-dashboard
                                                                                styleUrls./volunteer-dashboard.component.scss
                                                                                templateUrl./volunteer-dashboard.component.html
                                                                                +
                                                                                + +
                                                                                +

                                                                                Index

                                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                                +
                                                                                Properties
                                                                                +
                                                                                + +
                                                                                +
                                                                                Methods
                                                                                +
                                                                                + +
                                                                                +
                                                                                + +
                                                                                +

                                                                                Constructor

                                                                                + + + + + + + + + + + + + +
                                                                                +constructor(volunteerService: VolunteerService, breakpointObserver: BreakpointObserver, citiesandcounties: CitiesCountiesService, filterService: FiltersService, authService: AuthenticationService, router: Router) +
                                                                                + +
                                                                                +
                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                NameTypeOptional
                                                                                volunteerService + VolunteerService + + No +
                                                                                breakpointObserver + BreakpointObserver + + No +
                                                                                citiesandcounties + CitiesCountiesService + + No +
                                                                                filterService + FiltersService + + No +
                                                                                authService + AuthenticationService + + No +
                                                                                router + Router + + No +
                                                                                +
                                                                                +
                                                                                +
                                                                                + + + + + +
                                                                                + +

                                                                                + Methods +

                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + addvolunteer + + + +
                                                                                +addvolunteer() +
                                                                                + +
                                                                                +

                                                                                send user to add volunteers. if is NGO the ngo id is static.

                                                                                +
                                                                                + +
                                                                                + Returns : void + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + filterChanged + + + +
                                                                                +filterChanged(id?: number) +
                                                                                + +
                                                                                +

                                                                                filter callback. Filters added to pager and then a request is made

                                                                                +
                                                                                + +
                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                NameTypeOptionalDescription
                                                                                id + number + + Yes + +

                                                                                the index in the pager filters and filters Selected array

                                                                                + +
                                                                                +
                                                                                +
                                                                                +
                                                                                +
                                                                                + Returns : void + +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + getData + + + +
                                                                                +getData() +
                                                                                + +
                                                                                +

                                                                                get data from server and store localy

                                                                                +
                                                                                + +
                                                                                + Returns : void + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + goToOrganisation + + + +
                                                                                +goToOrganisation(id: string, e: any) +
                                                                                + +
                                                                                +

                                                                                navigate to organisation by id

                                                                                +
                                                                                + +
                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                NameTypeOptionalDescription
                                                                                id + string + + No + +

                                                                                of the NGO to display

                                                                                + +
                                                                                e + any + + No + +
                                                                                +
                                                                                +
                                                                                +
                                                                                +
                                                                                + Returns : void + +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + ngOnInit + + + +
                                                                                +ngOnInit() +
                                                                                + +
                                                                                + +
                                                                                + Returns : void + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + searchChanged + + + +
                                                                                +searchChanged(pager: any) +
                                                                                + +
                                                                                +

                                                                                search callback. Filters added to pager and then a request is made

                                                                                +
                                                                                + +
                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                NameTypeOptionalDescription
                                                                                pager + any + + No + +

                                                                                the pager with the search filer added

                                                                                + +
                                                                                +
                                                                                +
                                                                                +
                                                                                +
                                                                                + Returns : void + +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + sortChanged + + + +
                                                                                +sortChanged(pager: any) +
                                                                                + +
                                                                                +

                                                                                sort callback. Filters added to pager and then a request is made

                                                                                +
                                                                                + +
                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                NameTypeOptionalDescription
                                                                                pager + any + + No + +

                                                                                the pager with the search filer added

                                                                                + +
                                                                                +
                                                                                +
                                                                                +
                                                                                +
                                                                                + Returns : void + +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + switchtoblock + + + +
                                                                                +switchtoblock() +
                                                                                + +
                                                                                +

                                                                                set flag for HTML to grid view

                                                                                +
                                                                                + +
                                                                                + Returns : void + +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + switchtolist + + + +
                                                                                +switchtolist() +
                                                                                + +
                                                                                +

                                                                                set flag for HTML to list view

                                                                                +
                                                                                + +
                                                                                + Returns : void + +
                                                                                +
                                                                                +
                                                                                +
                                                                                + +

                                                                                + Properties +

                                                                                + + + + + + + + + + + + + + +
                                                                                + + + + Public + authService + + +
                                                                                + Type : AuthenticationService + +
                                                                                + +
                                                                                + + + + + + + + + + + + + + +
                                                                                + + + + Public + breakpointObserver + + +
                                                                                + Type : BreakpointObserver + +
                                                                                + +
                                                                                + + + + + + + + + + + + + + + + + +
                                                                                + + + + displayBlock + + +
                                                                                + Default value : true +
                                                                                + +
                                                                                +

                                                                                flag for HTML to know how to display data

                                                                                +
                                                                                +
                                                                                + + + + + + + + + + + + + + +
                                                                                + + + + locationFilterValues + + +
                                                                                + Type : any[] + +
                                                                                + +
                                                                                + + + + + + + + + + + + + + + + + +
                                                                                + + + + NGOFilterValues + + +
                                                                                + Type : any[] + +
                                                                                + +
                                                                                +

                                                                                values to select from when filtering

                                                                                +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + pager + + +
                                                                                + Type : any + +
                                                                                + Default value : {} +
                                                                                + +
                                                                                +

                                                                                pager for the resources table

                                                                                +
                                                                                +
                                                                                + + + + + + + + + + + + + + + + + +
                                                                                + + + + selected + + +
                                                                                + Default value : Array(3) +
                                                                                + +
                                                                                +

                                                                                selected filters array

                                                                                +
                                                                                +
                                                                                + + + + + + + + + + + + + + +
                                                                                + + + + specializationFilterValues + + +
                                                                                + Type : any[] + +
                                                                                + +
                                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                                + + + + volunteersData + + +
                                                                                + Type : any + +
                                                                                + Default value : [] +
                                                                                + +
                                                                                +

                                                                                store the volunteers list

                                                                                +
                                                                                +
                                                                                +
                                                                                + +
                                                                                + + +
                                                                                +
                                                                                import { Component, OnInit } from '@angular/core';
                                                                                +import { BreakpointObserver } from '@angular/cdk/layout';
                                                                                +import { VolunteerService } from '../../../volunteers.service';
                                                                                +import { CitiesCountiesService, FiltersService, AuthenticationService } from '@app/core';
                                                                                +import { Router } from '@angular/router';
                                                                                +
                                                                                +@Component({
                                                                                +	selector: 'app-volunteer-dashboard',
                                                                                +	templateUrl: './volunteer-dashboard.component.html',
                                                                                +	styleUrls: ['./volunteer-dashboard.component.scss']
                                                                                +})
                                                                                +export class VolunteerDashboardComponent implements OnInit {
                                                                                +		/**
                                                                                +	 * store the volunteers list
                                                                                +	 */
                                                                                +	volunteersData: any = [];
                                                                                +		/**
                                                                                +	 * pager for the resources table
                                                                                +	 */
                                                                                +	pager: any = {};
                                                                                +	/**
                                                                                +	 * flag for HTML to know how to display data
                                                                                +	 */
                                                                                +	displayBlock = true;
                                                                                +	/**
                                                                                +	 * selected filters array
                                                                                +	 */
                                                                                +	selected = Array(3);
                                                                                +	/**
                                                                                +	 *values to select from when filtering
                                                                                +	 */
                                                                                +	NGOFilterValues: any[];
                                                                                +	locationFilterValues: any[];
                                                                                +	specializationFilterValues: any[];
                                                                                +
                                                                                +	constructor(private volunteerService: VolunteerService, public breakpointObserver: BreakpointObserver,
                                                                                +			private citiesandcounties: CitiesCountiesService, private filterService: FiltersService,
                                                                                +			public authService: AuthenticationService, private router: Router) { }
                                                                                +
                                                                                +	ngOnInit() {
                                                                                +		this.volunteerService.setPager();
                                                                                +		this.pager = this.volunteerService.getPager();
                                                                                +
                                                                                +		this.getData();
                                                                                +		/**
                                                                                +		 * get filterable values
                                                                                +		 */
                                                                                +		this.citiesandcounties.getCounties('').subscribe((response:  any) => {
                                                                                +			const aux = response;
                                                                                +			aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id);
                                                                                +			this.locationFilterValues = aux;
                                                                                +		});
                                                                                +
                                                                                +		this.filterService.getorganisationbyName('').subscribe((data) => {
                                                                                +			this.NGOFilterValues = data.map((elem: any) => {
                                                                                +				return {id: elem._id, name: elem.name};
                                                                                +				});
                                                                                +			// this.ngofilterResult = data.map((elem:any) => elem.name);
                                                                                +		});
                                                                                +		this.filterService.getSpecializationFilters().subscribe((data) => {
                                                                                +			this.specializationFilterValues = data.map((elem: any) => {
                                                                                +				return {id: elem._id, name: elem.name};
                                                                                +			});
                                                                                +		});
                                                                                +
                                                                                +		/**
                                                                                +	 *observe screen chage and and switch to grid view if screen is too smal
                                                                                +	 */
                                                                                +		this.breakpointObserver.observe([
                                                                                +			'(max-width: 768px)'
                                                                                +		]).subscribe(result => {
                                                                                +			if (result.matches) {
                                                                                +				this.switchtoblock();
                                                                                +			}
                                                                                +		});
                                                                                +	}
                                                                                +/**
                                                                                +	 * get data from server and store localy
                                                                                +
                                                                                +	 */
                                                                                +	getData() {
                                                                                +		this.volunteerService.getVolunteers(this.pager).subscribe((element: any) => {
                                                                                +			if (element) {
                                                                                +				this.volunteersData = element.data;
                                                                                +				this.pager.total = element.pager.total;
                                                                                +			}
                                                                                +		});
                                                                                +	}
                                                                                +/**
                                                                                +	 * send user to add volunteers. if is NGO the ngo id is static.
                                                                                +	 */
                                                                                +	addvolunteer() {
                                                                                +		if (this.authService.is('NGO')) {
                                                                                +			const navigationExtras = {
                                                                                +				state: {
                                                                                +					ngo: {
                                                                                +						// TODO: extragere informatiilor din contu utilizatorului
                                                                                +						name: this.authService.user.organisation.name,
                                                                                +						ngoid: this.authService.user.organisation._id
                                                                                +					}
                                                                                +				}
                                                                                +			};
                                                                                +			this.router.navigateByUrl('/volunteers/add', navigationExtras);
                                                                                +		} else {
                                                                                +			this.router.navigate(['volunteers/add']);
                                                                                +		}
                                                                                +	}
                                                                                +/**
                                                                                +	 * sort callback. Filters added to pager and then a request is made
                                                                                +	 * @param {any} pager the pager with the search filer added
                                                                                +	 */
                                                                                +	sortChanged(pager: any) {
                                                                                +		this.pager = pager;
                                                                                +		this.getData();
                                                                                +	}
                                                                                +/**
                                                                                +	 * search callback. Filters added to pager and then a request is made
                                                                                +	 * @param {any} pager the pager with the search filer added
                                                                                +	 */
                                                                                +	searchChanged(pager: any) {
                                                                                +		this.pager = pager;
                                                                                +		this.getData();
                                                                                +	}
                                                                                +/**
                                                                                +	 * filter callback. Filters added to pager and then a request is made
                                                                                +	 * @param {number} id the index in the pager filters and filters Selected array
                                                                                +	 */
                                                                                +	filterChanged(id?: number) {
                                                                                +		console.log(this.selected[id]);
                                                                                +		this.pager.filters[id] =  this.selected[id].map((elem: any) => elem.id).join(',');
                                                                                +		this.getData();
                                                                                +	}
                                                                                +
                                                                                +	/**
                                                                                +	 * set flag for HTML to list view
                                                                                +	 */
                                                                                +	switchtolist() {
                                                                                +		this.displayBlock = false;
                                                                                +	}
                                                                                +	/**
                                                                                +	 * set flag for HTML to grid view
                                                                                +	 */
                                                                                +	switchtoblock() {
                                                                                +		this.displayBlock = true;
                                                                                +	}
                                                                                +	/**
                                                                                +	 * navigate to organisation by id
                                                                                +	 * @param {string} id of the NGO to display
                                                                                +	 */
                                                                                +	goToOrganisation(id: string, e: any) {
                                                                                +		e.preventDefault();
                                                                                +		this.router.navigate(['../organisations/id/' + id]);
                                                                                +	}
                                                                                +
                                                                                +}
                                                                                +
                                                                                +
                                                                                + +
                                                                                +
                                                                                <div class="container">
                                                                                +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                                                +        <h4 class="navtitle mb-2"> Voluntari </h4> 
                                                                                +        <div class="form-inline ml-auto">
                                                                                +            <app-table-search id=3 [pager]="pager" (searchChanged)="searchChanged($event)"></app-table-search>
                                                                                +            <div class="btn-group btn-group-toggle m-2 hidden-button" ngbRadioGroup name="radioBasic"
                                                                                +                [(ngModel)]="displayBlock">
                                                                                +                <label ngbButtonLabel (click)="switchtoblock()" class="btn btn-primary">
                                                                                +                    <input ngbButton type="radio" [value]="true"><span class="fa fa-th-large"></span>
                                                                                +                </label>
                                                                                +                <label ngbButtonLabel (click)="switchtolist()" class="btn btn-primary">
                                                                                +                    <input ngbButton type="radio" [value]="false"><span class="fa fa-bars"></span>
                                                                                +                </label>
                                                                                +            </div>
                                                                                +            <button *ngIf ="authService.is('DSU', 'NGO')" (click)="addvolunteer()"  class="add-btn btn-adjusting btn btn-info btn-rounded m-2">
                                                                                +                <span class="fa fa-plus-circle"></span>&nbsp;&nbsp;Adaugă Voluntar
                                                                                +            </button>
                                                                                +        </div>
                                                                                +    </nav>
                                                                                +    <div class="filters  my-3 mx-30px row">
                                                                                +        <span class='padding-rem'>Total: {{pager.total}}</span>
                                                                                +        <span class='padding-rem'>&nbsp;&nbsp;</span>
                                                                                +        <span class='padding-rem'>Filtrează după: &nbsp;</span>
                                                                                +        <ngx-multiselect
                                                                                +			class="location"
                                                                                +			[(ngModel)]="selected[0]"
                                                                                +			showMaxLables = "1"
                                                                                +			[options]="locationFilterValues"
                                                                                +			(onItemClick)="filterChanged(0)"
                                                                                +			(onSelectNone)="filterChanged(0)"
                                                                                +			(onSelectAll)="filterChanged(0)">
                                                                                +		</ngx-multiselect>
                                                                                +        <span class="vertical-bar">&nbsp;</span>
                                                                                +        <ngx-multiselect
                                                                                +			class="specialization"
                                                                                +			[(ngModel)]="selected[1]"
                                                                                +			showMaxLables = "1"
                                                                                +			[options]="specializationFilterValues"
                                                                                +			(onItemClick)="filterChanged(1)"
                                                                                +			(onSelectNone)="filterChanged(1)"
                                                                                +			(onSelectAll)="filterChanged(1)">
                                                                                +		</ngx-multiselect>
                                                                                +        <span *ngIf="authService.is('DSU')" class="vertical-bar">&nbsp;</span>
                                                                                +        <ngx-multiselect
                                                                                +            *ngIf="authService.is('DSU')"
                                                                                +            class="ngo"
                                                                                +            [(ngModel)]="selected[2]"
                                                                                +            showMaxLables = "1"
                                                                                +            [options]="NGOFilterValues"
                                                                                +            (onItemClick)="filterChanged(2)"
                                                                                +            (onSelectNone)="filterChanged(2)"
                                                                                +            (onSelectAll)="filterChanged(2)">
                                                                                +        </ngx-multiselect>
                                                                                +        </div>
                                                                                +
                                                                                +    <div *ngIf="displayBlock; else displayList" class="mt-5 cardlist row">
                                                                                +        <div *ngFor="let elem of volunteersData" class="d-flex col-md-6 col-sm-12 col-lg-4">
                                                                                +            <div class="card mb-2" style="flex-grow: 1">
                                                                                +                <div class="card-body" [routerLink]="['id',elem._id]">
                                                                                +                    <a class="btn btn-fix text-left d-block">
                                                                                +                        <h4 class="card-title">{{elem.name}}</h4>
                                                                                +                        <div class="card-text row">
                                                                                +                            <span class="col-md-12">
                                                                                +                                <i class="fa fa-envelope"></i>
                                                                                +                                {{ elem.email }}
                                                                                +                            </span>
                                                                                +                            <span class="col-md-12">
                                                                                +                                <i class="fa fa-phone"></i>
                                                                                +                                {{ elem.phone }}
                                                                                +                            </span>
                                                                                +                            <span *ngIf="!!elem.organisation && !authService.is('INS')" class="col-md-12">
                                                                                +                                <i class="fa fa-building"></i>
                                                                                +                                <a (click)="goToOrganisation(elem.organisation._id, $event)" href="javascript:void(0);" class="ml-1">{{ elem.organisation.name }}</a>        
                                                                                +                            </span>
                                                                                +                            <span *ngIf="!elem.organisation && !authService.is('INS')" class="col-md-12"> 
                                                                                +                                <i class="fa fa-building"></i>
                                                                                +                                Neafiliat
                                                                                +                            </span>        
                                                                                +                        </div>
                                                                                +                    </a>
                                                                                +                </div>
                                                                                +            </div>
                                                                                +        </div>
                                                                                +        <div class="col-md-12 mx-30px">
                                                                                +                <ngb-pagination
                                                                                +                    [maxSize]="5"
                                                                                +                    [(page)]="pager.page"
                                                                                +                    [pageSize]="pager.size"
                                                                                +                    (pageChange)="getData()"
                                                                                +                    [collectionSize]="pager.total">
                                                                                +                </ngb-pagination>
                                                                                +            </div>
                                                                                +    </div>
                                                                                +
                                                                                +    <ng-template #displayList>
                                                                                +        <div class="table-responsive">
                                                                                +            <table class="table customTable table-sm">
                                                                                +                <thead>
                                                                                +                    <tr>
                                                                                +                        <!-- sortable="name" (sort)="onSort($event)" -->
                                                                                +                        <th scope="col" appTableSort [pager]="pager" [value]="1" (sortChanged)="sortChanged($event)">
                                                                                +                            Nume</th>
                                                                                +                        <th scope="col" appTableSort [pager]="pager" [value]="2" (sortChanged)="sortChanged($event)">
                                                                                +                            Locație</th>
                                                                                +                        <th *ngIf="!authService.is('INS')" scope="col" appTableSort [pager]="pager" [value]="3" (sortChanged)="sortChanged($event)">
                                                                                +                            Organizație</th>
                                                                                +                        <th scope="col" class="non-clickable">Specializări</th>
                                                                                +                    </tr>
                                                                                +                </thead>
                                                                                +                <tbody>
                                                                                +                    <tr *ngFor="let res of volunteersData">
                                                                                +                        <!-- <tr> -->
                                                                                +                        <td>{{res.name}}</td>
                                                                                +                        <td>{{res.city?.name}}, {{res.county?.name}}</td>
                                                                                +                        <td *ngIf="!authService.is('INS')">{{res.organisation?.name || 'Neafiliat'}}</td>
                                                                                +                        <td><div *ngFor="let elem of res?.courses">
                                                                                +                                {{elem.course_name.name}}
                                                                                +                            </div></td>
                                                                                +                        <!-- <td>{{res.updated_at}}</td> -->
                                                                                +                        <td class="text-right"><button class="btn btn-info" [routerLink]="['id',res._id]">Vezi
                                                                                +                                detalii</button></td>
                                                                                +                    </tr>
                                                                                +
                                                                                +                </tbody>
                                                                                +            </table>
                                                                                +        </div>
                                                                                +        <ngb-pagination
                                                                                +                    [maxSize]="5" [(page)]="pager.page" [pageSize]="pager.size" (pageChange)="getData()"
                                                                                +            [collectionSize]="pager.total">
                                                                                +        </ngb-pagination>
                                                                                +    </ng-template>
                                                                                +</div>
                                                                                +
                                                                                + +
                                                                                +

                                                                                + ./volunteer-dashboard.component.scss +

                                                                                +
                                                                                ::ng-deep .specialization{
                                                                                +    .none-selected:before{
                                                                                +        content:'Specializări' !important;
                                                                                +    }
                                                                                +}
                                                                                +::ng-deep .ngo{
                                                                                +    .none-selected:before{
                                                                                +        content:'Organizații' !important;
                                                                                +    }
                                                                                +}
                                                                                +.non-clickable{
                                                                                +    cursor: default !important;
                                                                                +}
                                                                                +
                                                                                + +
                                                                                +
                                                                                +
                                                                                +
                                                                                + Legend +
                                                                                +
                                                                                +
                                                                                Html element +
                                                                                +
                                                                                +
                                                                                Component +
                                                                                +
                                                                                +
                                                                                Html element with directive +
                                                                                +
                                                                                +
                                                                                + + +
                                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                                +
                                                                                +

                                                                                result-matching ""

                                                                                +
                                                                                  +
                                                                                  +
                                                                                  +

                                                                                  No results matching ""

                                                                                  +
                                                                                  +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/VolunteerDetailsComponent.html b/documentation/components/VolunteerDetailsComponent.html new file mode 100644 index 0000000..ee17882 --- /dev/null +++ b/documentation/components/VolunteerDetailsComponent.html @@ -0,0 +1,1046 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                  +
                                                                                  + + +
                                                                                  +
                                                                                  + + + + + + + + +
                                                                                  +

                                                                                  +

                                                                                  File

                                                                                  +

                                                                                  +

                                                                                  + src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.ts +

                                                                                  + + + +

                                                                                  +

                                                                                  Implements

                                                                                  +

                                                                                  +

                                                                                  + OnInit +

                                                                                  + + +
                                                                                  +

                                                                                  Metadata

                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                  selectorapp-volunteer-details
                                                                                  styleUrls./volunteer-details.component.scss
                                                                                  templateUrl./volunteer-details.component.html
                                                                                  +
                                                                                  + +
                                                                                  +

                                                                                  Index

                                                                                  + + + + + + + + + + + + + + + + + + + + + +
                                                                                  +
                                                                                  Properties
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  Methods
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  + +
                                                                                  +

                                                                                  Constructor

                                                                                  + + + + + + + + + + + + + +
                                                                                  +constructor(volunteerService: VolunteerService, route: ActivatedRoute, authService: AuthenticationService, router: Router, location: Location) +
                                                                                  + +
                                                                                  +

                                                                                  Vounteer details component

                                                                                  +
                                                                                  +
                                                                                  + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                  NameTypeOptional
                                                                                  volunteerService + VolunteerService + + No +
                                                                                  route + ActivatedRoute + + No +
                                                                                  authService + AuthenticationService + + No +
                                                                                  router + Router + + No +
                                                                                  location + Location + + No +
                                                                                  +
                                                                                  +
                                                                                  +
                                                                                  + + + + + +
                                                                                  + +

                                                                                  + Methods +

                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                  + + + + deleteSelf + + + +
                                                                                  +deleteSelf() +
                                                                                  + +
                                                                                  +

                                                                                  delete this volunteer

                                                                                  +
                                                                                  + +
                                                                                  + Returns : void + +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                  + + + + edit + + + +
                                                                                  +edit() +
                                                                                  + +
                                                                                  +

                                                                                  edit this volunteer

                                                                                  +
                                                                                  + +
                                                                                  + Returns : void + +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                  + + + + getAllocations + + + +
                                                                                  +getAllocations() +
                                                                                  + +
                                                                                  +

                                                                                  get alocations data from server

                                                                                  +
                                                                                  + +
                                                                                  + Returns : void + +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                  + + + + getData + + + +
                                                                                  +getData() +
                                                                                  + +
                                                                                  +

                                                                                  get volunteer data from server

                                                                                  +
                                                                                  + +
                                                                                  + Returns : void + +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                  + + + + ngOnInit + + + +
                                                                                  +ngOnInit() +
                                                                                  + +
                                                                                  + +
                                                                                  + Returns : void + +
                                                                                  +
                                                                                  +
                                                                                  +
                                                                                  + +

                                                                                  + Properties +

                                                                                  + + + + + + + + + + + + + + + + + + + + +
                                                                                  + + + + allocations + + +
                                                                                  + Type : any[] + +
                                                                                  + Default value : [] +
                                                                                  + +
                                                                                  +

                                                                                  store alocations data

                                                                                  +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + +
                                                                                  + + + + Public + authService + + +
                                                                                  + Type : AuthenticationService + +
                                                                                  + +
                                                                                  + + + + + + + + + + + + + + + + + +
                                                                                  + + + + canEdit + + +
                                                                                  + Default value : true +
                                                                                  + +
                                                                                  +

                                                                                  flag for HTML to display edit button

                                                                                  +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + +
                                                                                  + + + + Public + data + + +
                                                                                  + Type : any + +
                                                                                  + +
                                                                                  +

                                                                                  store volunteer data

                                                                                  +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + +
                                                                                  + + + + hasAccreditation + + +
                                                                                  + Default value : false +
                                                                                  + +
                                                                                  + + + + + + + + + + + + + + + + + +
                                                                                  + + + + hasAlocation + + +
                                                                                  + Default value : false +
                                                                                  + +
                                                                                  +

                                                                                  flag for ngtemplate in HTML

                                                                                  +
                                                                                  +
                                                                                  + + + + + + + + + + + + + + + + + +
                                                                                  + + + + loading + + +
                                                                                  + Default value : false +
                                                                                  + +
                                                                                  +

                                                                                  flag for HTML to display loading animation

                                                                                  +
                                                                                  +
                                                                                  +
                                                                                  + +
                                                                                  + + +
                                                                                  +
                                                                                  import { Component, OnInit } from '@angular/core';
                                                                                  +import { ActivatedRoute, Router } from '@angular/router';
                                                                                  +import { VolunteerService } from '../../../volunteers.service';
                                                                                  +import { AuthenticationService } from '@app/core';
                                                                                  +import { Location } from '@angular/common';
                                                                                  +
                                                                                  +@Component({
                                                                                  +	selector: 'app-volunteer-details',
                                                                                  +	templateUrl: './volunteer-details.component.html',
                                                                                  +	styleUrls: ['./volunteer-details.component.scss']
                                                                                  +})
                                                                                  +export class VolunteerDetailsComponent implements OnInit {
                                                                                  +	/**
                                                                                  +	 * store volunteer data
                                                                                  +	 */
                                                                                  +	public data: any;
                                                                                  +	/**
                                                                                  +	* flag for ngtemplate in HTML
                                                                                  +	*/
                                                                                  +	hasAlocation = false;
                                                                                  +	hasAccreditation = false;
                                                                                  +	/**
                                                                                  +	 * flag for HTML to display edit button
                                                                                  +	 */
                                                                                  +	canEdit = true;
                                                                                  +	/**
                                                                                  +	 * flag for HTML to display loading animation
                                                                                  +	 */
                                                                                  +	loading = false;
                                                                                  +	/**
                                                                                  +	 * store alocations data
                                                                                  +	 */
                                                                                  +	allocations: any[] = [];
                                                                                  +
                                                                                  +	/**
                                                                                  +	 * Vounteer details component
                                                                                  +	 */
                                                                                  +
                                                                                  +	constructor(private volunteerService: VolunteerService,
                                                                                  +		private route: ActivatedRoute,
                                                                                  +		public authService: AuthenticationService,
                                                                                  +		private router: Router,
                                                                                  +		private location: Location) { }
                                                                                  +
                                                                                  +	ngOnInit() {
                                                                                  +		this.getData();
                                                                                  +		this.getAllocations();
                                                                                  +	}
                                                                                  +/**
                                                                                  +	 * edit this volunteer
                                                                                  +	 */
                                                                                  +	edit() {
                                                                                  +		this.router.navigateByUrl(`/volunteers/edit/${this.data._id}`);
                                                                                  +	}
                                                                                  +/**
                                                                                  +	 * delete this volunteer
                                                                                  +	 */
                                                                                  +	deleteSelf() {
                                                                                  +		if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) {
                                                                                  +			this.loading = true;
                                                                                  +			this.volunteerService.deleteVolunteer(this.data._id).subscribe(() => {
                                                                                  +				this.loading = false;
                                                                                  +				this.location.back();
                                                                                  +			}, () => {
                                                                                  +				this.loading = false;
                                                                                  +			});
                                                                                  +		}
                                                                                  +	}
                                                                                  +/**
                                                                                  +	 * get alocations data from server
                                                                                  +	 */
                                                                                  +	getAllocations() {
                                                                                  +		this.volunteerService.getAllocations(this.route.snapshot.paramMap.get('id')).subscribe((data: any[]) => {
                                                                                  +			this.allocations = data;
                                                                                  +
                                                                                  +			if (this.allocations.length > 0) {
                                                                                  +				this.hasAlocation = true;
                                                                                  +			}
                                                                                  +		});
                                                                                  +	}
                                                                                  +/**
                                                                                  +	 * get volunteer data from server
                                                                                  +	 */
                                                                                  +	getData() {
                                                                                  +		this.volunteerService.getVolunteer(this.route.snapshot.paramMap.get('id')).subscribe((data) => {
                                                                                  +			this.data = data;
                                                                                  +
                                                                                  +			if (data.courses && data.courses.length > 0) {
                                                                                  +				this.hasAccreditation = true;
                                                                                  +			}
                                                                                  +
                                                                                  +			this.canEdit = this.authService.is('DSU') ||
                                                                                  +			(this.authService.is('NGO') && (this.data.organisation._id === this.authService.user.organisation._id));
                                                                                  +		});
                                                                                  +	}
                                                                                  +
                                                                                  +}
                                                                                  +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  <div class="container">
                                                                                  +    <nav class="navbar navbar-expand-lg justify-content-between navbar-light my-5">
                                                                                  +        <app-back-button></app-back-button>
                                                                                  +            <div class="mx-2 my-sm-0">
                                                                                  +                <button *ngIf="canEdit && !loading" (click)="deleteSelf()" class="btn btn-danger mx-2 my-sm-0"><span
                                                                                  +                    class="fa fa-trash-o"></span>&nbsp;&nbsp;Șterge Voluntarul</button>
                                                                                  +                <div class="spinner-border text-danger" role="status" *ngIf="canEdit && loading">
                                                                                  +                    <span class="sr-only">Loading...</span>
                                                                                  +                </div>
                                                                                  +                <button (click)="edit()" class="mx-2 btn btn-info" *ngIf="canEdit"><span class="fa fa-edit"></span>&nbsp;&nbsp;Modifică</button>
                                                                                  +                <!-- <button></button> -->
                                                                                  +            </div>
                                                                                  +    </nav>
                                                                                  +    <div class="ngo-details row">
                                                                                  +            <h3 class="col-md-12">Profil Voluntar: {{data?.name}}</h3>
                                                                                  +            
                                                                                  +            <span class="col-md-12"><span class="fa fa-envelope"></span>  {{data?.email}}</span>
                                                                                  +            <span class="col-md-12"><span class="fa fa-phone"></span>  {{data?.phone}}</span>
                                                                                  +            <span class="col-md-12"><b>Organizație: </b> {{data?.organisation?.name || 'Neafiliat'}}</span>
                                                                                  +            <span class="col-md-12"><b>Localizare: </b>{{data?.city.name}}, {{data?.county.name}}</span>
                                                                                  +            <span class="col-md-12"><b>CNP: </b> {{data?.ssn }}</span>
                                                                                  +            <span class="col-md-12"><b>Profesie: </b> {{data?.job || 'Nici o profesie' }}</span>
                                                                                  +            <div class="col-md-12">
                                                                                  +                <span><b>Data ultimului update: </b> {{ (data?.updated_at | date: 'dd.MM.yyyy') || 'Nu există' }}</span>
                                                                                  +            </div>
                                                                                  +    </div>
                                                                                  +    <div class="resource-list">
                                                                                  +        <ngb-tabset type="pills">
                                                                                  +            <ngb-tab>
                                                                                  +                <ng-template ngbTabTitle>Listă Acreditări</ng-template>
                                                                                  +                <ng-template ngbTabContent>
                                                                                  +                    <div *ngIf="hasAccreditation; else noAccreditation">
                                                                                  +                        <div class="table-responsive-md">
                                                                                  +                            <table class="table customTable table-sm">
                                                                                  +                                <thead>
                                                                                  +                                    <tr>
                                                                                  +                                        <th>Nume Curs</th>
                                                                                  +                                        <th>Data Acreditării</th>
                                                                                  +                                        <th>Acreditat de</th>
                                                                                  +                                    </tr>
                                                                                  +                                </thead>
                                                                                  +                                <tbody>
                                                                                  +                                    <tr *ngFor="let res of data?.courses">
                                                                                  +                                        <td>{{res.course_name.name}}</td>
                                                                                  +                                        <td>{{res.obtained | date: 'dd.MM.yyyy' }}</td>
                                                                                  +                                        <td>{{res.accredited?.name}}</td>
                                                                                  +                                    </tr>
                                                                                  +                                </tbody>
                                                                                  +                            </table>
                                                                                  +                            <!-- TO-DO CAND AVEM BACKEND-->
                                                                                  +                            <!-- <ngb-pagination
                                                                                  +                    [maxSize]="5"
                                                                                  +                                [(page)]="pager.page"
                                                                                  +                                [pageSize]="pager.size"
                                                                                  +                                (pageChange)="getData()"
                                                                                  +                                [collectionSize]="pager.total">
                                                                                  +                            </ngb-pagination> -->
                                                                                  +                        </div>
                                                                                  +                    </div>
                                                                                  +                <ng-template #noAccreditation>
                                                                                  +                    <span>Aceast voluntar nu are nici o acreditare adăugată în sistem.</span>
                                                                                  +                </ng-template>
                                                                                  +                </ng-template>
                                                                                  +            </ngb-tab>
                                                                                  +            <ngb-tab title="|" [disabled]="true"></ngb-tab>
                                                                                  +            <ngb-tab>
                                                                                  +                <ng-template ngbTabTitle>Listă Alocări</ng-template>
                                                                                  +                <ng-template ngbTabContent>
                                                                                  +                    <div *ngIf="hasAlocation; else noAlocation">
                                                                                  +                        <div class="table-responsive-md">
                                                                                  +                            <table class="table customTable table-sm">
                                                                                  +                                <thead>
                                                                                  +                                    <tr>
                                                                                  +                                        <th>Nume Ofițer</th>
                                                                                  +                                        <th>Data Alocării</th>
                                                                                  +                                        <th>Localizare</th>
                                                                                  +                                    </tr>
                                                                                  +                                </thead>
                                                                                  +                                <tbody>
                                                                                  +                                    <tr *ngFor="let res of allocations">
                                                                                  +                                        <td>{{res.rescue_officer.name}}</td>
                                                                                  +                                        <td>{{res.created_at | date: 'dd.MM.yyyy' }}</td>
                                                                                  +                                        <td>{{res.city.name}}, {{res.county.name}}</td>
                                                                                  +                                    </tr>
                                                                                  +                            </tbody>
                                                                                  +                        </table>
                                                                                  +                        <!-- <ngb-pagination
                                                                                  +                    [maxSize]="5"
                                                                                  +                            [(page)]="pager.page"
                                                                                  +                            [pageSize]="pager.size"
                                                                                  +                            (pageChange)="getData()"
                                                                                  +                            [collectionSize]="pager.total">
                                                                                  +                        </ngb-pagination> -->
                                                                                  +                    </div>
                                                                                  +                </div>
                                                                                  +                <ng-template #noAlocation>
                                                                                  +                    <span>Acest voluntar nu a fost alocat niciodată.</span>
                                                                                  +                    </ng-template>
                                                                                  +                </ng-template>
                                                                                  +            </ngb-tab>
                                                                                  +        </ngb-tabset>
                                                                                  +    </div>
                                                                                  +</div>
                                                                                  +
                                                                                  + +
                                                                                  +

                                                                                  + ./volunteer-details.component.scss +

                                                                                  +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  +
                                                                                  +
                                                                                  + Legend +
                                                                                  +
                                                                                  +
                                                                                  Html element +
                                                                                  +
                                                                                  +
                                                                                  Component +
                                                                                  +
                                                                                  +
                                                                                  Html element with directive +
                                                                                  +
                                                                                  +
                                                                                  + + +
                                                                                  + + + + + + + + + + + + + + + + + + + + + +
                                                                                  +
                                                                                  +

                                                                                  result-matching ""

                                                                                  +
                                                                                    +
                                                                                    +
                                                                                    +

                                                                                    No results matching ""

                                                                                    +
                                                                                    +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/components/VolunteersComponent.html b/documentation/components/VolunteersComponent.html new file mode 100644 index 0000000..1dab953 --- /dev/null +++ b/documentation/components/VolunteersComponent.html @@ -0,0 +1,354 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                    +
                                                                                    + + +
                                                                                    +
                                                                                    + + + + + + + + +
                                                                                    +

                                                                                    +

                                                                                    File

                                                                                    +

                                                                                    +

                                                                                    + src/app/pages/volunteers/volunteers/volunteers.component.ts +

                                                                                    + + + +

                                                                                    +

                                                                                    Implements

                                                                                    +

                                                                                    +

                                                                                    + OnInit +

                                                                                    + + +
                                                                                    +

                                                                                    Metadata

                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                    selectorapp-volunteers
                                                                                    styleUrls./volunteers.component.scss
                                                                                    templateUrl./volunteers.component.html
                                                                                    +
                                                                                    + +
                                                                                    +

                                                                                    Index

                                                                                    + + + + + + + + + + + + + + + +
                                                                                    +
                                                                                    Methods
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    + +
                                                                                    +

                                                                                    Constructor

                                                                                    + + + + + + + + + + + + + +
                                                                                    +constructor() +
                                                                                    + +
                                                                                    +

                                                                                    wrapper for the volunteers pages. acts as frame

                                                                                    +
                                                                                    +
                                                                                    +
                                                                                    + + + + + +
                                                                                    + +

                                                                                    + Methods +

                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                    + + + + ngOnInit + + + +
                                                                                    +ngOnInit() +
                                                                                    + +
                                                                                    + +
                                                                                    + Returns : void + +
                                                                                    +
                                                                                    +
                                                                                    + +
                                                                                    + + +
                                                                                    +
                                                                                    import { Component, OnInit } from '@angular/core';
                                                                                    +
                                                                                    +@Component({
                                                                                    +	selector: 'app-volunteers',
                                                                                    +	templateUrl: './volunteers.component.html',
                                                                                    +	styleUrls: ['./volunteers.component.scss']
                                                                                    +})
                                                                                    +
                                                                                    +export class VolunteersComponent implements OnInit {
                                                                                    +
                                                                                    +	/**
                                                                                    +	 * wrapper for the volunteers pages. acts as frame
                                                                                    +	 */
                                                                                    +	constructor() { }
                                                                                    +
                                                                                    +	ngOnInit() {
                                                                                    +	}
                                                                                    +
                                                                                    +}
                                                                                    +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    <router-outlet></router-outlet>
                                                                                    +
                                                                                    + +
                                                                                    +

                                                                                    + ./volunteers.component.scss +

                                                                                    +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    +
                                                                                    +
                                                                                    + Legend +
                                                                                    +
                                                                                    +
                                                                                    Html element +
                                                                                    +
                                                                                    +
                                                                                    Component +
                                                                                    +
                                                                                    +
                                                                                    Html element with directive +
                                                                                    +
                                                                                    +
                                                                                    + + +
                                                                                    + + + + + + + + + + + + + + + + + + + + + +
                                                                                    +
                                                                                    +

                                                                                    result-matching ""

                                                                                    +
                                                                                      +
                                                                                      +
                                                                                      +

                                                                                      No results matching ""

                                                                                      +
                                                                                      +
                                                                                      +
                                                                                      + +
                                                                                      +
                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/coverage.html b/documentation/coverage.html new file mode 100644 index 0000000..d1752c7 --- /dev/null +++ b/documentation/coverage.html @@ -0,0 +1,976 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                      +
                                                                                      + + +
                                                                                      +
                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                      + +
                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                      FileTypeIdentifierStatements
                                                                                      + + src/app/app.component.ts + componentAppComponent + 33 % + (1/3) +
                                                                                      + + src/app/core/authentication/anonymous.guard.ts + guardAnonymousGuard + 33 % + (1/3) +
                                                                                      + + src/app/core/authentication/authentication.guard.ts + guardAuthenticationGuard + 33 % + (1/3) +
                                                                                      + + src/app/core/authentication/authentication.service.ts + injectableAuthenticationService + 64 % + (9/14) +
                                                                                      + + src/app/core/authentication/authentication.service.ts + variablecredentialsKey + 100 % + (1/1) +
                                                                                      + + src/app/core/authentication/redirect.guard.ts + guardRedirectGuard + 100 % + (4/4) +
                                                                                      + + src/app/core/authentication/role.guard.ts + guardRoleGuard + 33 % + (1/3) +
                                                                                      + + src/app/core/http/api-prefix.interceptor.ts + interceptorApiPrefixInterceptor + 33 % + (1/3) +
                                                                                      + + src/app/core/http/error-handler.interceptor.ts + interceptorErrorHandlerInterceptor + 50 % + (2/4) +
                                                                                      + + src/app/core/local-storage.service.ts + injectableLocalStorageService + 87 % + (7/8) +
                                                                                      + + src/app/core/local-storage.service.ts + functionclearData + 100 % + (1/1) +
                                                                                      + + src/app/core/local-storage.service.ts + functioncreateCookie + 100 % + (1/1) +
                                                                                      + + src/app/core/local-storage.service.ts + functiongetData + 100 % + (1/1) +
                                                                                      + + src/app/core/local-storage.service.ts + functiongetSessionName + 100 % + (1/1) +
                                                                                      + + src/app/core/local-storage.service.ts + functionreadCookie + 100 % + (1/1) +
                                                                                      + + src/app/core/local-storage.service.ts + functionsetData + 100 % + (1/1) +
                                                                                      + + src/app/core/service/cities-counties.service.ts + injectableCitiesCountiesService + 50 % + (2/4) +
                                                                                      + + src/app/core/service/error-message.service.ts + injectableErrorMessageService + 33 % + (2/6) +
                                                                                      + + src/app/core/service/filters.service.ts + injectableFiltersService + 75 % + (6/8) +
                                                                                      + + src/app/core/service/users.service.ts + injectableUsersService + 88 % + (8/9) +
                                                                                      + + src/app/core/service/util.service.ts + injectableUtilService + 60 % + (3/5) +
                                                                                      + + src/app/core/validators/email-validation.ts + classEmailValidation + 50 % + (1/2) +
                                                                                      + + src/app/core/validators/location-validation.ts + classLocationValidation + 50 % + (1/2) +
                                                                                      + + src/app/core/validators/password-validation.ts + classPasswordValidation + 66 % + (2/3) +
                                                                                      + + src/app/core/validators/phone-validation.ts + classPhoneValidation + 50 % + (1/2) +
                                                                                      + + src/app/core/validators/ssn-validation.ts + classSsnValidation + 50 % + (1/2) +
                                                                                      + + src/app/core/validators/website-validation.ts + classWebsiteValidation + 50 % + (1/2) +
                                                                                      + + src/app/pages/404/not-found.component.ts + componentNotFoundComponent + 50 % + (1/2) +
                                                                                      + + src/app/pages/authentication/login/login.component.ts + componentLoginComponent + 50 % + (5/10) +
                                                                                      + + src/app/pages/authentication/recover-password/recover-password.component.ts + componentRecoverPasswordComponent + 50 % + (4/8) +
                                                                                      + + src/app/pages/authentication/reset-password/reset-password.component.ts + componentResetPasswordComponent + 55 % + (5/9) +
                                                                                      + + src/app/pages/authentication/signup/signup.component.ts + componentSignupComponent + 62 % + (5/8) +
                                                                                      + + src/app/pages/info/info/info.component.ts + componentInfoComponent + 33 % + (1/3) +
                                                                                      + + src/app/pages/map/map.service.ts + injectableMapService + 33 % + (1/3) +
                                                                                      + + src/app/pages/map/map/map.component.ts + componentMapComponent + 35 % + (5/14) +
                                                                                      + + src/app/pages/organisations/organisations.service.ts + injectableOrganisationService + 84 % + (16/19) +
                                                                                      + + src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.ts + componentOrganisationaddComponent + 52 % + (11/21) +
                                                                                      + + src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts + componentNgodetailsComponent + 58 % + (27/46) +
                                                                                      + + src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts + interfaceAlert + 33 % + (1/3) +
                                                                                      + + src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.ts + componentOrganisationEditComponent + 59 % + (13/22) +
                                                                                      + + src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.ts + componentOrganisationsDashboardComponent + 57 % + (12/21) +
                                                                                      + + src/app/pages/organisations/organisations/organisations.component.ts + componentOrganisationsComponent + 33 % + (1/3) +
                                                                                      + + src/app/pages/resources/resources.service.ts + injectableResourcesService + 83 % + (10/12) +
                                                                                      + + src/app/pages/resources/resources/components/add-resource/add-resource.component.ts + componentAddResourceComponent + 41 % + (16/39) +
                                                                                      + + src/app/pages/resources/resources/components/edit-resource/edit-resource.component.ts + componentEditResourceComponent + 41 % + (16/39) +
                                                                                      + + src/app/pages/resources/resources/components/import-resources/import-resources.component.ts + componentImportResourcesComponent + 69 % + (9/13) +
                                                                                      + + src/app/pages/resources/resources/components/resource-details/resource-details.component.ts + componentResourcedetailsComponent + 60 % + (6/10) +
                                                                                      + + src/app/pages/resources/resources/components/resource-list/resource-list.component.ts + componentResourceListComponent + 66 % + (8/12) +
                                                                                      + + src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.ts + componentResourcesdashboardComponent + 71 % + (15/21) +
                                                                                      + + src/app/pages/resources/resources/resources.component.ts + componentResourcesComponent + 33 % + (1/3) +
                                                                                      + + src/app/pages/users/users/components/add-user/add-user.component.ts + componentAddUserComponent + 59 % + (13/22) +
                                                                                      + + src/app/pages/users/users/components/edit-user/edit-user.component.ts + componentEditUserComponent + 62 % + (15/24) +
                                                                                      + + src/app/pages/users/users/components/user-dashboard/user-dashboard.component.ts + componentUserDashboardComponent + 72 % + (16/22) +
                                                                                      + + src/app/pages/users/users/components/user-details/user-details.component.ts + componentUserDetailsComponent + 62 % + (5/8) +
                                                                                      + + src/app/pages/users/users/users.component.ts + componentUsersComponent + 33 % + (1/3) +
                                                                                      + + src/app/pages/volunteers/volunteers.service.ts + injectableVolunteerService + 83 % + (10/12) +
                                                                                      + + src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.ts + componentAddVolunteerComponent + 44 % + (22/49) +
                                                                                      + + src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.ts + componentEditVolunteerComponent + 50 % + (25/50) +
                                                                                      + + src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.ts + componentImportVolunteersComponent + 69 % + (9/13) +
                                                                                      + + src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.ts + componentVolunteerDashboardComponent + 65 % + (13/20) +
                                                                                      + + src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.ts + componentVolunteerDetailsComponent + 71 % + (10/14) +
                                                                                      + + src/app/pages/volunteers/volunteers/volunteers.component.ts + componentVolunteersComponent + 33 % + (1/3) +
                                                                                      + + src/app/shared/back-button/back-button.component.ts + componentBackButtonComponent + 75 % + (3/4) +
                                                                                      + + src/app/shared/date-parser-formatter.ts + injectableDateParserFormatter + 50 % + (5/10) +
                                                                                      + + src/app/shared/date-parser-formatter.ts + functionisNumber + 100 % + (1/1) +
                                                                                      + + src/app/shared/date-parser-formatter.ts + functiontoInteger + 100 % + (1/1) +
                                                                                      + + src/app/shared/spinner.component.ts + componentSpinnerComponent + 80 % + (4/5) +
                                                                                      + + src/app/shared/table-search/table-search.component.ts + componentTableSearchComponent + 60 % + (6/10) +
                                                                                      + + src/app/shared/table-sort/table-sort.directive.ts + directiveTableSortDirective + 63 % + (7/11) +
                                                                                      + + src/app/top-bar/components/current-profile/current-profile.component.ts + componentCurrentProfileComponent + 50 % + (3/6) +
                                                                                      + + src/app/top-bar/top-bar.component.ts + componentTopBarComponent + 50 % + (3/6) +
                                                                                      + + + + + +
                                                                                      +
                                                                                      +

                                                                                      result-matching ""

                                                                                      +
                                                                                        +
                                                                                        +
                                                                                        +

                                                                                        No results matching ""

                                                                                        +
                                                                                        +
                                                                                        +
                                                                                        + +
                                                                                        +
                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/dependencies.html b/documentation/dependencies.html new file mode 100644 index 0000000..6dbc6ba --- /dev/null +++ b/documentation/dependencies.html @@ -0,0 +1,155 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                        +
                                                                                        + + +
                                                                                        +
                                                                                        + + + + + + + + + + + + + + + +
                                                                                          +
                                                                                        • + @angular/animations : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/cdk : ~8.0.2
                                                                                        • +
                                                                                        • + @angular/common : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/compiler : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/core : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/forms : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/http : ^7.2.15
                                                                                        • +
                                                                                        • + @angular/material : ^8.1.4
                                                                                        • +
                                                                                        • + @angular/platform-browser : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/platform-browser-dynamic : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/router : ^8.2.4
                                                                                        • +
                                                                                        • + @angular/service-worker : ^8.2.4
                                                                                        • +
                                                                                        • + @ngtools/webpack : ^8.3.2
                                                                                        • +
                                                                                        • + @ngx-lib/multiselect : ^1.0.3
                                                                                        • +
                                                                                        • + bootstrap : ^4.3.1
                                                                                        • +
                                                                                        • + core-js : ^3.2.1
                                                                                        • +
                                                                                        • + custom-select-dropdown : ^1.0.11
                                                                                        • +
                                                                                        • + font-awesome : ^4.7.0
                                                                                        • +
                                                                                        • + jquery : ^3.4.1
                                                                                        • +
                                                                                        • + luxon : ^1.17.2
                                                                                        • +
                                                                                        • + moment : ^2.24.0
                                                                                        • +
                                                                                        • + popper.js : ^1.15.0
                                                                                        • +
                                                                                        • + rxjs : ^6.5.3
                                                                                        • +
                                                                                        • + websocket-driver : ^0.7.3
                                                                                        • +
                                                                                        • + zone.js : ~0.9.1
                                                                                        • +
                                                                                        + + + + + + +
                                                                                        +
                                                                                        +

                                                                                        result-matching ""

                                                                                        +
                                                                                          +
                                                                                          +
                                                                                          +

                                                                                          No results matching ""

                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/directives/TableSortDirective.html b/documentation/directives/TableSortDirective.html new file mode 100644 index 0000000..a20da30 --- /dev/null +++ b/documentation/directives/TableSortDirective.html @@ -0,0 +1,743 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                          +
                                                                                          + + +
                                                                                          +
                                                                                          + + + + + + + + + + +
                                                                                          +
                                                                                          +

                                                                                          +

                                                                                          File

                                                                                          +

                                                                                          +

                                                                                          + src/app/shared/table-sort/table-sort.directive.ts +

                                                                                          + + + + +
                                                                                          +

                                                                                          Metadata

                                                                                          + + + + + + + + + +
                                                                                          Selector[appTableSort]
                                                                                          +
                                                                                          + +
                                                                                          +

                                                                                          Index

                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                          +
                                                                                          Properties
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          Methods
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          Inputs
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          Outputs
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          HostBindings
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          HostListeners
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          Accessors
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          + +
                                                                                          +

                                                                                          Constructor

                                                                                          + + + + + + + + + + +
                                                                                          +constructor() +
                                                                                          + +
                                                                                          +
                                                                                          + +
                                                                                          +

                                                                                          Inputs

                                                                                          + + + + + + + + + + + + + + + +
                                                                                          + + pager +
                                                                                          + Type : any + +
                                                                                          + +
                                                                                          +

                                                                                          set pager from input value and adjendat values

                                                                                          +
                                                                                          +
                                                                                          + + + + + + + + + + + + + + + +
                                                                                          + + value +
                                                                                          + Type : any + +
                                                                                          + +
                                                                                          +

                                                                                          value

                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          +

                                                                                          Outputs

                                                                                          + + + + + + + + + + + + + + + +
                                                                                          + + sortChanged +
                                                                                          + Type : EventEmitter + +
                                                                                          + +
                                                                                          +

                                                                                          Observable sortChanged for triggering modifications in the main component

                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          +

                                                                                          HostBindings

                                                                                          + + + + + + + + + + + + + +
                                                                                          + + + + class.asc + + +
                                                                                          + Default value : false +
                                                                                          + +
                                                                                          + + + + + + + + + + + + + + +
                                                                                          + + + + class.desc + + +
                                                                                          + Default value : false +
                                                                                          + +
                                                                                          + + + + + + + + + + + + + + + + + +
                                                                                          + + + + class.sort + + +
                                                                                          + Default value : false +
                                                                                          + +
                                                                                          +

                                                                                          angular bindings for class display

                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          +

                                                                                          HostListeners

                                                                                          + + + + + + + + + + + + + + + + + + +
                                                                                          + + + + click + + + +
                                                                                          +click() +
                                                                                          + +
                                                                                          +

                                                                                          register to click events in the referenced input

                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          +
                                                                                          + +

                                                                                          + Methods +

                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                          + + + + sort + + + +
                                                                                          +sort() +
                                                                                          + +
                                                                                          +

                                                                                          emit sort event on click

                                                                                          +
                                                                                          + +
                                                                                          + Returns : void + +
                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          + +

                                                                                          + Properties +

                                                                                          + + + + + + + + + + + + + + + + + + + + +
                                                                                          + + + + _pager + + +
                                                                                          + Type : any + +
                                                                                          + Default value : {} +
                                                                                          + +
                                                                                          +

                                                                                          internal pager value

                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          +

                                                                                          + Accessors +

                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                          + + pager +
                                                                                          + getpager() +
                                                                                          + +
                                                                                          +

                                                                                          return pager

                                                                                          +
                                                                                          + +
                                                                                          + Returns : any + +
                                                                                          +
                                                                                          + setpager(data: any) +
                                                                                          + +
                                                                                          +

                                                                                          set pager from input value and adjendat values

                                                                                          +
                                                                                          + +
                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                          NameTypeOptional
                                                                                          data + any + + No +
                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          + Returns : void + +
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          + + +
                                                                                          +
                                                                                          import { Directive, HostBinding, Input, Output, EventEmitter, HostListener } from '@angular/core';
                                                                                          +
                                                                                          +@Directive({
                                                                                          +	selector: '[appTableSort]'
                                                                                          +})
                                                                                          +export class TableSortDirective {
                                                                                          +		/**
                                                                                          +	 * internal pager value
                                                                                          +	 */
                                                                                          +	_pager: any = {};
                                                                                          +	/**
                                                                                          +	 * angular bindings for class display
                                                                                          +	 */
                                                                                          +	@HostBinding('class.sort') active = false;
                                                                                          +	@HostBinding('class.asc') asc = false;
                                                                                          +	@HostBinding('class.desc') desc = false;
                                                                                          +/**
                                                                                          +	 * value
                                                                                          +	 */
                                                                                          +	@Input() value: any;
                                                                                          +/**
                                                                                          +	 * return pager
                                                                                          +	 */
                                                                                          +	get pager(): any {
                                                                                          +		return this._pager;
                                                                                          +	}
                                                                                          +/**
                                                                                          +	 * set pager from input value and adjendat values
                                                                                          +	 */
                                                                                          +	@Input()
                                                                                          +	set pager(data: any) {
                                                                                          +		this._pager = data;
                                                                                          +		this.active = this._pager.sort === this.value;
                                                                                          +		this.asc = this._pager.sort === this.value && this._pager.method === 'ASC';
                                                                                          +		this.desc = this._pager.sort === this.value && this._pager.method === 'DESC';
                                                                                          +	}
                                                                                          +	/**
                                                                                          +	 *  Observable sortChanged for triggering modifications in the main component
                                                                                          +	 */
                                                                                          +	@Output() sortChanged = new EventEmitter();
                                                                                          +	/**
                                                                                          +	 *  register to click events in the referenced input
                                                                                          +	 */
                                                                                          +	@HostListener('click') onClick() {
                                                                                          +		this.sort();
                                                                                          +	}
                                                                                          +
                                                                                          +	constructor() {
                                                                                          +	}
                                                                                          +/**
                                                                                          +	 * emit sort event on click
                                                                                          +	 */
                                                                                          +	sort() {
                                                                                          +		if (this.pager.sort === this.value) {
                                                                                          +			this.pager.method = this.pager.method === 'ASC' ? 'DESC' : 'ASC';
                                                                                          +		} else {
                                                                                          +			this.pager.method = 'ASC';
                                                                                          +		}
                                                                                          +		this.pager.sort = this.value;
                                                                                          +		this.sortChanged.emit({...this.pager});
                                                                                          +	}
                                                                                          +
                                                                                          +}
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          + + + + + + + + + + + + + +
                                                                                          +
                                                                                          +

                                                                                          result-matching ""

                                                                                          +
                                                                                            +
                                                                                            +
                                                                                            +

                                                                                            No results matching ""

                                                                                            +
                                                                                            +
                                                                                            +
                                                                                            + +
                                                                                            +
                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/fonts/ionicons.eot b/documentation/fonts/ionicons.eot new file mode 100644 index 0000000..4b1fd0f Binary files /dev/null and b/documentation/fonts/ionicons.eot differ diff --git a/documentation/fonts/ionicons.svg b/documentation/fonts/ionicons.svg new file mode 100644 index 0000000..ba35c41 --- /dev/null +++ b/documentation/fonts/ionicons.svg @@ -0,0 +1,2090 @@ + + + + + +Created by FontForge 20160407 at Thu Jun 14 08:50:34 2018 + By Adam Bradley +Copyright (c) 2018, Adam Bradley + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/fonts/ionicons.ttf b/documentation/fonts/ionicons.ttf new file mode 100644 index 0000000..67bd842 Binary files /dev/null and b/documentation/fonts/ionicons.ttf differ diff --git a/documentation/fonts/ionicons.woff b/documentation/fonts/ionicons.woff new file mode 100644 index 0000000..ec1c1f8 Binary files /dev/null and b/documentation/fonts/ionicons.woff differ diff --git a/documentation/fonts/ionicons.woff2 b/documentation/fonts/ionicons.woff2 new file mode 100644 index 0000000..4233951 Binary files /dev/null and b/documentation/fonts/ionicons.woff2 differ diff --git a/documentation/fonts/roboto-v15-latin-300.eot b/documentation/fonts/roboto-v15-latin-300.eot new file mode 100644 index 0000000..826acfd Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-300.eot differ diff --git a/documentation/fonts/roboto-v15-latin-300.svg b/documentation/fonts/roboto-v15-latin-300.svg new file mode 100644 index 0000000..52b2832 --- /dev/null +++ b/documentation/fonts/roboto-v15-latin-300.svg @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/fonts/roboto-v15-latin-300.ttf b/documentation/fonts/roboto-v15-latin-300.ttf new file mode 100644 index 0000000..66bc5ab Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-300.ttf differ diff --git a/documentation/fonts/roboto-v15-latin-300.woff b/documentation/fonts/roboto-v15-latin-300.woff new file mode 100644 index 0000000..7e6c479 Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-300.woff differ diff --git a/documentation/fonts/roboto-v15-latin-300.woff2 b/documentation/fonts/roboto-v15-latin-300.woff2 new file mode 100644 index 0000000..c34c128 Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-300.woff2 differ diff --git a/documentation/fonts/roboto-v15-latin-700.eot b/documentation/fonts/roboto-v15-latin-700.eot new file mode 100644 index 0000000..f89cad7 Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-700.eot differ diff --git a/documentation/fonts/roboto-v15-latin-700.svg b/documentation/fonts/roboto-v15-latin-700.svg new file mode 100644 index 0000000..fc8d42f --- /dev/null +++ b/documentation/fonts/roboto-v15-latin-700.svg @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/fonts/roboto-v15-latin-700.ttf b/documentation/fonts/roboto-v15-latin-700.ttf new file mode 100644 index 0000000..19090af Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-700.ttf differ diff --git a/documentation/fonts/roboto-v15-latin-700.woff b/documentation/fonts/roboto-v15-latin-700.woff new file mode 100644 index 0000000..bf737c1 Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-700.woff differ diff --git a/documentation/fonts/roboto-v15-latin-700.woff2 b/documentation/fonts/roboto-v15-latin-700.woff2 new file mode 100644 index 0000000..11cde5d Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-700.woff2 differ diff --git a/documentation/fonts/roboto-v15-latin-regular.eot b/documentation/fonts/roboto-v15-latin-regular.eot new file mode 100644 index 0000000..d26bc8f Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-regular.eot differ diff --git a/documentation/fonts/roboto-v15-latin-regular.svg b/documentation/fonts/roboto-v15-latin-regular.svg new file mode 100644 index 0000000..ed55c10 --- /dev/null +++ b/documentation/fonts/roboto-v15-latin-regular.svg @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/fonts/roboto-v15-latin-regular.ttf b/documentation/fonts/roboto-v15-latin-regular.ttf new file mode 100644 index 0000000..7b25f3c Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-regular.ttf differ diff --git a/documentation/fonts/roboto-v15-latin-regular.woff b/documentation/fonts/roboto-v15-latin-regular.woff new file mode 100644 index 0000000..941dfa4 Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-regular.woff differ diff --git a/documentation/fonts/roboto-v15-latin-regular.woff2 b/documentation/fonts/roboto-v15-latin-regular.woff2 new file mode 100644 index 0000000..120796b Binary files /dev/null and b/documentation/fonts/roboto-v15-latin-regular.woff2 differ diff --git a/documentation/graph/dependencies.svg b/documentation/graph/dependencies.svg new file mode 100644 index 0000000..d1398d2 --- /dev/null +++ b/documentation/graph/dependencies.svg @@ -0,0 +1,942 @@ + + + + + + +dependencies + +Legend + +  Declarations + +  Module + +  Bootstrap + +  Providers + +  Exports + +cluster_AppModule + + + +cluster_AppModule_declarations + + + +cluster_AppModule_imports + + + +cluster_AppModule_bootstrap + + + +cluster_AuthenticationModule + + + +cluster_AuthenticationModule_declarations + + + +cluster_AuthenticationModule_imports + + + +cluster_CoreModule + + + +cluster_CoreModule_providers + + + +cluster_InfoModule + + + +cluster_InfoModule_declarations + + + +cluster_InfoModule_imports + + + +cluster_MapModule + + + +cluster_MapModule_declarations + + + +cluster_MapModule_imports + + + +cluster_MapModule_providers + + + +cluster_OrganisationsModule + + + +cluster_OrganisationsModule_declarations + + + +cluster_OrganisationsModule_imports + + + +cluster_OrganisationsModule_providers + + + +cluster_ResourcesModule + + + +cluster_ResourcesModule_declarations + + + +cluster_ResourcesModule_imports + + + +cluster_ResourcesModule_providers + + + +cluster_SharedModule + + + +cluster_SharedModule_declarations + + + +cluster_SharedModule_exports + + + +cluster_UsersModule + + + +cluster_UsersModule_declarations + + + +cluster_UsersModule_imports + + + +cluster_VolunteersModule + + + +cluster_VolunteersModule_declarations + + + +cluster_VolunteersModule_imports + + + + +AppComponent + +AppComponent + + + +AppModule + +AppModule + + + +AppComponent->AppModule + + + + + +CurrentProfileComponent + +CurrentProfileComponent + + + +CurrentProfileComponent->AppModule + + + + + +NotFoundComponent + +NotFoundComponent + + + +NotFoundComponent->AppModule + + + + + +TopBarComponent + +TopBarComponent + + + +TopBarComponent->AppModule + + + + + +AppComponent + +AppComponent + + + +AppModule->AppComponent + + + + + +AppRoutingModule + +AppRoutingModule + + + +AppRoutingModule->AppModule + + + + + +CoreModule + +CoreModule + + + +CoreModule->AppModule + + + + + +SharedModule + +SharedModule + + + +SharedModule->AppModule + + + + + +AuthenticationModule + +AuthenticationModule + + + +SharedModule->AuthenticationModule + + + + + +OrganisationsModule + +OrganisationsModule + + + +SharedModule->OrganisationsModule + + + + + +ResourcesModule + +ResourcesModule + + + +SharedModule->ResourcesModule + + + + + +list + +list + + + +SharedModule->list + + + + + +UsersModule + +UsersModule + + + +SharedModule->UsersModule + + + + + +VolunteersModule + +VolunteersModule + + + +SharedModule->VolunteersModule + + + + + +LoginComponent + +LoginComponent + + + +LoginComponent->AuthenticationModule + + + + + +RecoverPasswordComponent + +RecoverPasswordComponent + + + +RecoverPasswordComponent->AuthenticationModule + + + + + +ResetPasswordComponent + +ResetPasswordComponent + + + +ResetPasswordComponent->AuthenticationModule + + + + + +SignupComponent + +SignupComponent + + + +SignupComponent->AuthenticationModule + + + + + +AuthenticationRoutingModule + +AuthenticationRoutingModule + + + +AuthenticationRoutingModule->AuthenticationModule + + + + + +ApiPrefixInterceptor + +ApiPrefixInterceptor + + + +ApiPrefixInterceptor->CoreModule + + + + + +ApiPrefixInterceptor->CoreModule + + + + + +AuthenticationService + +AuthenticationService + + + +AuthenticationService->CoreModule + + + + + +CitiesCountiesService + +CitiesCountiesService + + + +CitiesCountiesService->CoreModule + + + + + +ErrorHandlerInterceptor + +ErrorHandlerInterceptor + + + +ErrorHandlerInterceptor->CoreModule + + + + + +ErrorHandlerInterceptor->CoreModule + + + + + +ErrorMessageService + +ErrorMessageService + + + +ErrorMessageService->CoreModule + + + + + +FiltersService + +FiltersService + + + +FiltersService->CoreModule + + + + + +LocalStorageService + +LocalStorageService + + + +LocalStorageService->CoreModule + + + + + +UsersService + +UsersService + + + +UsersService->CoreModule + + + + + +UtilService + +UtilService + + + +UtilService->CoreModule + + + + + +InfoComponent + +InfoComponent + + + +InfoModule + +InfoModule + + + +InfoComponent->InfoModule + + + + + +InfoRoutingModule + +InfoRoutingModule + + + +InfoRoutingModule->InfoModule + + + + + +MapComponent + +MapComponent + + + +MapModule + +MapModule + + + +MapComponent->MapModule + + + + + +MapRoutingModule + +MapRoutingModule + + + +MapRoutingModule->MapModule + + + + + +MapService + +MapService + + + +MapService->MapModule + + + + + +NgodetailsComponent + +NgodetailsComponent + + + +NgodetailsComponent->OrganisationsModule + + + + + +OrganisationEditComponent + +OrganisationEditComponent + + + +OrganisationEditComponent->OrganisationsModule + + + + + +OrganisationaddComponent + +OrganisationaddComponent + + + +OrganisationaddComponent->OrganisationsModule + + + + + +OrganisationsComponent + +OrganisationsComponent + + + +OrganisationsComponent->OrganisationsModule + + + + + +OrganisationsDashboardComponent + +OrganisationsDashboardComponent + + + +OrganisationsDashboardComponent->OrganisationsModule + + + + + +OrganisationsRoutingModule + +OrganisationsRoutingModule + + + +OrganisationsRoutingModule->OrganisationsModule + + + + + +OrganisationService + +OrganisationService + + + +OrganisationService->OrganisationsModule + + + + + +AddResourceComponent + +AddResourceComponent + + + +AddResourceComponent->ResourcesModule + + + + + +EditResourceComponent + +EditResourceComponent + + + +EditResourceComponent->ResourcesModule + + + + + +ImportResourcesComponent + +ImportResourcesComponent + + + +ImportResourcesComponent->ResourcesModule + + + + + +ResourceListComponent + +ResourceListComponent + + + +ResourceListComponent->ResourcesModule + + + + + +ResourcedetailsComponent + +ResourcedetailsComponent + + + +ResourcedetailsComponent->ResourcesModule + + + + + +ResourcesComponent + +ResourcesComponent + + + +ResourcesComponent->ResourcesModule + + + + + +ResourcesdashboardComponent + +ResourcesdashboardComponent + + + +ResourcesdashboardComponent->ResourcesModule + + + + + +ResourcesRoutingModule + +ResourcesRoutingModule + + + +ResourcesRoutingModule->ResourcesModule + + + + + +ResourcesService + +ResourcesService + + + +ResourcesService->ResourcesModule + + + + + +list + +list + + + +list->SharedModule + + + + + +AddUserComponent + +AddUserComponent + + + +AddUserComponent->UsersModule + + + + + +EditUserComponent + +EditUserComponent + + + +EditUserComponent->UsersModule + + + + + +UserDashboardComponent + +UserDashboardComponent + + + +UserDashboardComponent->UsersModule + + + + + +UserDetailsComponent + +UserDetailsComponent + + + +UserDetailsComponent->UsersModule + + + + + +UsersComponent + +UsersComponent + + + +UsersComponent->UsersModule + + + + + +UsersRoutingModule + +UsersRoutingModule + + + +UsersRoutingModule->UsersModule + + + + + +AddVolunteerComponent + +AddVolunteerComponent + + + +AddVolunteerComponent->VolunteersModule + + + + + +EditVolunteerComponent + +EditVolunteerComponent + + + +EditVolunteerComponent->VolunteersModule + + + + + +ImportVolunteersComponent + +ImportVolunteersComponent + + + +ImportVolunteersComponent->VolunteersModule + + + + + +VolunteerDashboardComponent + +VolunteerDashboardComponent + + + +VolunteerDashboardComponent->VolunteersModule + + + + + +VolunteerDetailsComponent + +VolunteerDetailsComponent + + + +VolunteerDetailsComponent->VolunteersModule + + + + + +VolunteersComponent + +VolunteersComponent + + + +VolunteersComponent->VolunteersModule + + + + + +VolunteersRoutingModule + +VolunteersRoutingModule + + + +VolunteersRoutingModule->VolunteersModule + + + + + diff --git a/documentation/guards/AnonymousGuard.html b/documentation/guards/AnonymousGuard.html new file mode 100644 index 0000000..7a1175a --- /dev/null +++ b/documentation/guards/AnonymousGuard.html @@ -0,0 +1,306 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                            +
                                                                                            + + +
                                                                                            +
                                                                                            + + + + + + + + + + + + + +
                                                                                            +
                                                                                            +

                                                                                            +

                                                                                            File

                                                                                            +

                                                                                            +

                                                                                            + src/app/core/authentication/anonymous.guard.ts +

                                                                                            + + + + + +
                                                                                            +

                                                                                            Index

                                                                                            + + + + + + + + + + + + + + + +
                                                                                            +
                                                                                            Methods
                                                                                            +
                                                                                            + +
                                                                                            +
                                                                                            + +
                                                                                            +

                                                                                            Constructor

                                                                                            + + + + + + + + + + + + + +
                                                                                            +constructor(router: Router, authenticationService: AuthenticationService) +
                                                                                            + +
                                                                                            +

                                                                                            Angular anonymous user guard for routes

                                                                                            +
                                                                                            +
                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                            NameTypeOptional
                                                                                            router + Router + + No +
                                                                                            authenticationService + AuthenticationService + + No +
                                                                                            +
                                                                                            +
                                                                                            +
                                                                                            + +
                                                                                            + +

                                                                                            + Methods +

                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                            + + + + canActivate + + + +
                                                                                            +canActivate() +
                                                                                            + +
                                                                                            + +
                                                                                            +
                                                                                            +
                                                                                            + Returns : boolean + +
                                                                                            +
                                                                                            +

                                                                                            Boolean based on authentification Service isAuthenticated Answer

                                                                                            +

                                                                                            else redirect to home

                                                                                            + +
                                                                                            +
                                                                                            +
                                                                                            +
                                                                                            + + +
                                                                                            +
                                                                                            import { Injectable } from '@angular/core';
                                                                                            +import { CanActivate, Router } from '@angular/router';
                                                                                            +
                                                                                            +import { AuthenticationService } from '@app/core/authentication/authentication.service';
                                                                                            +
                                                                                            +@Injectable()
                                                                                            +export class AnonymousGuard implements CanActivate {
                                                                                            +	/**
                                                                                            +	* Angular anonymous user guard for routes
                                                                                            +	*/
                                                                                            +	constructor(
                                                                                            +		private router: Router,
                                                                                            +		private authenticationService: AuthenticationService
                                                                                            +	) {}
                                                                                            +	/**
                                                                                            +	 * @returns Boolean based on authentification Service isAuthenticated Answer
                                                                                            +	 *
                                                                                            +	 * else redirect to home
                                                                                            +	 */
                                                                                            +	canActivate(): boolean {
                                                                                            +		if (!this.authenticationService.isAuthenticated()) {
                                                                                            +			return true;
                                                                                            +		}
                                                                                            +
                                                                                            +		this.router.navigate(['/'], {
                                                                                            +			replaceUrl: true
                                                                                            +		});
                                                                                            +		return false;
                                                                                            +	}
                                                                                            +}
                                                                                            +
                                                                                            +
                                                                                            +
                                                                                            + + + + + + + + + + +
                                                                                            +
                                                                                            +

                                                                                            result-matching ""

                                                                                            +
                                                                                              +
                                                                                              +
                                                                                              +

                                                                                              No results matching ""

                                                                                              +
                                                                                              +
                                                                                              +
                                                                                              + +
                                                                                              +
                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/guards/AuthenticationGuard.html b/documentation/guards/AuthenticationGuard.html new file mode 100644 index 0000000..6639124 --- /dev/null +++ b/documentation/guards/AuthenticationGuard.html @@ -0,0 +1,338 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                              +
                                                                                              + + +
                                                                                              +
                                                                                              + + + + + + + + + + + + + +
                                                                                              +
                                                                                              +

                                                                                              +

                                                                                              File

                                                                                              +

                                                                                              +

                                                                                              + src/app/core/authentication/authentication.guard.ts +

                                                                                              + + + + + +
                                                                                              +

                                                                                              Index

                                                                                              + + + + + + + + + + + + + + + +
                                                                                              +
                                                                                              Methods
                                                                                              +
                                                                                              + +
                                                                                              +
                                                                                              + +
                                                                                              +

                                                                                              Constructor

                                                                                              + + + + + + + + + + + + + +
                                                                                              +constructor(router: Router, authenticationService: AuthenticationService) +
                                                                                              + +
                                                                                              +

                                                                                              Angular auth guard for routes

                                                                                              +
                                                                                              +
                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                              NameTypeOptional
                                                                                              router + Router + + No +
                                                                                              authenticationService + AuthenticationService + + No +
                                                                                              +
                                                                                              +
                                                                                              +
                                                                                              + +
                                                                                              + +

                                                                                              + Methods +

                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                              + + + + canActivate + + + +
                                                                                              +canActivate(route: ActivatedRouteSnapshot) +
                                                                                              + +
                                                                                              + +
                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                              NameTypeOptional
                                                                                              route + ActivatedRouteSnapshot + + No +
                                                                                              +
                                                                                              +
                                                                                              +
                                                                                              +
                                                                                              + Returns : boolean + +
                                                                                              +
                                                                                              +

                                                                                              Boolean based on authentification Service isAuthenificated Answer

                                                                                              +

                                                                                              else redirect to login

                                                                                              + +
                                                                                              +
                                                                                              +
                                                                                              +
                                                                                              + + +
                                                                                              +
                                                                                              import { Injectable } from '@angular/core';
                                                                                              +import { CanActivate, Router, ActivatedRouteSnapshot } from '@angular/router';
                                                                                              +
                                                                                              +import { AuthenticationService } from '@app/core/authentication/authentication.service';
                                                                                              +
                                                                                              +@Injectable()
                                                                                              +export class AuthenticationGuard implements CanActivate {
                                                                                              +	/**
                                                                                              +	* Angular auth guard for routes
                                                                                              +	*/
                                                                                              +	constructor(
                                                                                              +		private router: Router,
                                                                                              +		private authenticationService: AuthenticationService
                                                                                              +	) {}
                                                                                              +	/**
                                                                                              +	 * @returns Boolean based on authentification Service isAuthenificated Answer
                                                                                              +	 *
                                                                                              +	 * else redirect to login
                                                                                              +	 */
                                                                                              +	canActivate(route: ActivatedRouteSnapshot): boolean {
                                                                                              +		const isDashboard = !!route.data['dashboard'];
                                                                                              +		if (this.authenticationService.isAuthenticated() && this.authenticationService.accessLevel !== '0') {
                                                                                              +			if (isDashboard && (!route.children || !route.children.length)) {
                                                                                              +				this.router.navigate(['/' + this.authenticationService.homePath()], {
                                                                                              +					replaceUrl: true
                                                                                              +				});
                                                                                              +			}
                                                                                              +			return true;
                                                                                              +		}
                                                                                              +
                                                                                              +		this.router.navigate(['/login'], {
                                                                                              +			replaceUrl: true
                                                                                              +		});
                                                                                              +		return false;
                                                                                              +	}
                                                                                              +}
                                                                                              +
                                                                                              +
                                                                                              +
                                                                                              + + + + + + + + + + +
                                                                                              +
                                                                                              +

                                                                                              result-matching ""

                                                                                              +
                                                                                                +
                                                                                                +
                                                                                                +

                                                                                                No results matching ""

                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                + +
                                                                                                +
                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/guards/RedirectGuard.html b/documentation/guards/RedirectGuard.html new file mode 100644 index 0000000..1676072 --- /dev/null +++ b/documentation/guards/RedirectGuard.html @@ -0,0 +1,378 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                +
                                                                                                + + +
                                                                                                +
                                                                                                + + + + + + + + + + + + + +
                                                                                                +
                                                                                                +

                                                                                                +

                                                                                                File

                                                                                                +

                                                                                                +

                                                                                                + src/app/core/authentication/redirect.guard.ts +

                                                                                                + +

                                                                                                +

                                                                                                Description

                                                                                                +

                                                                                                +

                                                                                                +

                                                                                                Redirect if not logged in to home angular guard

                                                                                                + +

                                                                                                + + + + +
                                                                                                +

                                                                                                Index

                                                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                                                +
                                                                                                Properties
                                                                                                +
                                                                                                + +
                                                                                                +
                                                                                                Methods
                                                                                                +
                                                                                                + +
                                                                                                +
                                                                                                + +
                                                                                                +

                                                                                                Constructor

                                                                                                + + + + + + + + + + + + + +
                                                                                                +constructor(authService: AuthenticationService, router: Router) +
                                                                                                + +
                                                                                                +

                                                                                                Redirect angular guard constructor

                                                                                                +
                                                                                                +
                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                NameTypeOptional
                                                                                                authService + AuthenticationService + + No +
                                                                                                router + Router + + No +
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                + +
                                                                                                + +

                                                                                                + Methods +

                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                + + + + canActivate + + + +
                                                                                                +canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) +
                                                                                                + +
                                                                                                +

                                                                                                Redirect guard will redirect the user to its specific home page.

                                                                                                +
                                                                                                + +
                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                NameTypeOptional
                                                                                                route + ActivatedRouteSnapshot + + No +
                                                                                                state + RouterStateSnapshot + + No +
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                + Returns : Observable | Promise | boolean + +
                                                                                                +
                                                                                                + +
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                + + +
                                                                                                +
                                                                                                import { Injectable } from '@angular/core';
                                                                                                +
                                                                                                +import { AuthenticationService } from './authentication.service';
                                                                                                +import {
                                                                                                +	ActivatedRouteSnapshot,
                                                                                                +	CanActivate,
                                                                                                +	RouterStateSnapshot,
                                                                                                +	Router
                                                                                                +} from '@angular/router';
                                                                                                +import { Observable } from 'rxjs';
                                                                                                +
                                                                                                +/**
                                                                                                +* Redirect if not logged in to home angular guard
                                                                                                +*/
                                                                                                +@Injectable()
                                                                                                +export class RedirectGuard implements CanActivate {
                                                                                                +	/**
                                                                                                +	* Current user data
                                                                                                +	*/
                                                                                                +	private currentUser: any;
                                                                                                +
                                                                                                +	/**
                                                                                                +	* Redirect angular guard constructor
                                                                                                +	*/
                                                                                                +	constructor(private authService: AuthenticationService,
                                                                                                +		private router: Router) {
                                                                                                +		this.currentUser = this.authService.user;
                                                                                                +	}
                                                                                                +	/**
                                                                                                +	 * Redirect guard will redirect the user to its specific home page.
                                                                                                +	 */
                                                                                                +	canActivate(
                                                                                                +		route: ActivatedRouteSnapshot,
                                                                                                +		state: RouterStateSnapshot
                                                                                                +	): Observable<boolean> | Promise<boolean> | boolean {
                                                                                                +		if (this.authService.isAuthenticated) {
                                                                                                +			this.router.navigate([this.authService.homePath()]);
                                                                                                +		}
                                                                                                +
                                                                                                +		return false;
                                                                                                +	}
                                                                                                +}
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                + + + + + + + + + + +
                                                                                                +
                                                                                                +

                                                                                                result-matching ""

                                                                                                +
                                                                                                  +
                                                                                                  +
                                                                                                  +

                                                                                                  No results matching ""

                                                                                                  +
                                                                                                  +
                                                                                                  +
                                                                                                  + +
                                                                                                  +
                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/guards/RoleGuard.html b/documentation/guards/RoleGuard.html new file mode 100644 index 0000000..fcedb3b --- /dev/null +++ b/documentation/guards/RoleGuard.html @@ -0,0 +1,348 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                  +
                                                                                                  + + +
                                                                                                  +
                                                                                                  + + + + + + + + + + + + + +
                                                                                                  +
                                                                                                  +

                                                                                                  +

                                                                                                  File

                                                                                                  +

                                                                                                  +

                                                                                                  + src/app/core/authentication/role.guard.ts +

                                                                                                  + + + + + +
                                                                                                  +

                                                                                                  Index

                                                                                                  + + + + + + + + + + + + + + + +
                                                                                                  +
                                                                                                  Methods
                                                                                                  +
                                                                                                  + +
                                                                                                  +
                                                                                                  + +
                                                                                                  +

                                                                                                  Constructor

                                                                                                  + + + + + + + + + + + + + +
                                                                                                  +constructor(authService: AuthenticationService, router: Router) +
                                                                                                  + +
                                                                                                  +
                                                                                                  + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                  NameTypeOptional
                                                                                                  authService + AuthenticationService + + No +
                                                                                                  router + Router + + No +
                                                                                                  +
                                                                                                  +
                                                                                                  +
                                                                                                  + +
                                                                                                  + +

                                                                                                  + Methods +

                                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                                  + + + + canActivate + + + +
                                                                                                  +canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) +
                                                                                                  + +
                                                                                                  +

                                                                                                  Roleguyard blocks users of type rescue officer, redirects to login

                                                                                                  +
                                                                                                  + +
                                                                                                  + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                  NameTypeOptional
                                                                                                  route + ActivatedRouteSnapshot + + No +
                                                                                                  state + RouterStateSnapshot + + No +
                                                                                                  +
                                                                                                  +
                                                                                                  +
                                                                                                  +
                                                                                                  + Returns : Observable | Promise | boolean + +
                                                                                                  +
                                                                                                  + +
                                                                                                  +
                                                                                                  +
                                                                                                  +
                                                                                                  + + +
                                                                                                  +
                                                                                                  import {
                                                                                                  +	ActivatedRouteSnapshot,
                                                                                                  +	CanActivate,
                                                                                                  +	RouterStateSnapshot,
                                                                                                  +	Router
                                                                                                  +} from '@angular/router';
                                                                                                  +import { Observable } from 'rxjs';
                                                                                                  +import { AuthenticationService } from '@app/core/authentication/authentication.service';
                                                                                                  +import { Injectable } from '@angular/core';
                                                                                                  +
                                                                                                  +@Injectable()
                                                                                                  +export class RoleGuard implements CanActivate {
                                                                                                  +	constructor(
                                                                                                  +		private authService: AuthenticationService,
                                                                                                  +		private router: Router
                                                                                                  +	) {}
                                                                                                  +	/**
                                                                                                  +	 * Roleguyard blocks users of type rescue officer, redirects to login
                                                                                                  +	 */
                                                                                                  +	canActivate(
                                                                                                  +		route: ActivatedRouteSnapshot,
                                                                                                  +		state: RouterStateSnapshot
                                                                                                  +	): Observable<boolean> | Promise<boolean> | boolean {
                                                                                                  +		const roles = route.data['roles'].map((elem: string) => elem);
                                                                                                  +		const type = this.authService.role;
                                                                                                  +
                                                                                                  +		if (roles.indexOf(type) < 0) {
                                                                                                  +			this.router.navigate(['/'], {
                                                                                                  +				replaceUrl: true
                                                                                                  +			});
                                                                                                  +			return false;
                                                                                                  +		}
                                                                                                  +
                                                                                                  +		return true;
                                                                                                  +	}
                                                                                                  +}
                                                                                                  +
                                                                                                  +
                                                                                                  +
                                                                                                  + + + + + + + + + + +
                                                                                                  +
                                                                                                  +

                                                                                                  result-matching ""

                                                                                                  +
                                                                                                    +
                                                                                                    +
                                                                                                    +

                                                                                                    No results matching ""

                                                                                                    +
                                                                                                    +
                                                                                                    +
                                                                                                    + +
                                                                                                    +
                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/images/compodoc-vectorise-inverted.png b/documentation/images/compodoc-vectorise-inverted.png new file mode 100644 index 0000000..e95ccfb Binary files /dev/null and b/documentation/images/compodoc-vectorise-inverted.png differ diff --git a/documentation/images/compodoc-vectorise-inverted.svg b/documentation/images/compodoc-vectorise-inverted.svg new file mode 100644 index 0000000..d1479a5 --- /dev/null +++ b/documentation/images/compodoc-vectorise-inverted.svg @@ -0,0 +1,201 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/images/compodoc-vectorise.png b/documentation/images/compodoc-vectorise.png new file mode 100644 index 0000000..8137403 Binary files /dev/null and b/documentation/images/compodoc-vectorise.png differ diff --git a/documentation/images/compodoc-vectorise.svg b/documentation/images/compodoc-vectorise.svg new file mode 100644 index 0000000..5e21f1e --- /dev/null +++ b/documentation/images/compodoc-vectorise.svg @@ -0,0 +1,201 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/images/coverage-badge-documentation.svg b/documentation/images/coverage-badge-documentation.svg new file mode 100644 index 0000000..e797fb9 --- /dev/null +++ b/documentation/images/coverage-badge-documentation.svg @@ -0,0 +1,9 @@ + + + + + + documentation + 60% + + diff --git a/documentation/images/favicon.ico b/documentation/images/favicon.ico new file mode 100644 index 0000000..4144ee4 Binary files /dev/null and b/documentation/images/favicon.ico differ diff --git a/documentation/index.html b/documentation/index.html new file mode 100644 index 0000000..c73cb34 --- /dev/null +++ b/documentation/index.html @@ -0,0 +1,134 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                    +
                                                                                                    + + +
                                                                                                    +
                                                                                                    + +

                                                                                                    Resource & Volunteers Management App - Webapp

                                                                                                    +

                                                                                                    GitHub contributors GitHub last commit License: MPL 2.0

                                                                                                    +

                                                                                                    Webapp client of the resource and volunteers management app of DSU (Departamentul pentru Situatii de Urgenta)

                                                                                                    +

                                                                                                    See the project live - a clickable prototype

                                                                                                    +

                                                                                                    DSU (Departamentul pentru Situatii de Urgenta) needs a digital tool to manage the resources it has at its disposal, their location, as well as the volunteers and NGOs that are registered to offer help during a crisis situation. The aim of this project is to offer a better management solution so that DSU is better prepared for an emergency situation.

                                                                                                    +

                                                                                                    Contributing | Built with | Repos and projects | Deployment | Feedback | License | About Code4Ro

                                                                                                    +

                                                                                                    Contributing

                                                                                                    +

                                                                                                    This project is built by amazing volunteers and you can be one of them! Here's a list of ways in which you can contribute to this project.

                                                                                                    +

                                                                                                    You can also list any pending features and planned improvements for the project here.

                                                                                                    +

                                                                                                    Built With

                                                                                                    +

                                                                                                    Programming languages

                                                                                                    +

                                                                                                    JavaScript

                                                                                                    +

                                                                                                    Platforms

                                                                                                    +

                                                                                                    Frontend framework

                                                                                                    +

                                                                                                    Angular

                                                                                                    +

                                                                                                    Package managers

                                                                                                    +

                                                                                                    NPM

                                                                                                    +

                                                                                                    Database technology & provider

                                                                                                    +

                                                                                                    Repos and projects

                                                                                                    +

                                                                                                    API: https://github.com/code4romania/rvm-api

                                                                                                    +

                                                                                                    Deployment

                                                                                                    +

                                                                                                    TBD

                                                                                                    +

                                                                                                    Feedback

                                                                                                    +
                                                                                                      +
                                                                                                    • Request a new feature on GitHub.
                                                                                                    • +
                                                                                                    • Vote for popular feature requests.
                                                                                                    • +
                                                                                                    • File a bug in GitHub Issues.
                                                                                                    • +
                                                                                                    • Email us with other feedback contact@code4.ro
                                                                                                    • +
                                                                                                    +

                                                                                                    License

                                                                                                    +

                                                                                                    This project is licensed under the MPL 2.0 License - see the LICENSE file for details

                                                                                                    +

                                                                                                    About Code4Ro

                                                                                                    +

                                                                                                    Started in 2016, Code for Romania is a civic tech NGO, official member of the Code for All network. We have a community of over 500 volunteers (developers, ux/ui, communications, data scientists, graphic designers, devops, it security and more) who work pro-bono for developing digital solutions to solve social problems. #techforsocialgood. If you want to learn more details about our projects visit our site or if you want to talk to one of our staff members, please e-mail us at contact@code4.ro.

                                                                                                    +

                                                                                                    Last, but not least, we rely on donations to ensure the infrastructure, logistics and management of our community that is widely spread across 11 timezones, coding for social change to make Romania and the world a better place. If you want to support us, you can do it here.

                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                    +
                                                                                                    +

                                                                                                    result-matching ""

                                                                                                    +
                                                                                                      +
                                                                                                      +
                                                                                                      +

                                                                                                      No results matching ""

                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/AuthenticationService.html b/documentation/injectables/AuthenticationService.html new file mode 100644 index 0000000..8d6e9b0 --- /dev/null +++ b/documentation/injectables/AuthenticationService.html @@ -0,0 +1,1390 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                      +
                                                                                                      + + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + +
                                                                                                      +
                                                                                                      +

                                                                                                      +

                                                                                                      File

                                                                                                      +

                                                                                                      +

                                                                                                      + src/app/core/authentication/authentication.service.ts +

                                                                                                      + +

                                                                                                      +

                                                                                                      Description

                                                                                                      +

                                                                                                      +

                                                                                                      +

                                                                                                      Provides a base for authentication workflow. +The Credentials interface as well as login/logout methods should be replaced with proper implementation.

                                                                                                      + +

                                                                                                      + + + +
                                                                                                      +

                                                                                                      Index

                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                      +
                                                                                                      Properties
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      Methods
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      Accessors
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +

                                                                                                      Constructor

                                                                                                      + + + + + + + + + + + + + +
                                                                                                      +constructor(httpClient: HttpClient, localStorageService: LocalStorageService) +
                                                                                                      + +
                                                                                                      +

                                                                                                      Authentication service constructor.

                                                                                                      +
                                                                                                      +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptional
                                                                                                      httpClient + HttpClient + + No +
                                                                                                      localStorageService + LocalStorageService + + No +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + +
                                                                                                      + +

                                                                                                      + Methods +

                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Public + homePath + + + +
                                                                                                      + + homePath() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Get current user home path

                                                                                                      +
                                                                                                      + +
                                                                                                      + Returns : any + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Public + is + + + +
                                                                                                      + + is(...roles: string[]) +
                                                                                                      + +
                                                                                                      +

                                                                                                      Check if current user has a specific role

                                                                                                      +
                                                                                                      + +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptional
                                                                                                      roles + string[] + + No +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : boolean + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + isAuthenticated + + + +
                                                                                                      +isAuthenticated() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Checks is the user is authenticated.

                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : boolean + +
                                                                                                      +
                                                                                                      +

                                                                                                      True if the user is authenticated.

                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + login + + + +
                                                                                                      +login(payload: Authentication.LoginPayload) +
                                                                                                      + +
                                                                                                      + +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptionalDescription
                                                                                                      payload + Authentication.LoginPayload + + No + +

                                                                                                      Login with object of specific type

                                                                                                      +

                                                                                                      Function auto stores credentials for future use.

                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : Observable<any> + +
                                                                                                      +
                                                                                                      +

                                                                                                      The post result mapped to Credentials type, not useful since its just a token

                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + logout + + + +
                                                                                                      +logout() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Logs out the user and clear credentials.

                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : Observable<boolean> + +
                                                                                                      +
                                                                                                      +

                                                                                                      True if the user was logged out successfully.

                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Public + recoverPassword + + + +
                                                                                                      + + recoverPassword(email: string) +
                                                                                                      + +
                                                                                                      +

                                                                                                      Recover user password service endpoint

                                                                                                      +
                                                                                                      + +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptional
                                                                                                      email + string + + No +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : any + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Public + resetPassword + + + +
                                                                                                      + + resetPassword(password: string, token: string) +
                                                                                                      + +
                                                                                                      +

                                                                                                      Reset user password service endpoint

                                                                                                      +
                                                                                                      + +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptional
                                                                                                      password + string + + No +
                                                                                                      token + string + + No +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : any + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Public + setCredentials + + + +
                                                                                                      + + setCredentials(credentials?: Authentication.Credentials) +
                                                                                                      + +
                                                                                                      +

                                                                                                      Sets the user credentials.

                                                                                                      +
                                                                                                      + +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptional
                                                                                                      credentials + Authentication.Credentials + + Yes +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : void + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + signup + + + +
                                                                                                      +signup(payload: Authentication.SignupPayload) +
                                                                                                      + +
                                                                                                      + +
                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                      NameTypeOptionalDescription
                                                                                                      payload + Authentication.SignupPayload + + No + +

                                                                                                      Signup with object of specific type

                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : Observable<Authentication.User> + +
                                                                                                      +
                                                                                                      +

                                                                                                      The post result mapped to User type, not very useful

                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + +

                                                                                                      + Properties +

                                                                                                      + + + + + + + + + + + + + + +
                                                                                                      + + + + Private + _credentials + + +
                                                                                                      + Type : Authentication.Credentials | null + +
                                                                                                      + +
                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Private + homes + + +
                                                                                                      + Type : [] + +
                                                                                                      + Default value : ['', 'users', 'organisations/id/:id', 'organisations'] +
                                                                                                      + +
                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + + + Private + roles + + +
                                                                                                      + Type : [] + +
                                                                                                      + Default value : ['OFF', 'INS', 'NGO', 'DSU'] +
                                                                                                      + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +

                                                                                                      + Accessors +

                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + credentials +
                                                                                                      + getcredentials() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Gets the user credentials.

                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : Authentication.Credentials | null + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + accessToken +
                                                                                                      + getaccessToken() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Get the auth token.

                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      + Returns : string | null + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + accessLevel +
                                                                                                      + getaccessLevel() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Get current user access level based on role

                                                                                                      +
                                                                                                      + +
                                                                                                      + Returns : any + +
                                                                                                      +
                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + role +
                                                                                                      + getrole() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Get current user role

                                                                                                      +
                                                                                                      + +
                                                                                                      + + + + + + + + + + + + + + + + + +
                                                                                                      + + user +
                                                                                                      + getuser() +
                                                                                                      + +
                                                                                                      +

                                                                                                      Get current user

                                                                                                      +
                                                                                                      + +
                                                                                                      + Returns : any | null + +
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      + + +
                                                                                                      +
                                                                                                      import { HttpClient } from '@angular/common/http';
                                                                                                      +import { Injectable } from '@angular/core';
                                                                                                      +import { Observable} from 'rxjs';
                                                                                                      +import { map } from 'rxjs/operators';
                                                                                                      +
                                                                                                      +import { LocalStorageService } from '@app/core/local-storage.service';
                                                                                                      +
                                                                                                      +/**
                                                                                                      +* Local storage variable name
                                                                                                      +*/
                                                                                                      +const credentialsKey = 'credentials';
                                                                                                      +
                                                                                                      +/**
                                                                                                      + * Provides a base for authentication workflow.
                                                                                                      + * The Credentials interface as well as login/logout methods should be replaced with proper implementation.
                                                                                                      + */
                                                                                                      +@Injectable()
                                                                                                      +export class AuthenticationService {
                                                                                                      +	private _credentials: Authentication.Credentials | null;
                                                                                                      +
                                                                                                      +	private roles = ['OFF', 'INS', 'NGO', 'DSU'];
                                                                                                      +	private homes = ['', 'users', 'organisations/id/:id', 'organisations'];
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Authentication service constructor.
                                                                                                      +	*/
                                                                                                      +	constructor(
                                                                                                      +		private httpClient: HttpClient,
                                                                                                      +		private localStorageService: LocalStorageService
                                                                                                      +	) {
                                                                                                      +		const savedCredentials = this.localStorageService.getItem(
                                                                                                      +			credentialsKey
                                                                                                      +		);
                                                                                                      +		if (savedCredentials) {
                                                                                                      +			this._credentials = JSON.parse(savedCredentials);
                                                                                                      +		}
                                                                                                      +	}
                                                                                                      +	/**
                                                                                                      +	 *
                                                                                                      +	 * @param {Authentication.LoginPayload} payload  Login with object of specific type
                                                                                                      +	 *
                                                                                                      +	 * Function auto stores credentials for future use.
                                                                                                      +	 *
                                                                                                      +	 * @returns The post result mapped to Credentials type, not useful since its just a token
                                                                                                      +	 *
                                                                                                      +	 */
                                                                                                      +	login(
                                                                                                      +		payload: Authentication.LoginPayload
                                                                                                      +	): Observable<any> {
                                                                                                      +
                                                                                                      +		return this.httpClient.post('/login', payload).pipe(map((credentials: any) => {
                                                                                                      +				if (credentials.user.role !== '0') {
                                                                                                      +					this.setCredentials(credentials);
                                                                                                      +				}
                                                                                                      +				return credentials;
                                                                                                      +			}));
                                                                                                      +	}
                                                                                                      +	/**
                                                                                                      +	 *
                                                                                                      +	 * @param {Authentication.SignupPayload} payload  Signup with object of specific type
                                                                                                      +	 *
                                                                                                      +	 * @returns The post result mapped to User type, not very useful
                                                                                                      +	 *
                                                                                                      +	 */
                                                                                                      +	signup(
                                                                                                      +		payload: Authentication.SignupPayload
                                                                                                      +	): Observable<Authentication.User> {
                                                                                                      +		return this.httpClient.post('/register', payload).pipe(
                                                                                                      +			map((body: Authentication.User) => {
                                                                                                      +				return body;
                                                                                                      +			})
                                                                                                      +		);
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	 * Logs out the user and clear credentials.
                                                                                                      +	 * @return {Observable<boolean>} True if the user was logged out successfully.
                                                                                                      +	 */
                                                                                                      +	logout(): Observable<boolean> {
                                                                                                      +		return this.httpClient.get('/logout').pipe(
                                                                                                      +			map(() => {
                                                                                                      +				this.setCredentials();
                                                                                                      +				return true;
                                                                                                      +			})
                                                                                                      +		);
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	 * Checks is the user is authenticated.
                                                                                                      +	 *
                                                                                                      +	 * @return {boolean} True if the user is authenticated.
                                                                                                      +	 */
                                                                                                      +	isAuthenticated(): boolean {
                                                                                                      +		return !!this.credentials && !!this.credentials.user;
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	 * Gets the user credentials.
                                                                                                      +	 *
                                                                                                      +	 * @return {Credentials} The user credentials or null if the user is not authenticated.
                                                                                                      +	 */
                                                                                                      +	get credentials(): Authentication.Credentials | null {
                                                                                                      +		return this._credentials;
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	 * Get the auth token.
                                                                                                      +	 *
                                                                                                      +	 * @return {string} The auth token is null if user is not authenticated.
                                                                                                      +	 */
                                                                                                      +	get accessToken(): string | null {
                                                                                                      +		if (!this._credentials || !this._credentials.token) {
                                                                                                      +			return;
                                                                                                      +		}
                                                                                                      +		return this._credentials.token;
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Get current user access level based on role
                                                                                                      +	*/
                                                                                                      +	get accessLevel(): any {
                                                                                                      +		if (!this.isAuthenticated()) {
                                                                                                      +			return;
                                                                                                      +		}
                                                                                                      +		return this._credentials.user.role;
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Get current user role
                                                                                                      +	*/
                                                                                                      +	get role() {
                                                                                                      +		if (!this.isAuthenticated()) {
                                                                                                      +			return;
                                                                                                      +		}
                                                                                                      +		return this.roles[this.accessLevel] ? this.roles[this.accessLevel] : 'OFF';
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Get current user
                                                                                                      +	*/
                                                                                                      +	get user(): any | null {
                                                                                                      +		if (!this.isAuthenticated()) {
                                                                                                      +			return;
                                                                                                      +		}
                                                                                                      +
                                                                                                      +		return this._credentials.user;
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Check if current user has a specific role
                                                                                                      +	*/
                                                                                                      +	public is(...roles: string[]) {
                                                                                                      +		if (!this.isAuthenticated()) {
                                                                                                      +			return false;
                                                                                                      +		}
                                                                                                      +
                                                                                                      +		return roles.indexOf(this.role) > -1;
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Get current user home path
                                                                                                      +	*/
                                                                                                      +	public homePath() {
                                                                                                      +		if (!this.isAuthenticated()) {
                                                                                                      +			return '';
                                                                                                      +		}
                                                                                                      +
                                                                                                      +		if (this._credentials.user.organisation) {
                                                                                                      +			return this.homes[this.accessLevel].replace(':id', this._credentials.user.organisation._id);
                                                                                                      +		} else {
                                                                                                      +			return this.homes[this.accessLevel];
                                                                                                      +		}
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	 * Sets the user credentials.
                                                                                                      +	 *
                                                                                                      +	 * @param {Credentials=} Authentication.Credentials The user credentials.
                                                                                                      +	 */
                                                                                                      +	public setCredentials(credentials?: Authentication.Credentials) {
                                                                                                      +		this._credentials = credentials || null;
                                                                                                      +		if (credentials) {
                                                                                                      +			this.localStorageService.setItem(
                                                                                                      +				credentialsKey,
                                                                                                      +				JSON.stringify(credentials)
                                                                                                      +			);
                                                                                                      +		} else {
                                                                                                      +			this.localStorageService.clearItem(credentialsKey);
                                                                                                      +		}
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Recover user password service endpoint
                                                                                                      +	*/
                                                                                                      +	public recoverPassword(email: string) {
                                                                                                      +		return this.httpClient.post('/recoverpassword', {email: email});
                                                                                                      +	}
                                                                                                      +
                                                                                                      +	/**
                                                                                                      +	* Reset user password service endpoint
                                                                                                      +	*/
                                                                                                      +	public resetPassword(password: string, token: string) {
                                                                                                      +		return this.httpClient.post('/resetpassword', {password: password, password_confirmation: password, token: token});
                                                                                                      +	}
                                                                                                      +}
                                                                                                      +
                                                                                                      +
                                                                                                      + +
                                                                                                      + + + + + + + + + + + + +
                                                                                                      +
                                                                                                      +

                                                                                                      result-matching ""

                                                                                                      +
                                                                                                        +
                                                                                                        +
                                                                                                        +

                                                                                                        No results matching ""

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/CitiesCountiesService.html b/documentation/injectables/CitiesCountiesService.html new file mode 100644 index 0000000..67a3c04 --- /dev/null +++ b/documentation/injectables/CitiesCountiesService.html @@ -0,0 +1,417 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                        +
                                                                                                        + + +
                                                                                                        +
                                                                                                        + + + + + + + + + + + +
                                                                                                        +
                                                                                                        +

                                                                                                        +

                                                                                                        File

                                                                                                        +

                                                                                                        +

                                                                                                        + src/app/core/service/cities-counties.service.ts +

                                                                                                        + + + + +
                                                                                                        +

                                                                                                        Index

                                                                                                        + + + + + + + + + + + + + + + +
                                                                                                        +
                                                                                                        Methods
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        + +
                                                                                                        +

                                                                                                        Constructor

                                                                                                        + + + + + + + + + + + + + +
                                                                                                        +constructor(http: HttpClient) +
                                                                                                        + +
                                                                                                        +
                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                        NameTypeOptional
                                                                                                        http + HttpClient + + No +
                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        + +

                                                                                                        + Methods +

                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                        + + + + getCitiesbyCounty + + + +
                                                                                                        +getCitiesbyCounty(county_id: string, searchterm: string) +
                                                                                                        + +
                                                                                                        +

                                                                                                        get cities in specific county (filters[1]) and optionaly filter by name (filters[2])

                                                                                                        +
                                                                                                        + +
                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                        NameTypeOptionalDescription
                                                                                                        county_id + string + + No + +
                                                                                                        searchterm + string + + No + +

                                                                                                        id of the county from which to search the cities

                                                                                                        + +
                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + Returns : Observable<any> + +
                                                                                                        +
                                                                                                        +

                                                                                                        an observable containing the cities object list

                                                                                                        + +
                                                                                                        +
                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                        + + + + getCounties + + + +
                                                                                                        +getCounties(searchterm?: string) +
                                                                                                        + +
                                                                                                        +

                                                                                                        get counties in Romania (filters[1]) and optionaly filter by name (filters[2])

                                                                                                        +
                                                                                                        + +
                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                        NameTypeOptionalDescription
                                                                                                        searchterm + string + + Yes + +

                                                                                                        The term to filter by

                                                                                                        + +
                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + Returns : Observable<any> + +
                                                                                                        +
                                                                                                        +

                                                                                                        an observable containing the counties object list

                                                                                                        + +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        + + +
                                                                                                        +
                                                                                                        import { Injectable } from '@angular/core';
                                                                                                        +import { Observable, pipe } from 'rxjs';
                                                                                                        +import { HttpClient } from '@angular/common/http';
                                                                                                        +import { map, filter } from 'rxjs/operators';
                                                                                                        +
                                                                                                        +@Injectable()
                                                                                                        +export class CitiesCountiesService {
                                                                                                        +
                                                                                                        +	constructor(private http: HttpClient) {}
                                                                                                        +	/**
                                                                                                        +	* get counties in Romania (filters[1]) and optionaly filter by name (filters[2])
                                                                                                        +	* @param {string} searchterm The term to filter by
                                                                                                        +	* @returns an observable containing the counties object list
                                                                                                        +	*/
                                                                                                        +	getCounties(searchterm?: string): Observable<any>  {
                                                                                                        +		return this.http.get(`/counties?filters[1]=country_romania_1&filters[2]=${searchterm ? searchterm : ''}`);
                                                                                                        +	}
                                                                                                        +	/**
                                                                                                        +	* get cities in specific county (filters[1]) and optionaly filter by name (filters[2])
                                                                                                        +	* @param {string} searchterm id of the county from which to search the cities
                                                                                                        +	* @param {string} searchterm The term to filter by
                                                                                                        +	* @returns an observable containing the cities object list
                                                                                                        +	*/
                                                                                                        +	getCitiesbyCounty(county_id: string, searchterm: string):  Observable<any>  {
                                                                                                        +		return this.http.get(`/cities?filters[1]=${county_id}&filters[2]=${searchterm ? searchterm : ''}`);
                                                                                                        +	}
                                                                                                        +}
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        + + + + + + + + + + + + +
                                                                                                        +
                                                                                                        +

                                                                                                        result-matching ""

                                                                                                        +
                                                                                                          +
                                                                                                          +
                                                                                                          +

                                                                                                          No results matching ""

                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/DateParserFormatter.html b/documentation/injectables/DateParserFormatter.html new file mode 100644 index 0000000..b44ed48 --- /dev/null +++ b/documentation/injectables/DateParserFormatter.html @@ -0,0 +1,772 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                          +
                                                                                                          + + +
                                                                                                          +
                                                                                                          + + + + + + + + + + + +
                                                                                                          +
                                                                                                          +

                                                                                                          +

                                                                                                          File

                                                                                                          +

                                                                                                          +

                                                                                                          + src/app/shared/date-parser-formatter.ts +

                                                                                                          + +

                                                                                                          +

                                                                                                          Description

                                                                                                          +

                                                                                                          +

                                                                                                          +

                                                                                                          Date parser class

                                                                                                          + +

                                                                                                          + +

                                                                                                          +

                                                                                                          Extends

                                                                                                          +

                                                                                                          +

                                                                                                          + NgbDateParserFormatter +

                                                                                                          + + +
                                                                                                          +

                                                                                                          Index

                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                          +
                                                                                                          Properties
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          Methods
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          Accessors
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          + +
                                                                                                          +

                                                                                                          Constructor

                                                                                                          + + + + + + + + + + + + + +
                                                                                                          +constructor() +
                                                                                                          + +
                                                                                                          +

                                                                                                          Date parser constructor

                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + +
                                                                                                          + +

                                                                                                          + Methods +

                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                          + + + + format + + + +
                                                                                                          +format(date: NgbDateStruct) +
                                                                                                          + +
                                                                                                          +

                                                                                                          Date parser format date

                                                                                                          +
                                                                                                          + +
                                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                          NameTypeOptional
                                                                                                          date + NgbDateStruct + + No +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + Returns : string + +
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                          + + + + parse + + + +
                                                                                                          +parse(value: string) +
                                                                                                          + +
                                                                                                          +

                                                                                                          Date parser function

                                                                                                          +
                                                                                                          + +
                                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                          NameTypeOptional
                                                                                                          value + string + + No +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + Returns : NgbDateStruct + +
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + +

                                                                                                          + Properties +

                                                                                                          + + + + + + + + + + + + + + + + + +
                                                                                                          + + + + anioSumar + + +
                                                                                                          + Type : number + +
                                                                                                          + Default value : 0 +
                                                                                                          + +
                                                                                                          + + + + + + + + + + + + + + +
                                                                                                          + + + + ddIndex + + +
                                                                                                          + Type : number + +
                                                                                                          + +
                                                                                                          + + + + + + + + + + + + + + + + + +
                                                                                                          + + + + mask + + +
                                                                                                          + Type : string + +
                                                                                                          + Default value : 'dd.MM.yyyy' +
                                                                                                          + +
                                                                                                          + + + + + + + + + + + + + + +
                                                                                                          + + + + mmIndex + + +
                                                                                                          + Type : number + +
                                                                                                          + +
                                                                                                          + + + + + + + + + + + + + + + + + +
                                                                                                          + + + + separator + + +
                                                                                                          + Type : string + +
                                                                                                          + +
                                                                                                          +

                                                                                                          Date parser internal variables

                                                                                                          +
                                                                                                          +
                                                                                                          + + + + + + + + + + + + + + +
                                                                                                          + + + + yyIndex + + +
                                                                                                          + Type : number + +
                                                                                                          + +
                                                                                                          +
                                                                                                          + +
                                                                                                          +

                                                                                                          + Accessors +

                                                                                                          + + + + + + + + + + + + + + + + + +
                                                                                                          + + Mask +
                                                                                                          + setMask(value: string) +
                                                                                                          + +
                                                                                                          +

                                                                                                          Date parser set mask value

                                                                                                          +
                                                                                                          + +
                                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                          NameTypeOptional
                                                                                                          value + string + + No +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + Returns : void + +
                                                                                                          +
                                                                                                          +
                                                                                                          +
                                                                                                          + + +
                                                                                                          +
                                                                                                          import { Injectable } from '@angular/core';
                                                                                                          +import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
                                                                                                          +/**
                                                                                                          +	 * pad number with zeros
                                                                                                          +	 */
                                                                                                          +function padNumber(value: number) {
                                                                                                          +	if (isNumber(value)) {
                                                                                                          +		return `0${value}`.slice(-2);
                                                                                                          +	} else {
                                                                                                          +		return '';
                                                                                                          +	}
                                                                                                          +}
                                                                                                          +/**
                                                                                                          +	 * check if is number
                                                                                                          +	 */
                                                                                                          +function isNumber(value: any): boolean {
                                                                                                          +	return !isNaN(toInteger(value));
                                                                                                          +}
                                                                                                          +/**
                                                                                                          +	 * conver to integer
                                                                                                          +	 */
                                                                                                          +function toInteger(value: any): number {
                                                                                                          +	return parseInt(`${value}`, 10);
                                                                                                          +}
                                                                                                          +
                                                                                                          +/**
                                                                                                          + * Date parser class
                                                                                                          + */
                                                                                                          +@Injectable()
                                                                                                          +export class DateParserFormatter extends NgbDateParserFormatter {
                                                                                                          +
                                                                                                          +	/**
                                                                                                          +	 * Date parser internal variables
                                                                                                          +	 */
                                                                                                          +	separator: string;
                                                                                                          +	ddIndex: number;
                                                                                                          +	mmIndex: number;
                                                                                                          +	yyIndex: number;
                                                                                                          +	anioSumar = 0;
                                                                                                          +	mask = 'dd.MM.yyyy';
                                                                                                          +
                                                                                                          +	/**
                                                                                                          +	 * Date parser set mask value
                                                                                                          +	 */
                                                                                                          +
                                                                                                          +	set Mask(value: string) {
                                                                                                          +		this.mask = value;
                                                                                                          +	}
                                                                                                          +
                                                                                                          +	/**
                                                                                                          +	 * Date parser constructor
                                                                                                          +	 */
                                                                                                          +	constructor() {
                                                                                                          +		super();
                                                                                                          +		this.separator = this.mask.indexOf('-') >= 0 ? '-' : this.mask.indexOf('.') >= 0 ? '.' : '/';
                                                                                                          +		const part = this.mask.split(this.separator);
                                                                                                          +		this.ddIndex = part.indexOf('dd');
                                                                                                          +		this.mmIndex = part.indexOf('MM');
                                                                                                          +		this.yyIndex = part.indexOf('yyyy');
                                                                                                          +		if (this.yyIndex < 0) {
                                                                                                          +			this.yyIndex = part.indexOf('yy');
                                                                                                          +			this.anioSumar = 2000;
                                                                                                          +		}
                                                                                                          +	}
                                                                                                          +
                                                                                                          +	/**
                                                                                                          +	 * Date parser function
                                                                                                          +	 */
                                                                                                          +	parse(value: string): NgbDateStruct {
                                                                                                          +		if (value) {
                                                                                                          +			value = value.replace(/\.|\/|-/g, this.separator);
                                                                                                          +			const dateParts = value.trim().split(this.separator);
                                                                                                          +			if (dateParts.length !== 3) {
                                                                                                          +				return { year: 0, month: 0, day: 0 };
                                                                                                          +			}
                                                                                                          +			let anio = 0;
                                                                                                          +			let mes = 0;
                                                                                                          +			let dia = 0;
                                                                                                          +			const today = new Date();
                                                                                                          +			if (isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {
                                                                                                          +				// tslint:disable-next-line: max-line-length
                                                                                                          +				dia = this.ddIndex === 0 ? toInteger(dateParts[0]) : this.ddIndex === 1 ? toInteger(dateParts[1]) : this.ddIndex === 2 ? toInteger(dateParts[2]) : 0;
                                                                                                          +				// tslint:disable-next-line: max-line-length
                                                                                                          +				mes = this.mmIndex === 0 ? toInteger(dateParts[0]) : this.mmIndex === 1 ? toInteger(dateParts[1]) : this.mmIndex === 2 ? toInteger(dateParts[2]) : 0;
                                                                                                          +				anio = this.yyIndex === 0 ? (dateParts[0].length < 2) ? 0 : toInteger(dateParts[0]) + this.anioSumar :
                                                                                                          +					this.yyIndex === 1 ? (dateParts[1].length < 2) ? 0 : toInteger(dateParts[1]) + this.anioSumar :
                                                                                                          +						this.yyIndex === 2 ? (dateParts[2].length < 2) ? 0 : toInteger(dateParts[2]) + this.anioSumar : 0;
                                                                                                          +			}
                                                                                                          +			if (dia === 0 || mes === 0 || anio === 0) {
                                                                                                          +				return { year: 0, month: 0, day: 0 };
                                                                                                          +			}
                                                                                                          +
                                                                                                          +			if (anio < 100) {
                                                                                                          +				anio = 2000 + anio;
                                                                                                          +			}
                                                                                                          +
                                                                                                          +			return { year: anio, month: mes, day: dia };
                                                                                                          +		}
                                                                                                          +		return { year: 0, month: 0, day: 0 };
                                                                                                          +	}
                                                                                                          +
                                                                                                          +
                                                                                                          +	/**
                                                                                                          +	 * Date parser format date
                                                                                                          +	 */
                                                                                                          +	format(date: NgbDateStruct): string {
                                                                                                          +		let stringDate = '';
                                                                                                          +		if (date) {
                                                                                                          +			const stringDay = isNumber(date.day) ? padNumber(date.day) : '';
                                                                                                          +			const stringMonth = isNumber(date.month) ? padNumber(date.month) : '';
                                                                                                          +			const stringYear = isNumber(date.year) ? (date.year - this.anioSumar).toString() : '';
                                                                                                          +			// tslint:disable-next-line: max-line-length
                                                                                                          +			stringDate = (stringDay) ? this.mask.replace('dd', stringDay) : this.ddIndex === 0 ? this.mask.replace('dd' + this.separator, '') : this.mask.replace(this.separator + 'dd', '');
                                                                                                          +			// tslint:disable-next-line: max-line-length
                                                                                                          +			stringDate = (stringMonth) ? stringDate.replace('MM', stringMonth) : this.mmIndex === 0 ? stringDate.replace('MM' + this.separator, '') : stringDate.replace(this.separator + 'MM', '');
                                                                                                          +			if (this.anioSumar) {
                                                                                                          +				// tslint:disable-next-line: max-line-length
                                                                                                          +				stringDate = (stringDay) ? stringDate.replace('yy', stringYear) : this.yyIndex === 0 ? stringDate.replace('yy' + this.separator, '') : stringDate.replace(this.separator + 'yy', '');
                                                                                                          +			} else {
                                                                                                          +				// tslint:disable-next-line: max-line-length
                                                                                                          +				stringDate = (stringDay) ? stringDate.replace('yyyy', stringYear) : this.yyIndex === 0 ? stringDate.replace('yyyy' + this.separator, '') : stringDate.replace(this.separator + 'yyyy', '');
                                                                                                          +			}
                                                                                                          +		}
                                                                                                          +		return stringDate;
                                                                                                          +	}
                                                                                                          +}
                                                                                                          +
                                                                                                          +
                                                                                                          + +
                                                                                                          + + + + + + + + + + + + +
                                                                                                          +
                                                                                                          +

                                                                                                          result-matching ""

                                                                                                          +
                                                                                                            +
                                                                                                            +
                                                                                                            +

                                                                                                            No results matching ""

                                                                                                            +
                                                                                                            +
                                                                                                            +
                                                                                                            + +
                                                                                                            +
                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/ErrorMessageService.html b/documentation/injectables/ErrorMessageService.html new file mode 100644 index 0000000..7898d4d --- /dev/null +++ b/documentation/injectables/ErrorMessageService.html @@ -0,0 +1,496 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                            +
                                                                                                            + + +
                                                                                                            +
                                                                                                            + + + + + + + + + + + +
                                                                                                            +
                                                                                                            +

                                                                                                            +

                                                                                                            File

                                                                                                            +

                                                                                                            +

                                                                                                            + src/app/core/service/error-message.service.ts +

                                                                                                            + + + + +
                                                                                                            +

                                                                                                            Index

                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                            +
                                                                                                            Properties
                                                                                                            +
                                                                                                            + +
                                                                                                            +
                                                                                                            Methods
                                                                                                            +
                                                                                                            +
                                                                                                              +
                                                                                                            • + Public + clear +
                                                                                                            • +
                                                                                                            • + Public + set +
                                                                                                            • +
                                                                                                            +
                                                                                                            +
                                                                                                            Accessors
                                                                                                            +
                                                                                                            + +
                                                                                                            +
                                                                                                            + +
                                                                                                            +

                                                                                                            Constructor

                                                                                                            + + + + + + + + + + +
                                                                                                            +constructor() +
                                                                                                            + +
                                                                                                            +
                                                                                                            + +
                                                                                                            + +

                                                                                                            + Methods +

                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                            + + + + Public + clear + + + +
                                                                                                            + + clear() +
                                                                                                            + +
                                                                                                            +

                                                                                                            Clear all errors from error list

                                                                                                            +
                                                                                                            + +
                                                                                                            + Returns : void + +
                                                                                                            +
                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                            + + + + Public + set + + + +
                                                                                                            + + set(error: string, type: string, serviceUrl: string) +
                                                                                                            + +
                                                                                                            +

                                                                                                            Add error to errors list

                                                                                                            +
                                                                                                            + +
                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                            NameTypeOptional
                                                                                                            error + string + + No +
                                                                                                            type + string + + No +
                                                                                                            serviceUrl + string + + No +
                                                                                                            +
                                                                                                            +
                                                                                                            +
                                                                                                            +
                                                                                                            + Returns : void + +
                                                                                                            +
                                                                                                            + +
                                                                                                            +
                                                                                                            +
                                                                                                            +
                                                                                                            + +

                                                                                                            + Properties +

                                                                                                            + + + + + + + + + + + + + + + + + +
                                                                                                            + + + + Private + _errors + + +
                                                                                                            + Type : ErrorModel.ErrorMessageObject[] + +
                                                                                                            + Default value : [] +
                                                                                                            + +
                                                                                                            + + + + + + + + + + + + + + +
                                                                                                            + + + + Public + errors$ + + +
                                                                                                            + Default value : new EventEmitter<ErrorModel.ErrorMessageObject[]>() +
                                                                                                            + +
                                                                                                            +
                                                                                                            + +
                                                                                                            +

                                                                                                            + Accessors +

                                                                                                            + + + + + + + + + + + + + + +
                                                                                                            + + errors +
                                                                                                            + geterrors() +
                                                                                                            + +
                                                                                                            +
                                                                                                            +
                                                                                                            + + +
                                                                                                            +
                                                                                                            import { EventEmitter, Injectable } from '@angular/core';
                                                                                                            +@Injectable()
                                                                                                            +/**
                                                                                                            +	* Error service to show http error message in console
                                                                                                            +*/
                                                                                                            +export class ErrorMessageService {
                                                                                                            +	private _errors: ErrorModel.ErrorMessageObject[] = [];
                                                                                                            +	public errors$ = new EventEmitter<ErrorModel.ErrorMessageObject[]>();
                                                                                                            +
                                                                                                            +	constructor() {}
                                                                                                            +	/*
                                                                                                            +		* return errors
                                                                                                            +*/
                                                                                                            +	get errors(): ErrorModel.ErrorMessageObject[] {
                                                                                                            +		return this._errors;
                                                                                                            +	}
                                                                                                            +	/**
                                                                                                            +	* Add error to errors list
                                                                                                            +*/
                                                                                                            +	public set(error: string, type: string, serviceUrl: string) {
                                                                                                            +		this._errors.push({
                                                                                                            +			id: Date.now(),
                                                                                                            +			error: error,
                                                                                                            +			type: type,
                                                                                                            +			serviceUrl: serviceUrl
                                                                                                            +		});
                                                                                                            +		console.log(this._errors);
                                                                                                            +		this.errors$.emit(this._errors);
                                                                                                            +	}
                                                                                                            +/**
                                                                                                            +	* Clear all errors from error list
                                                                                                            +*/
                                                                                                            +	public clear() {
                                                                                                            +		this._errors = [];
                                                                                                            +		this.errors$.emit(this._errors);
                                                                                                            +	}
                                                                                                            +}
                                                                                                            +
                                                                                                            +
                                                                                                            + +
                                                                                                            + + + + + + + + + + + + +
                                                                                                            +
                                                                                                            +

                                                                                                            result-matching ""

                                                                                                            +
                                                                                                              +
                                                                                                              +
                                                                                                              +

                                                                                                              No results matching ""

                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/FiltersService.html b/documentation/injectables/FiltersService.html new file mode 100644 index 0000000..322fda1 --- /dev/null +++ b/documentation/injectables/FiltersService.html @@ -0,0 +1,727 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                              +
                                                                                                              + + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + +
                                                                                                              +
                                                                                                              +

                                                                                                              +

                                                                                                              File

                                                                                                              +

                                                                                                              +

                                                                                                              + src/app/core/service/filters.service.ts +

                                                                                                              + + + + +
                                                                                                              +

                                                                                                              Index

                                                                                                              + + + + + + + + + + + + + + + +
                                                                                                              +
                                                                                                              Methods
                                                                                                              +
                                                                                                              + +
                                                                                                              +
                                                                                                              + +
                                                                                                              +

                                                                                                              Constructor

                                                                                                              + + + + + + + + + + + + + +
                                                                                                              +constructor(http: HttpClient) +
                                                                                                              + +
                                                                                                              +
                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                              NameTypeOptional
                                                                                                              http + HttpClient + + No +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + +
                                                                                                              + +

                                                                                                              + Methods +

                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                              + + + + getAcreditedFilters + + + +
                                                                                                              +getAcreditedFilters(name?: String) +
                                                                                                              + +
                                                                                                              +

                                                                                                              get all acreditors in system, but only name and id. Optional filter by name

                                                                                                              +
                                                                                                              + +
                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                              NameTypeOptional
                                                                                                              name + String + + Yes +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + Returns : Observable<any> + +
                                                                                                              +
                                                                                                              +

                                                                                                              an observable containing the acreditors

                                                                                                              + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                              + + + + getCategoryFilters + + + +
                                                                                                              +getCategoryFilters() +
                                                                                                              + +
                                                                                                              +

                                                                                                              get resource categories

                                                                                                              +
                                                                                                              + +
                                                                                                              +
                                                                                                              +
                                                                                                              + Returns : Observable<any> + +
                                                                                                              +
                                                                                                              +

                                                                                                              an observable containing the categories object list

                                                                                                              + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                              + + + + getInstitutionFilters + + + +
                                                                                                              +getInstitutionFilters(name?: String) +
                                                                                                              + +
                                                                                                              +

                                                                                                              get all institutions in system, but only name and id. Optional filter by name

                                                                                                              +
                                                                                                              + +
                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                              NameTypeOptional
                                                                                                              name + String + + Yes +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + Returns : Observable<any> + +
                                                                                                              +
                                                                                                              +

                                                                                                              an observable containing the institutions

                                                                                                              + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                              + + + + getorganisationbyName + + + +
                                                                                                              +getorganisationbyName(name?: String) +
                                                                                                              + +
                                                                                                              +

                                                                                                              get all organisations in system, but only name and id. Optional filter by name

                                                                                                              +
                                                                                                              + +
                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                              NameTypeOptional
                                                                                                              name + String + + Yes +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + Returns : Observable<any> + +
                                                                                                              +
                                                                                                              +

                                                                                                              an observable containing the organisations

                                                                                                              + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                              + + + + getSpecializationFilters + + + +
                                                                                                              +getSpecializationFilters(name?: String) +
                                                                                                              + +
                                                                                                              +

                                                                                                              get all courses in system, but only name and id. Optional filter by name

                                                                                                              +
                                                                                                              + +
                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                              NameTypeOptional
                                                                                                              name + String + + Yes +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + Returns : Observable<any> + +
                                                                                                              +
                                                                                                              +

                                                                                                              an observable containing the courses

                                                                                                              + +
                                                                                                              +
                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                              + + + + getSubCategories + + + +
                                                                                                              +getSubCategories(id: string, term: string) +
                                                                                                              + +
                                                                                                              +

                                                                                                              get subcategories of a category (filters[2]) and optionaly filter by name (filters[1])

                                                                                                              +
                                                                                                              + +
                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                              NameTypeOptionalDescription
                                                                                                              id + string + + No + +

                                                                                                              of the category

                                                                                                              + +
                                                                                                              term + string + + No + +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              +
                                                                                                              + Returns : Observable<any> + +
                                                                                                              +
                                                                                                              +

                                                                                                              an observable containing the categories with parent id = id of category

                                                                                                              + +
                                                                                                              +
                                                                                                              +
                                                                                                              + +
                                                                                                              + + +
                                                                                                              +
                                                                                                              import { Injectable } from '@angular/core';
                                                                                                              +import { HttpClient } from '@angular/common/http';
                                                                                                              +import { Observable } from 'rxjs';
                                                                                                              +
                                                                                                              +@Injectable()
                                                                                                              +export class FiltersService {
                                                                                                              +	constructor(private http: HttpClient) {}
                                                                                                              +	/**
                                                                                                              +	* get resource categories
                                                                                                              +	* @returns an observable containing the categories object list
                                                                                                              +	*/
                                                                                                              +	getCategoryFilters(): Observable<any> {
                                                                                                              +		return this.http.get('/resources/categories' );
                                                                                                              +	}
                                                                                                              +	/**
                                                                                                              +	* get subcategories of a category (filters[2]) and optionaly filter by name (filters[1])
                                                                                                              +	* @param {string} searchterm The term to filter by
                                                                                                              +	* @param {string} id of the category
                                                                                                              +	* @returns an observable containing the categories with parent id = id of category
                                                                                                              +	*/
                                                                                                              +	getSubCategories(id: string, term: string): Observable<any> {
                                                                                                              +		return this.http.get(`/resources/categories?filters[2]=${id}&filters[1]=${term}`);
                                                                                                              +	}
                                                                                                              +	/**
                                                                                                              +	* get all organisations in system, but only name and id. Optional filter by name
                                                                                                              +	* @param {string} searchterm The term to filter by
                                                                                                              +	* @returns an observable containing the organisations
                                                                                                              +	*/
                                                                                                              +	getorganisationbyName(name?: String): Observable<any> {
                                                                                                              +		let params = {};
                                                                                                              +		if (name) { params = {...params, ...{name: name}}; }
                                                                                                              +		return this.http.get('/filter/organisations', {params: params} );
                                                                                                              +	}
                                                                                                              +	/**
                                                                                                              +	* get all courses in system, but only name and id. Optional filter by name
                                                                                                              +	* @param {string} searchterm The term to filter by
                                                                                                              +	* @returns an observable containing the courses
                                                                                                              +	*/
                                                                                                              +	getSpecializationFilters(name?: String): Observable<any> {
                                                                                                              +		let params = {};
                                                                                                              +		if (name) { params = {...params, ...{name: name}}; }
                                                                                                              +		return this.http.get('/filter/volunteers/courses', {params: params} );
                                                                                                              +	}
                                                                                                              +	/**
                                                                                                              +	* get all institutions in system, but only name and id. Optional filter by name
                                                                                                              +	* @param {string} searchterm The term to filter by
                                                                                                              +	* @returns an observable containing the institutions
                                                                                                              +	*/
                                                                                                              +	getInstitutionFilters(name?: String): Observable<any> {
                                                                                                              +		let params = {};
                                                                                                              +		if (name) { params = {...params, ...{name: name}}; }
                                                                                                              +		return this.http.get('/filter/users/institutions', {params: params});
                                                                                                              +	}
                                                                                                              +	/**
                                                                                                              +	* get all acreditors in system, but only name and id. Optional filter by name
                                                                                                              +	* @param {string} searchterm The term to filter by
                                                                                                              +	* @returns an observable containing the acreditors
                                                                                                              +	*/
                                                                                                              +	getAcreditedFilters(name?: String): Observable<any> {
                                                                                                              +		let params = {};
                                                                                                              +		if (name) { params = {...params, ...{name: name}}; }
                                                                                                              +		return this.http.get('/filter/accreditedby', {params: params} );
                                                                                                              +	}
                                                                                                              +}
                                                                                                              +
                                                                                                              +
                                                                                                              + +
                                                                                                              + + + + + + + + + + + + +
                                                                                                              +
                                                                                                              +

                                                                                                              result-matching ""

                                                                                                              +
                                                                                                                +
                                                                                                                +
                                                                                                                +

                                                                                                                No results matching ""

                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/LocalStorageService.html b/documentation/injectables/LocalStorageService.html new file mode 100644 index 0000000..7dddf26 --- /dev/null +++ b/documentation/injectables/LocalStorageService.html @@ -0,0 +1,768 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                +
                                                                                                                + + +
                                                                                                                +
                                                                                                                + + + + + + + + + + + +
                                                                                                                +
                                                                                                                +

                                                                                                                +

                                                                                                                File

                                                                                                                +

                                                                                                                +

                                                                                                                + src/app/core/local-storage.service.ts +

                                                                                                                + +

                                                                                                                +

                                                                                                                Description

                                                                                                                +

                                                                                                                +

                                                                                                                +

                                                                                                                LocalStorage injectable service

                                                                                                                + +

                                                                                                                + + + +
                                                                                                                +

                                                                                                                Index

                                                                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                +
                                                                                                                Properties
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                Methods
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                + +
                                                                                                                +

                                                                                                                Constructor

                                                                                                                + + + + + + + + + + + + + +
                                                                                                                +constructor() +
                                                                                                                + +
                                                                                                                +

                                                                                                                Local storage wrapper

                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                + +
                                                                                                                + +

                                                                                                                + Methods +

                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                + + + + Public + clearAll + + + +
                                                                                                                + + clearAll() +
                                                                                                                + +
                                                                                                                +

                                                                                                                Local storage remove all variables

                                                                                                                +
                                                                                                                + +
                                                                                                                + Returns : any + +
                                                                                                                +
                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                + + + + Public + clearItem + + + +
                                                                                                                + + clearItem(key: string) +
                                                                                                                + +
                                                                                                                +

                                                                                                                Local storage remove variable

                                                                                                                +
                                                                                                                + +
                                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                NameTypeOptional
                                                                                                                key + string + + No +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                + Returns : any + +
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                + + + + Public + getItem + + + +
                                                                                                                + + getItem(key: string) +
                                                                                                                + +
                                                                                                                +

                                                                                                                Local storage get variable

                                                                                                                +
                                                                                                                + +
                                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                NameTypeOptional
                                                                                                                key + string + + No +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                + Returns : any + +
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                + + + + Public + setItem + + + +
                                                                                                                + + setItem(key: string, value: any) +
                                                                                                                + +
                                                                                                                +

                                                                                                                Local storage set variable

                                                                                                                +
                                                                                                                + +
                                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                NameTypeOptional
                                                                                                                key + string + + No +
                                                                                                                value + any + + No +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                + Returns : any + +
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                +
                                                                                                                +
                                                                                                                + +

                                                                                                                + Properties +

                                                                                                                + + + + + + + + + + + + + + + + + +
                                                                                                                + + + + localStorage + + +
                                                                                                                + Type : any + +
                                                                                                                + +
                                                                                                                +

                                                                                                                Local storage internal variables

                                                                                                                +
                                                                                                                +
                                                                                                                + + + + + + + + + + + + + + +
                                                                                                                + + + + sessionStorage + + +
                                                                                                                + Type : any + +
                                                                                                                + +
                                                                                                                +
                                                                                                                + +
                                                                                                                + + +
                                                                                                                +
                                                                                                                import { Injectable } from '@angular/core';
                                                                                                                +
                                                                                                                +/**
                                                                                                                +* Create cookie for domain
                                                                                                                +*/
                                                                                                                +function createCookie(name: any, value: any, days: any) {
                                                                                                                +	let date: any, expires;
                                                                                                                +
                                                                                                                +	if (days) {
                                                                                                                +		date = new Date();
                                                                                                                +		date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
                                                                                                                +		expires = '; expires=' + date.toGMTString();
                                                                                                                +	} else {
                                                                                                                +		expires = '';
                                                                                                                +	}
                                                                                                                +	document.cookie = name + '=' + value + expires + '; path=/';
                                                                                                                +}
                                                                                                                +
                                                                                                                +/**
                                                                                                                +* Read cookie for domain
                                                                                                                +*/
                                                                                                                +function readCookie(name: any) {
                                                                                                                +	const nameEQ = name + '=',
                                                                                                                +		ca = document.cookie.split(';');
                                                                                                                +	let i, c;
                                                                                                                +
                                                                                                                +	for (i = 0; i < ca.length; i++) {
                                                                                                                +		c = ca[i];
                                                                                                                +		while (c.charAt(0) === ' ') {
                                                                                                                +			c = c.substring(1, c.length);
                                                                                                                +		}
                                                                                                                +
                                                                                                                +		if (c.indexOf(nameEQ) === 0) {
                                                                                                                +			return c.substring(nameEQ.length, c.length);
                                                                                                                +		}
                                                                                                                +	}
                                                                                                                +	return null;
                                                                                                                +}
                                                                                                                +
                                                                                                                +/**
                                                                                                                +* Set cookie data
                                                                                                                +*/
                                                                                                                +function setData(type: any, data: any) {
                                                                                                                +	// Convert data into JSON and encode to accommodate for special characters.
                                                                                                                +	data = encodeURIComponent(JSON.stringify(data));
                                                                                                                +	// Create cookie.
                                                                                                                +	if (type === 'session') {
                                                                                                                +		createCookie(getSessionName(), data, 365);
                                                                                                                +	} else {
                                                                                                                +		createCookie('localStorage', data, 365);
                                                                                                                +	}
                                                                                                                +}
                                                                                                                +
                                                                                                                +/**
                                                                                                                +* Clear all cookies
                                                                                                                +*/
                                                                                                                +function clearData(type: any) {
                                                                                                                +	if (type === 'session') {
                                                                                                                +		createCookie(getSessionName(), '', 365);
                                                                                                                +	} else {
                                                                                                                +		createCookie('localStorage', '', 365);
                                                                                                                +	}
                                                                                                                +}
                                                                                                                +
                                                                                                                +/**
                                                                                                                +* Get cookie data
                                                                                                                +*/
                                                                                                                +function getData(type: any) {
                                                                                                                +	// Get cookie data.
                                                                                                                +	const data =
                                                                                                                +		type === 'session'
                                                                                                                +			? readCookie(getSessionName())
                                                                                                                +			: readCookie('localStorage');
                                                                                                                +	// If we have some data decode, parse and return it.
                                                                                                                +	return data ? JSON.parse(decodeURIComponent(data)) : {};
                                                                                                                +}
                                                                                                                +
                                                                                                                +/**
                                                                                                                +* Get session name
                                                                                                                +*/
                                                                                                                +function getSessionName() {
                                                                                                                +	// If there is no name for this window, set one.
                                                                                                                +	// To ensure it's unquie use the current timestamp.
                                                                                                                +	if (!window.name) {
                                                                                                                +		window.name = new Date().getTime().toString();
                                                                                                                +	}
                                                                                                                +	return 'sessionStorage' + window.name;
                                                                                                                +}
                                                                                                                +
                                                                                                                +/**
                                                                                                                + * LocalStorage injectable service
                                                                                                                + */
                                                                                                                +@Injectable()
                                                                                                                +export class LocalStorageService {
                                                                                                                +	/**
                                                                                                                +	* Local storage internal variables
                                                                                                                +	*/
                                                                                                                +	localStorage: any;
                                                                                                                +	sessionStorage: any;
                                                                                                                +	/**
                                                                                                                +	* Local storage wrapper
                                                                                                                +	*/
                                                                                                                +	constructor() {
                                                                                                                +		try {
                                                                                                                +			// Test webstorage existence.
                                                                                                                +			if (!window.localStorage || !window.sessionStorage) {
                                                                                                                +				throw new Error('exception');
                                                                                                                +			}
                                                                                                                +			// Test webstorage accessibility - Needed for Safari private browsing.
                                                                                                                +			window.localStorage.setItem('storage_test', '1');
                                                                                                                +			window.localStorage.removeItem('storage_test');
                                                                                                                +			this.localStorage = window.localStorage;
                                                                                                                +		} catch (e) {
                                                                                                                +			class CustomStorage {
                                                                                                                +				type: any;
                                                                                                                +				data: any;
                                                                                                                +				length = 0;
                                                                                                                +				constructor(type: any) {
                                                                                                                +					this.type = type;
                                                                                                                +					// Init data, if already present
                                                                                                                +					this.data = getData(type);
                                                                                                                +				}
                                                                                                                +				public clear() {
                                                                                                                +					this.data = {};
                                                                                                                +					this.length = 0;
                                                                                                                +					clearData(this.type);
                                                                                                                +				}
                                                                                                                +				public getItem(key: any) {
                                                                                                                +					return this.data[key] === undefined ? null : this.data[key];
                                                                                                                +				}
                                                                                                                +				public key(i: any) {
                                                                                                                +					// not perfect, but works
                                                                                                                +					let ctr = 0;
                                                                                                                +					for (const k in this.data) {
                                                                                                                +						if (ctr === i) {
                                                                                                                +							return k;
                                                                                                                +						} else {
                                                                                                                +							ctr++;
                                                                                                                +						}
                                                                                                                +					}
                                                                                                                +					return null;
                                                                                                                +				}
                                                                                                                +				public removeItem(key: any) {
                                                                                                                +					delete this.data[key];
                                                                                                                +					this.length--;
                                                                                                                +					setData(this.type, this.data);
                                                                                                                +				}
                                                                                                                +				public setItem(key: any, value: any) {
                                                                                                                +					this.data[key] = value + ''; // forces the value to a string
                                                                                                                +					this.length++;
                                                                                                                +					setData(this.type, this.data);
                                                                                                                +				}
                                                                                                                +			}
                                                                                                                +
                                                                                                                +			// Replace window.localStorage and window.sessionStorage with out custom
                                                                                                                +			// implementation.
                                                                                                                +
                                                                                                                +			const localStorage = new CustomStorage('local');
                                                                                                                +			const sessionStorage = new CustomStorage('session');
                                                                                                                +			Object.defineProperty(window, 'localStorage', {
                                                                                                                +				get: () => localStorage
                                                                                                                +			});
                                                                                                                +			this.localStorage = localStorage;
                                                                                                                +			this.sessionStorage = sessionStorage;
                                                                                                                +		}
                                                                                                                +	}
                                                                                                                +
                                                                                                                +	/**
                                                                                                                +	* Local storage set variable
                                                                                                                +	*/
                                                                                                                +	public setItem(key: string, value: any) {
                                                                                                                +		return this.localStorage.setItem(key, value);
                                                                                                                +	}
                                                                                                                +
                                                                                                                +	/**
                                                                                                                +	* Local storage get variable
                                                                                                                +	*/
                                                                                                                +	public getItem(key: string) {
                                                                                                                +		return this.localStorage.getItem(key);
                                                                                                                +	}
                                                                                                                +
                                                                                                                +	/**
                                                                                                                +	* Local storage remove variable
                                                                                                                +	*/
                                                                                                                +	public clearItem(key: string) {
                                                                                                                +		return this.localStorage.removeItem(key);
                                                                                                                +	}
                                                                                                                +
                                                                                                                +	/**
                                                                                                                +	* Local storage remove all variables
                                                                                                                +	*/
                                                                                                                +	public clearAll() {
                                                                                                                +		return this.localStorage.clear();
                                                                                                                +	}
                                                                                                                +}
                                                                                                                +
                                                                                                                +
                                                                                                                + +
                                                                                                                + + + + + + + + + + + + +
                                                                                                                +
                                                                                                                +

                                                                                                                result-matching ""

                                                                                                                +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  +

                                                                                                                  No results matching ""

                                                                                                                  +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/MapService.html b/documentation/injectables/MapService.html new file mode 100644 index 0000000..655e3e2 --- /dev/null +++ b/documentation/injectables/MapService.html @@ -0,0 +1,279 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                  +
                                                                                                                  + + +
                                                                                                                  +
                                                                                                                  + + + + + + + + + + + +
                                                                                                                  +
                                                                                                                  +

                                                                                                                  +

                                                                                                                  File

                                                                                                                  +

                                                                                                                  +

                                                                                                                  + src/app/pages/map/map.service.ts +

                                                                                                                  + +

                                                                                                                  +

                                                                                                                  Description

                                                                                                                  +

                                                                                                                  +

                                                                                                                  +

                                                                                                                  Map services

                                                                                                                  + +

                                                                                                                  + + + +
                                                                                                                  +

                                                                                                                  Index

                                                                                                                  + + + + + + + + + + + + + + + +
                                                                                                                  +
                                                                                                                  Methods
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  +

                                                                                                                  Constructor

                                                                                                                  + + + + + + + + + + + + + +
                                                                                                                  +constructor(http: HttpClient) +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                  NameTypeOptional
                                                                                                                  http + HttpClient + + No +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  + +

                                                                                                                  + Methods +

                                                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                                                  + + + + getMapFilters + + + +
                                                                                                                  +getMapFilters() +
                                                                                                                  + +
                                                                                                                  + +
                                                                                                                  + Returns : Observable<any> + +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  + + +
                                                                                                                  +
                                                                                                                  import { Injectable } from '@angular/core';
                                                                                                                  +import { HttpClient } from '@angular/common/http';
                                                                                                                  +import { Observable } from 'rxjs';
                                                                                                                  +/**
                                                                                                                  +	 * Map services
                                                                                                                  +	 */
                                                                                                                  +@Injectable({
                                                                                                                  +		providedIn: 'root'
                                                                                                                  +	})
                                                                                                                  +export class MapService {
                                                                                                                  +	constructor(private http: HttpClient) {}
                                                                                                                  +
                                                                                                                  +	getMapFilters(): Observable<any> {
                                                                                                                  +		return this.http.get('/filter/map');
                                                                                                                  +	}
                                                                                                                  +}
                                                                                                                  +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  + + + + + + + + + + + + +
                                                                                                                  +
                                                                                                                  +

                                                                                                                  result-matching ""

                                                                                                                  +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    No results matching ""

                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/OrganisationService.html b/documentation/injectables/OrganisationService.html new file mode 100644 index 0000000..a523b4c --- /dev/null +++ b/documentation/injectables/OrganisationService.html @@ -0,0 +1,1593 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                    +
                                                                                                                    + + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    +

                                                                                                                    File

                                                                                                                    +

                                                                                                                    +

                                                                                                                    + src/app/pages/organisations/organisations.service.ts +

                                                                                                                    + + + + +
                                                                                                                    +

                                                                                                                    Index

                                                                                                                    + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    +
                                                                                                                    Properties
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    Methods
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    Constructor

                                                                                                                    + + + + + + + + + + + + + +
                                                                                                                    +constructor(httpClient: HttpClient) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    fields for adding a new resource

                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptional
                                                                                                                    httpClient + HttpClient + + No +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + +

                                                                                                                    + Methods +

                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + addorganisation + + + +
                                                                                                                    +addorganisation(payload: any) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    post a new organisation to website, auto add Header

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    payload + any + + No + +

                                                                                                                    the org data to be added

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : any + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + deleteorganisation + + + +
                                                                                                                    +deleteorganisation(id: String) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    delete organisation by id

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + String + + No + +

                                                                                                                    of the organistation to be deleted

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + editOrganisation + + + +
                                                                                                                    +editOrganisation(id: string, payload: any) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    edit a new organisation

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + string + + No + +

                                                                                                                    of the organistation to be modified

                                                                                                                    + +
                                                                                                                    payload + any + + No + +

                                                                                                                    the org data to be modified

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : any + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getorganisation + + + +
                                                                                                                    +getorganisation(id: String) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get organisation by id

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + String + + No + +

                                                                                                                    of the organistation to be fetched

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response organisation

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getorganisationbyName + + + +
                                                                                                                    +getorganisationbyName(name: String) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get organisation by name

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    name + String + + No + +

                                                                                                                    of the organistation to be found

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getorganisations + + + +
                                                                                                                    +getorganisations(paginationObj?: any) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get all organisations

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptional
                                                                                                                    paginationObj + any + + Yes +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with organisations list

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getPager + + + +
                                                                                                                    +getPager() +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get the standard organisation pager

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : any + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    pager

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getResourcePager + + + +
                                                                                                                    +getResourcePager() +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    resource pager for ngo details resource table

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Returns : any + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getResourcesbyorganisation + + + +
                                                                                                                    +getResourcesbyorganisation(id: String, paginationObj?: any) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get resource table with ngo id

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + String + + No + +

                                                                                                                    of the organistation to be queried

                                                                                                                    + +
                                                                                                                    paginationObj + any + + Yes + +

                                                                                                                    of the resource table

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getVolunteerPager + + + +
                                                                                                                    +getVolunteerPager() +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    volunteer pager for ngo details volunteer table

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Returns : any + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + getVolunteersbyorganisation + + + +
                                                                                                                    +getVolunteersbyorganisation(id: String, paginationObj?: any) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get volunteers table with ngo id

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + String + + No + +

                                                                                                                    of the organistation to be queried

                                                                                                                    + +
                                                                                                                    paginationObj + any + + Yes + +

                                                                                                                    of the volunteers table

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + sendUpdateDataEmail + + + +
                                                                                                                    +sendUpdateDataEmail(id: String) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    send email to the org to update data

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + String + + No + +

                                                                                                                    of the organistation to be notified

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + setPager + + + +
                                                                                                                    +setPager() +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    init pager with default values

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Returns : void + +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + updated + + + +
                                                                                                                    +updated(id: String) +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    get organisation by id

                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    NameTypeOptionalDescription
                                                                                                                    id + String + + No + +

                                                                                                                    of the organistation that has been updated

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + Returns : Observable<any> + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    observable with response

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + +

                                                                                                                    + Properties +

                                                                                                                    + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + pager + + +
                                                                                                                    + Type : any + +
                                                                                                                    + Default value : { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + } +
                                                                                                                    + +
                                                                                                                    +

                                                                                                                    pagers for the tables in the component

                                                                                                                    +
                                                                                                                    +
                                                                                                                    + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + resourcePager + + +
                                                                                                                    + Type : any + +
                                                                                                                    + Default value : { + sort: 1, + method: 'ASC', + page: 1, + size: 20, + total: 0, + filters: {} + } +
                                                                                                                    + +
                                                                                                                    + + + + + + + + + + + + + + + + + +
                                                                                                                    + + + + volunteerPager + + +
                                                                                                                    + Type : any + +
                                                                                                                    + Default value : { + sort: 1, + method: 'ASC', + page: 1, + size: 20, + total: 0, + filters: {} + } +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + + +
                                                                                                                    +
                                                                                                                    import { Injectable } from '@angular/core';
                                                                                                                    +import { Observable } from 'rxjs/internal/Observable';
                                                                                                                    +import { HttpHeaders, HttpClient } from '@angular/common/http';
                                                                                                                    +
                                                                                                                    +@Injectable({
                                                                                                                    +		providedIn: 'root'
                                                                                                                    +	})
                                                                                                                    +export class OrganisationService {
                                                                                                                    +	/**
                                                                                                                    +	 * pagers for the tables in the component
                                                                                                                    +	 */
                                                                                                                    +	pager: any = {
                                                                                                                    +		sort: 1,
                                                                                                                    +		method: 'ASC',
                                                                                                                    +		page: 1,
                                                                                                                    +		size: 15,
                                                                                                                    +		total: 0,
                                                                                                                    +		filters: {}
                                                                                                                    +	};
                                                                                                                    +	volunteerPager: any = {
                                                                                                                    +		sort: 1,
                                                                                                                    +		method: 'ASC',
                                                                                                                    +		page: 1,
                                                                                                                    +		size: 20,
                                                                                                                    +		total: 0,
                                                                                                                    +		filters: {}
                                                                                                                    +	};
                                                                                                                    +	resourcePager: any = {
                                                                                                                    +		sort: 1,
                                                                                                                    +		method: 'ASC',
                                                                                                                    +		page: 1,
                                                                                                                    +		size: 20,
                                                                                                                    +		total: 0,
                                                                                                                    +		filters: {}
                                                                                                                    +	};
                                                                                                                    +/**
                                                                                                                    +	 * get the standard organisation pager
                                                                                                                    +	 * @returns pager
                                                                                                                    +	 */
                                                                                                                    +	getPager() {
                                                                                                                    +		return {...this.pager};
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * init pager with default values
                                                                                                                    +	 */
                                                                                                                    +	setPager() {
                                                                                                                    +		this.pager = {
                                                                                                                    +			sort: 1,
                                                                                                                    +			method: 'ASC',
                                                                                                                    +			page: 1,
                                                                                                                    +			size: 15,
                                                                                                                    +			total: 0,
                                                                                                                    +			filters: {}
                                                                                                                    +		};
                                                                                                                    +	}
                                                                                                                    +/**
                                                                                                                    +	 * volunteer pager for ngo details volunteer table
                                                                                                                    +	 */
                                                                                                                    +	getVolunteerPager() {
                                                                                                                    +		return {...this.volunteerPager};
                                                                                                                    +	}
                                                                                                                    +/**
                                                                                                                    +	 * resource pager for ngo details resource table
                                                                                                                    +	 */
                                                                                                                    +	getResourcePager() {
                                                                                                                    +		return {...this.resourcePager};
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * fields for adding a new resource
                                                                                                                    +	 */
                                                                                                                    +	constructor(private httpClient: HttpClient) {}
                                                                                                                    +
                                                                                                                    +	/**
                                                                                                                    +	 * post a new organisation to website, auto add Header
                                                                                                                    +	 * @param {any} payload the org data to be added
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	addorganisation(payload: any) {
                                                                                                                    +		return this.httpClient.post('/organisations', payload );
                                                                                                                    +	}
                                                                                                                    +/**
                                                                                                                    +	 * edit a new organisation
                                                                                                                    +	 * @param {any} payload the org data to be modified
                                                                                                                    +	 * @param {string} id of the organistation to be modified
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	editOrganisation(id: string, payload: any) {
                                                                                                                    +
                                                                                                                    +		return this.httpClient.put(`/organisations/${id}`, payload );
                                                                                                                    +	}
                                                                                                                    +
                                                                                                                    +	/**
                                                                                                                    +	 * get all organisations
                                                                                                                    +	 * @param {any} pager with sorting, filters, page etc.
                                                                                                                    +	 * @returns observable with organisations list
                                                                                                                    +	 */
                                                                                                                    +	getorganisations(paginationObj?: any): Observable<any> {
                                                                                                                    +		let params: any = {};
                                                                                                                    +
                                                                                                                    +		params = {...params, ...paginationObj};
                                                                                                                    +		if (params.filters) {
                                                                                                                    +			Object.keys(params.filters).forEach((key) => {
                                                                                                                    +				if (params.filters[key]) {
                                                                                                                    +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                    +				}
                                                                                                                    +			});
                                                                                                                    +			delete params.filters;
                                                                                                                    +		}
                                                                                                                    +		return this.httpClient.get('/organisations', { params: params });
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * get organisation by id
                                                                                                                    +	 * @param {string} id of the organistation to be fetched
                                                                                                                    +	 * @returns observable with response organisation
                                                                                                                    +	 */
                                                                                                                    +	getorganisation(id: String): Observable<any> {
                                                                                                                    +		return this.httpClient.get(`/organisations/${id}`);
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * send email to the org to update data
                                                                                                                    +	 * @param {string} id of the organistation to be notified
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	sendUpdateDataEmail(id: String): Observable<any> {
                                                                                                                    +		return this.httpClient.get(`/organisations/${id}/email`);
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * get organisation by id
                                                                                                                    +	 * @param {string} id of the organistation that has been updated
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	updated(id: String): Observable<any> {
                                                                                                                    +		return this.httpClient.get(`/organisations/${id}/validate`);
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * delete organisation by id
                                                                                                                    +	 * @param {string} id of the organistation to be deleted
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	deleteorganisation(id: String): Observable<any> {
                                                                                                                    +		return this.httpClient.delete(`/organisations/${id}`);
                                                                                                                    +	}
                                                                                                                    +	/**
                                                                                                                    +	 * get organisation by name
                                                                                                                    +	 * @param {string} name of the organistation to be found
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	getorganisationbyName(name: String): Observable<any> {
                                                                                                                    +		let params = {};
                                                                                                                    +		params = {...params, ...{name: name}};
                                                                                                                    +		return this.httpClient.get('/organisations', {params: params} );
                                                                                                                    +	}
                                                                                                                    +/**
                                                                                                                    +	 * get resource table with ngo id
                                                                                                                    +	 * @param {string} id of the organistation to be queried
                                                                                                                    +	 * @param {any} paginationObj of the resource table
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	getResourcesbyorganisation(id: String, paginationObj?: any): Observable<any> {
                                                                                                                    +		let params: any = {};
                                                                                                                    +
                                                                                                                    +		params = {...params, ...paginationObj};
                                                                                                                    +		if (params.filters) {
                                                                                                                    +			Object.keys(params.filters).forEach((key) => {
                                                                                                                    +				if (params.filters[key]) {
                                                                                                                    +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                    +				}
                                                                                                                    +			});
                                                                                                                    +			delete params.filters;
                                                                                                                    +		}
                                                                                                                    +		return this.httpClient.get(`/organisations/${id}/resources`, {params: params});
                                                                                                                    +	}
                                                                                                                    +/**
                                                                                                                    +	 * get volunteers table with ngo id
                                                                                                                    +	 * @param {string} id of the organistation to be queried
                                                                                                                    +	 * @param {any} paginationObj of the volunteers table
                                                                                                                    +	 * @returns observable with response
                                                                                                                    +	 */
                                                                                                                    +	getVolunteersbyorganisation(id: String, paginationObj?: any): Observable<any> {
                                                                                                                    +		let params: any = {};
                                                                                                                    +
                                                                                                                    +		params = {...params, ...paginationObj};
                                                                                                                    +		if (params.filters) {
                                                                                                                    +			Object.keys(params.filters).forEach((key) => {
                                                                                                                    +				if (params.filters[key]) {
                                                                                                                    +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                    +				}
                                                                                                                    +			});
                                                                                                                    +			delete params.filters;
                                                                                                                    +		}
                                                                                                                    +		return this.httpClient.get(`/organisations/${id}/volunteers`, {params: params});
                                                                                                                    +	}
                                                                                                                    +}
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + + + + + + + + + + + + +
                                                                                                                    +
                                                                                                                    +

                                                                                                                    result-matching ""

                                                                                                                    +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      No results matching ""

                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/ResourcesService.html b/documentation/injectables/ResourcesService.html new file mode 100644 index 0000000..9f8373b --- /dev/null +++ b/documentation/injectables/ResourcesService.html @@ -0,0 +1,1137 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                      +
                                                                                                                      + + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      +

                                                                                                                      File

                                                                                                                      +

                                                                                                                      +

                                                                                                                      + src/app/pages/resources/resources.service.ts +

                                                                                                                      + + + + +
                                                                                                                      +

                                                                                                                      Index

                                                                                                                      + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      +
                                                                                                                      Properties
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      Methods
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      Constructor

                                                                                                                      + + + + + + + + + + + + + +
                                                                                                                      +constructor(httpClient: HttpClient) +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptional
                                                                                                                      httpClient + HttpClient + + No +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + +

                                                                                                                      + Methods +

                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + addResource + + + +
                                                                                                                      +addResource(payload: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      post a new resource to website, auto add Header

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptionalDescription
                                                                                                                      payload + any + + No + +

                                                                                                                      the org data to be added

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : any + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with response

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + deleteResource + + + +
                                                                                                                      +deleteResource(id: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      delete resource by id

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptionalDescription
                                                                                                                      id + any + + No + +

                                                                                                                      of the resource to be deleted

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : any + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with response

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + editResource + + + +
                                                                                                                      +editResource(id: string, payload: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      edit a resource

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptionalDescription
                                                                                                                      id + string + + No + +

                                                                                                                      of the resource to be modified

                                                                                                                      + +
                                                                                                                      payload + any + + No + +

                                                                                                                      the resource data to be modified

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : any + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with response

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + getPager + + + +
                                                                                                                      +getPager() +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      get the resource pager

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : any + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      pager

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + getResource + + + +
                                                                                                                      +getResource(id: String, paginationObj?: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      get resource by id

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptionalDescription
                                                                                                                      id + String + + No + +

                                                                                                                      of the resource to be fetched

                                                                                                                      + +
                                                                                                                      paginationObj + any + + Yes + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : Observable<any> + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with response resource

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + getResourceBySlug + + + +
                                                                                                                      +getResourceBySlug(slug: string, pager: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      get resource by slug

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptionalDescription
                                                                                                                      slug + string + + No + +

                                                                                                                      name without diacritics the resource to be fetched

                                                                                                                      + +
                                                                                                                      pager + any + + No + +

                                                                                                                      with sorting, filters, page etc

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : any + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with response resource

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + getResources + + + +
                                                                                                                      +getResources(paginationObj?: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      get all Resources

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptional
                                                                                                                      paginationObj + any + + Yes +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : Observable<any> + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with resources list

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + importCsv + + + +
                                                                                                                      +importCsv(file: any, id: any) +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      send CSV and organisation id to server

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      NameTypeOptionalDescription
                                                                                                                      file + any + + No + +

                                                                                                                      with CSV data

                                                                                                                      + +
                                                                                                                      id + any + + No + +

                                                                                                                      of the organisation to be modfified

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + Returns : any + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      observable with response resource

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + setPager + + + +
                                                                                                                      +setPager() +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      init pager with default values

                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + Returns : void + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +

                                                                                                                      + Properties +

                                                                                                                      + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      + + + + pager + + +
                                                                                                                      + Type : any + +
                                                                                                                      + Default value : { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + } +
                                                                                                                      + +
                                                                                                                      +

                                                                                                                      pager for resources table

                                                                                                                      +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + + +
                                                                                                                      +
                                                                                                                      import { Injectable } from '@angular/core';
                                                                                                                      +import { Observable } from 'rxjs/internal/Observable';
                                                                                                                      +import { HttpHeaders, HttpClient } from '@angular/common/http';
                                                                                                                      +import { map } from 'rxjs/internal/operators/map';
                                                                                                                      +@Injectable({
                                                                                                                      +		providedIn: 'root'
                                                                                                                      +	})
                                                                                                                      +export class ResourcesService {
                                                                                                                      +	constructor(private httpClient: HttpClient) {}
                                                                                                                      +/**
                                                                                                                      +	 * pager for resources table
                                                                                                                      +	 */
                                                                                                                      +	pager: any = {
                                                                                                                      +		sort: 1,
                                                                                                                      +		method: 'ASC',
                                                                                                                      +		page: 1,
                                                                                                                      +		size: 15,
                                                                                                                      +		total: 0,
                                                                                                                      +		filters: {}
                                                                                                                      +	};
                                                                                                                      +/**
                                                                                                                      +	 * get the resource pager
                                                                                                                      +	 * @returns pager
                                                                                                                      +	 */
                                                                                                                      +	getPager() {
                                                                                                                      +		return {...this.pager};
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * init pager with default values
                                                                                                                      +	 */
                                                                                                                      +	setPager() {
                                                                                                                      +		this.pager = {
                                                                                                                      +			sort: 1,
                                                                                                                      +			method: 'ASC',
                                                                                                                      +			page: 1,
                                                                                                                      +			size: 15,
                                                                                                                      +			total: 0,
                                                                                                                      +			filters: {}
                                                                                                                      +		};
                                                                                                                      +	}
                                                                                                                      +
                                                                                                                      +	/**
                                                                                                                      +	 * get all Resources
                                                                                                                      +	 * @param {any} pager with sorting, filters, page etc
                                                                                                                      +	 *  @returns observable with resources list
                                                                                                                      +	 */
                                                                                                                      +	getResources(paginationObj?: any): Observable<any> {
                                                                                                                      +		let params: any = {};
                                                                                                                      +
                                                                                                                      +		params = {...params, ...paginationObj};
                                                                                                                      +		if (params.filters) {
                                                                                                                      +			Object.keys(params.filters).forEach((key) => {
                                                                                                                      +				if (params.filters[key]) {
                                                                                                                      +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                      +				}
                                                                                                                      +			});
                                                                                                                      +			delete params.filters;
                                                                                                                      +		}
                                                                                                                      +
                                                                                                                      +		return this.httpClient.get('/resources', { params: params });
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * get resource by id
                                                                                                                      +	 * @param {string} id of the resource to be fetched
                                                                                                                      +	 * @param {any} pager with sorting, filters, page etc
                                                                                                                      +	 * @returns observable with response resource
                                                                                                                      +	 */
                                                                                                                      +	getResource(id: String, paginationObj?: any): Observable<any> {
                                                                                                                      +		let params: any = {};
                                                                                                                      +
                                                                                                                      +		params = {...params, ...paginationObj};
                                                                                                                      +		if (params.filters) {
                                                                                                                      +			Object.keys(params.filters).forEach((key) => {
                                                                                                                      +				if (params.filters[key]) {
                                                                                                                      +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                      +				}
                                                                                                                      +			});
                                                                                                                      +			delete params.filters;
                                                                                                                      +		}
                                                                                                                      +
                                                                                                                      +		return this.httpClient.get(`/resources/${id}`, { params: params } );
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * post a new resource to website, auto add Header
                                                                                                                      +	 * @param {any} payload the org data to be added
                                                                                                                      +	 * @returns observable with response
                                                                                                                      +	 */
                                                                                                                      +	addResource(payload: any) {
                                                                                                                      +		return this.httpClient.post('/resources', payload );
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * delete resource by id
                                                                                                                      +	 * @param {string} id of the resource to be deleted
                                                                                                                      +	 * @returns observable with response
                                                                                                                      +	 */
                                                                                                                      +	deleteResource(id: any) {
                                                                                                                      +		return this.httpClient.delete(`/resources/${id}`);
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * edit a resource
                                                                                                                      +	 * @param {any} payload the resource data to be modified
                                                                                                                      +	 * @param {string} id of the resource to be modified
                                                                                                                      +	 * @returns observable with response
                                                                                                                      +	 */
                                                                                                                      +	editResource(id: string, payload: any) {
                                                                                                                      +		return this.httpClient.put(`/resources/${id}`, payload );
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * send CSV and organisation id to server
                                                                                                                      +	 * @param {string} id of the organisation to be modfified
                                                                                                                      +	 * @param {any} file with CSV data
                                                                                                                      +	 * @returns observable with response resource
                                                                                                                      +	 */
                                                                                                                      +	importCsv(file: any, id: any) {
                                                                                                                      +		const formdata: FormData = new FormData();
                                                                                                                      +		formdata.append('file', file);
                                                                                                                      +		formdata.append('organisation_id', id);
                                                                                                                      +		return this.httpClient.post('/resources/import', formdata);
                                                                                                                      +	}
                                                                                                                      +	/**
                                                                                                                      +	 * get resource by slug
                                                                                                                      +	 * @param {string} slug name without diacritics the resource to be fetched
                                                                                                                      +	 * @param {any} pager with sorting, filters, page etc
                                                                                                                      +	 * @returns observable with response resource
                                                                                                                      +	 */
                                                                                                                      +	getResourceBySlug(slug: string, pager: any) {
                                                                                                                      +		let params: any = {};
                                                                                                                      +
                                                                                                                      +		params = {...params, ...pager};
                                                                                                                      +		if (params.filters) {
                                                                                                                      +			Object.keys(params.filters).forEach((key) => {
                                                                                                                      +				if (params.filters[key]) {
                                                                                                                      +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                      +				}
                                                                                                                      +			});
                                                                                                                      +			delete params.filters;
                                                                                                                      +		}
                                                                                                                      +		return this.httpClient.get(`/resources/by_slug/${slug}`, {params: params});
                                                                                                                      +	}
                                                                                                                      +}
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + + + + + + + + + + + + +
                                                                                                                      +
                                                                                                                      +

                                                                                                                      result-matching ""

                                                                                                                      +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +

                                                                                                                        No results matching ""

                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/UsersService.html b/documentation/injectables/UsersService.html new file mode 100644 index 0000000..92f8c7c --- /dev/null +++ b/documentation/injectables/UsersService.html @@ -0,0 +1,793 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                        +
                                                                                                                        + + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + +
                                                                                                                        +
                                                                                                                        +

                                                                                                                        +

                                                                                                                        File

                                                                                                                        +

                                                                                                                        +

                                                                                                                        + src/app/core/service/users.service.ts +

                                                                                                                        + + + + +
                                                                                                                        +

                                                                                                                        Index

                                                                                                                        + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                        +
                                                                                                                        Properties
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        Methods
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        Constructor

                                                                                                                        + + + + + + + + + + + + + +
                                                                                                                        +constructor(httpClient: HttpClient) +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        class constructor

                                                                                                                        +
                                                                                                                        +
                                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                        NameTypeOptional
                                                                                                                        httpClient + HttpClient + + No +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + +

                                                                                                                        + Methods +

                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + addUser + + + +
                                                                                                                        +addUser(payload: any) +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        post a new User to website, auto add Header

                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                        NameTypeOptional
                                                                                                                        payload + any + + No +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + Returns : any + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + deleteUser + + + +
                                                                                                                        +deleteUser(id: string) +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        Delete user by id

                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                        NameTypeOptional
                                                                                                                        id + string + + No +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + Returns : Observable<any> + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + getPager + + + +
                                                                                                                        +getPager() +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        return pager

                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + Returns : any + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + getUser + + + +
                                                                                                                        +getUser(id: string, paginationObj?: any) +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        get User by id

                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                        NameTypeOptional
                                                                                                                        id + string + + No +
                                                                                                                        paginationObj + any + + Yes +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + Returns : Observable<any> + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + getUsers + + + +
                                                                                                                        +getUsers(paginationObj?: any) +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        get all Users

                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                        NameTypeOptional
                                                                                                                        paginationObj + any + + Yes +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + Returns : Observable<any> + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + updateUser + + + +
                                                                                                                        +updateUser(payload: any) +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        Edit user

                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                        NameTypeOptional
                                                                                                                        payload + any + + No +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + Returns : Observable<any> + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + +

                                                                                                                        + Properties +

                                                                                                                        + + + + + + + + + + + + + + + + + + + + +
                                                                                                                        + + + + pager + + +
                                                                                                                        + Type : any + +
                                                                                                                        + Default value : { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + } +
                                                                                                                        + +
                                                                                                                        +

                                                                                                                        init pager

                                                                                                                        +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + + +
                                                                                                                        +
                                                                                                                        import { Injectable } from '@angular/core';
                                                                                                                        +import { Observable } from 'rxjs/internal/Observable';
                                                                                                                        +import { HttpClient } from '@angular/common/http';
                                                                                                                        +@Injectable({
                                                                                                                        +	providedIn: 'root'
                                                                                                                        +})
                                                                                                                        +/**
                                                                                                                        +	 * User service class
                                                                                                                        +	 */
                                                                                                                        +export class UsersService {
                                                                                                                        +/**
                                                                                                                        +	 * class constructor
                                                                                                                        +	 */
                                                                                                                        +	constructor(private httpClient: HttpClient) {}
                                                                                                                        +	/**
                                                                                                                        +	 *init pager
                                                                                                                        +	 */
                                                                                                                        +	pager: any = {
                                                                                                                        +		sort: 1,
                                                                                                                        +		method: 'ASC',
                                                                                                                        +		page: 1,
                                                                                                                        +		size: 15,
                                                                                                                        +		total: 0,
                                                                                                                        +		filters: {}
                                                                                                                        +	};
                                                                                                                        +/**
                                                                                                                        +	 * return pager
                                                                                                                        +	 */
                                                                                                                        +	getPager() {
                                                                                                                        +		return {...this.pager};
                                                                                                                        +	}
                                                                                                                        +	/**
                                                                                                                        +	 * post a new User to website, auto add Header
                                                                                                                        +	 */
                                                                                                                        +	addUser(payload: any) {
                                                                                                                        +		return this.httpClient.post('/users', payload );
                                                                                                                        +	}
                                                                                                                        +
                                                                                                                        +	/**
                                                                                                                        +	 * get all Users
                                                                                                                        +	 */
                                                                                                                        +	getUsers(paginationObj?: any): Observable<any> {
                                                                                                                        +		let params: any = {};
                                                                                                                        +		params = {...params, ...paginationObj};
                                                                                                                        +		if (params.filters) {
                                                                                                                        +			Object.keys(params.filters).forEach((key) => {
                                                                                                                        +				if (params.filters[key]) {
                                                                                                                        +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                        +				}
                                                                                                                        +			});
                                                                                                                        +			delete params.filters;
                                                                                                                        +		}
                                                                                                                        +		return this.httpClient.get('/users', { params: params });
                                                                                                                        +	}
                                                                                                                        +
                                                                                                                        +	/**
                                                                                                                        +	 * get User by id
                                                                                                                        +	 */
                                                                                                                        +	getUser(id: string, paginationObj?: any): Observable<any> {
                                                                                                                        +		let params: any = {};
                                                                                                                        +		params = {...params, ...paginationObj};
                                                                                                                        +		return this.httpClient.get(`/users/${id}`, {params: params});
                                                                                                                        +	}
                                                                                                                        +
                                                                                                                        +	/**
                                                                                                                        +	 * Edit user
                                                                                                                        +	 * @param payload
                                                                                                                        +	 */
                                                                                                                        +	updateUser(payload: any): Observable<any> {
                                                                                                                        +		return this.httpClient.put(`/users/${payload._id}`, payload );
                                                                                                                        +	}
                                                                                                                        +
                                                                                                                        +	/**
                                                                                                                        +	 * Delete user by id
                                                                                                                        +	 * @param id
                                                                                                                        +	 */
                                                                                                                        +	deleteUser(id: string): Observable<any> {
                                                                                                                        +		return this.httpClient.delete(`/users/${id}`);
                                                                                                                        +	}
                                                                                                                        +
                                                                                                                        +}
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + + + + + + + + + + + + +
                                                                                                                        +
                                                                                                                        +

                                                                                                                        result-matching ""

                                                                                                                        +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +

                                                                                                                          No results matching ""

                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/UtilService.html b/documentation/injectables/UtilService.html new file mode 100644 index 0000000..f7487ad --- /dev/null +++ b/documentation/injectables/UtilService.html @@ -0,0 +1,479 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                          +
                                                                                                                          + + +
                                                                                                                          +
                                                                                                                          + + + + + + + + + + + +
                                                                                                                          +
                                                                                                                          +

                                                                                                                          +

                                                                                                                          File

                                                                                                                          +

                                                                                                                          +

                                                                                                                          + src/app/core/service/util.service.ts +

                                                                                                                          + + + + +
                                                                                                                          +

                                                                                                                          Index

                                                                                                                          + + + + + + + + + + + + + + + +
                                                                                                                          +
                                                                                                                          Methods
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          +

                                                                                                                          Constructor

                                                                                                                          + + + + + + + + + + +
                                                                                                                          +constructor() +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + +

                                                                                                                          + Methods +

                                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                                          + + + + copyToClipboard + + + +
                                                                                                                          +copyToClipboard(value: string) +
                                                                                                                          + +
                                                                                                                          +

                                                                                                                          copy value to clipboard. Create new textarea and apply copy command

                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                          NameTypeOptional
                                                                                                                          value + string + + No +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + Returns : void + +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                                          + + + + removeDiacritics + + + +
                                                                                                                          +removeDiacritics(term: string) +
                                                                                                                          + +
                                                                                                                          +

                                                                                                                          remove all diacrirics from sting

                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                          NameTypeOptionalDescription
                                                                                                                          term + string + + No + +

                                                                                                                          the string with diacritics

                                                                                                                          + +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + Returns : string + +
                                                                                                                          +
                                                                                                                          +

                                                                                                                          the string without diacritics

                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                                          + + + + removeEmpty + + + +
                                                                                                                          +removeEmpty(obj: any) +
                                                                                                                          + +
                                                                                                                          +

                                                                                                                          remove all empty prop in obj sent as param

                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                          NameTypeOptionalDescription
                                                                                                                          obj + any + + No + +

                                                                                                                          the object from which to remove

                                                                                                                          + +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + Returns : any + +
                                                                                                                          +
                                                                                                                          +

                                                                                                                          the object without empty properties

                                                                                                                          + +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + + +
                                                                                                                          +
                                                                                                                          import { Injectable } from '@angular/core';
                                                                                                                          +
                                                                                                                          +@Injectable()
                                                                                                                          +/**
                                                                                                                          +	* class with general utility methods
                                                                                                                          +	*/
                                                                                                                          +export class UtilService {
                                                                                                                          +	constructor() {}
                                                                                                                          +	/**
                                                                                                                          +	* remove all empty prop in obj sent as param
                                                                                                                          +	* @param {any} obj the object from which to remove
                                                                                                                          +	* @returns the object without empty properties
                                                                                                                          +	*/
                                                                                                                          +	removeEmpty(obj: any): any {
                                                                                                                          +		for (const propName in obj) {
                                                                                                                          +			if (
                                                                                                                          +				obj[propName] === null ||
                                                                                                                          +				obj[propName] === undefined ||
                                                                                                                          +				obj[propName] === '' ||
                                                                                                                          +				(Array.isArray(obj[propName]) && !obj[propName].length)
                                                                                                                          +			) {
                                                                                                                          +				delete obj[propName];
                                                                                                                          +			}
                                                                                                                          +		}
                                                                                                                          +		return obj;
                                                                                                                          +	}
                                                                                                                          +	/**
                                                                                                                          +	* remove all diacrirics from sting
                                                                                                                          +	* @param {string} term the string with diacritics
                                                                                                                          +	* @returns the string without diacritics
                                                                                                                          +	*/
                                                                                                                          +	removeDiacritics(term: string): string {
                                                                                                                          +		const diac = ['ă', 'Ă', 'â', 'Â', 'î', 'Î', 'ș', 'Ș', 'ț', 'Ț'];
                                                                                                                          +		const repl = ['a', 'A', 'a', 'A', 'i', 'I', 's', 'S', 't', 'T'];
                                                                                                                          +		for (let i = 0; i < diac.length; i++) {
                                                                                                                          +			const reg = new RegExp(diac[i], 'g');
                                                                                                                          +			term = term.replace(reg, repl[i]);
                                                                                                                          +		}
                                                                                                                          +		return term;
                                                                                                                          +	}
                                                                                                                          +	/**
                                                                                                                          +	* copy value to clipboard. Create new textarea and apply copy command
                                                                                                                          +	* @param {string} vale the string to be copied
                                                                                                                          +	*/
                                                                                                                          +	copyToClipboard(value: string) {
                                                                                                                          +		const selBox = document.createElement('textarea');
                                                                                                                          +		selBox.style.position = 'fixed';
                                                                                                                          +		selBox.style.left = '0';
                                                                                                                          +		selBox.style.top = '0';
                                                                                                                          +		selBox.style.opacity = '0';
                                                                                                                          +		selBox.value = value;
                                                                                                                          +		document.body.appendChild(selBox);
                                                                                                                          +		selBox.focus();
                                                                                                                          +		selBox.select();
                                                                                                                          +		document.execCommand('copy');
                                                                                                                          +		document.body.removeChild(selBox);
                                                                                                                          +	}
                                                                                                                          +}
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + + + + + + + + + + + + +
                                                                                                                          +
                                                                                                                          +

                                                                                                                          result-matching ""

                                                                                                                          +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            No results matching ""

                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/injectables/VolunteerService.html b/documentation/injectables/VolunteerService.html new file mode 100644 index 0000000..ba3086a --- /dev/null +++ b/documentation/injectables/VolunteerService.html @@ -0,0 +1,1082 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                            +
                                                                                                                            + + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            +

                                                                                                                            File

                                                                                                                            +

                                                                                                                            +

                                                                                                                            + src/app/pages/volunteers/volunteers.service.ts +

                                                                                                                            + + + + +
                                                                                                                            +

                                                                                                                            Index

                                                                                                                            + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            +
                                                                                                                            Properties
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            Methods
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            Constructor

                                                                                                                            + + + + + + + + + + + + + +
                                                                                                                            +constructor(httpClient: HttpClient) +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptional
                                                                                                                            httpClient + HttpClient + + No +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + +

                                                                                                                            + Methods +

                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + addVolunteer + + + +
                                                                                                                            +addVolunteer(payload: any) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            post a new volunteer to website, auto add Header

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptionalDescription
                                                                                                                            payload + any + + No + +

                                                                                                                            the org data to be added

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : any + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with response

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + deleteVolunteer + + + +
                                                                                                                            +deleteVolunteer(id: String) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            delete volunteer by id

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptionalDescription
                                                                                                                            id + String + + No + +

                                                                                                                            of the volunteer to be deleted

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : Observable<any> + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with response

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + editVolunteer + + + +
                                                                                                                            +editVolunteer(id: String, payload: any) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            edit a volunteer

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptionalDescription
                                                                                                                            id + String + + No + +

                                                                                                                            of the volunteer to be modified

                                                                                                                            + +
                                                                                                                            payload + any + + No + +

                                                                                                                            the volunteer data to be modified

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : Observable<any> + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with response

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + getAllocations + + + +
                                                                                                                            +getAllocations(volunteerId: string) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            get alocations for a volunteer

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptionalDescription
                                                                                                                            volunteerId + string + + No + +

                                                                                                                            of the volunteer for whom to get alocations

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : any + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with response alocations

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + getPager + + + +
                                                                                                                            +getPager() +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            get the volunteer pager

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : any + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            pager

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + getVolunteer + + + +
                                                                                                                            +getVolunteer(id: String) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            get volunteer by id

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptionalDescription
                                                                                                                            id + String + + No + +

                                                                                                                            of the volunteer to be fetched

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : Observable<any> + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with response volunteer

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + getVolunteers + + + +
                                                                                                                            +getVolunteers(paginationObj?: any) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            get all volunteers

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptional
                                                                                                                            paginationObj + any + + Yes +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : Observable<any> + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with volunteers list

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + importCsv + + + +
                                                                                                                            +importCsv(file: any, id: any) +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            send CSV and organisation id to server

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            NameTypeOptionalDescription
                                                                                                                            file + any + + No + +

                                                                                                                            with CSV data

                                                                                                                            + +
                                                                                                                            id + any + + No + +

                                                                                                                            of the organisation to be modfified

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + Returns : any + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            observable with response

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + setPager + + + +
                                                                                                                            +setPager() +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            init pager with default values

                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + Returns : void + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +

                                                                                                                            + Properties +

                                                                                                                            + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            + + + + pager + + +
                                                                                                                            + Type : any + +
                                                                                                                            + Default value : { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + } +
                                                                                                                            + +
                                                                                                                            +

                                                                                                                            pager for the volunteers table

                                                                                                                            +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + + +
                                                                                                                            +
                                                                                                                            import { Injectable } from '@angular/core';
                                                                                                                            +import { Observable } from 'rxjs/internal/Observable';
                                                                                                                            +import { HttpHeaders, HttpClient, HttpParams } from '@angular/common/http';
                                                                                                                            +import { map } from 'rxjs/internal/operators/map';
                                                                                                                            +@Injectable({
                                                                                                                            +		providedIn: 'root'
                                                                                                                            +	})
                                                                                                                            +export class VolunteerService {
                                                                                                                            +	/**
                                                                                                                            +	 * pager for the volunteers table
                                                                                                                            +	 */
                                                                                                                            +	pager: any = {
                                                                                                                            +		sort: 1,
                                                                                                                            +		method: 'ASC',
                                                                                                                            +		page: 1,
                                                                                                                            +		size: 15,
                                                                                                                            +		total: 0,
                                                                                                                            +		filters: {}
                                                                                                                            +	};
                                                                                                                            +/**
                                                                                                                            +	 * get the volunteer pager
                                                                                                                            +	 * @returns pager
                                                                                                                            +	 */
                                                                                                                            +	getPager() {
                                                                                                                            +		return {...this.pager};
                                                                                                                            +	}
                                                                                                                            +	/**
                                                                                                                            +	 * init pager with default values
                                                                                                                            +	 */
                                                                                                                            +	setPager() {
                                                                                                                            +		this.pager = {
                                                                                                                            +			sort: 1,
                                                                                                                            +			method: 'ASC',
                                                                                                                            +			page: 1,
                                                                                                                            +			size: 15,
                                                                                                                            +			total: 0,
                                                                                                                            +			filters: {}
                                                                                                                            +		};
                                                                                                                            +	}
                                                                                                                            +	constructor(private httpClient: HttpClient) {}
                                                                                                                            +/**
                                                                                                                            +	 * post a new volunteer to website, auto add Header
                                                                                                                            +	 * @param {any} payload the org data to be added
                                                                                                                            +	 * @returns observable with response
                                                                                                                            +	 */
                                                                                                                            +	addVolunteer(payload: any) {
                                                                                                                            +		return this.httpClient.post('/volunteers', payload );
                                                                                                                            +	}
                                                                                                                            +	/**
                                                                                                                            +	 * get all volunteers
                                                                                                                            +	 * @param {any} pager with sorting, filters, page etc
                                                                                                                            +	 *  @returns observable with volunteers list
                                                                                                                            +	 */
                                                                                                                            +	getVolunteers(paginationObj?: any): Observable<any> {
                                                                                                                            +		let params: any = {};
                                                                                                                            +
                                                                                                                            +		params = {...params, ...paginationObj};
                                                                                                                            +		if (params.filters) {
                                                                                                                            +			Object.keys(params.filters).forEach((key) => {
                                                                                                                            +				if (params.filters[key]) {
                                                                                                                            +					params['filters[' + key + ']'] = params.filters[key];
                                                                                                                            +				}
                                                                                                                            +			});
                                                                                                                            +			delete params.filters;
                                                                                                                            +		}
                                                                                                                            +		return this.httpClient.get('/volunteers', { params: params });
                                                                                                                            +	}
                                                                                                                            +		/**
                                                                                                                            +	 * get volunteer by id
                                                                                                                            +	 * @param {string} id of the volunteer to be fetched
                                                                                                                            +	 * @param {any} pager with sorting, filters, page etc
                                                                                                                            +	 * @returns observable with response volunteer
                                                                                                                            +	 */
                                                                                                                            +	getVolunteer(id: String): Observable<any> {
                                                                                                                            +		return this.httpClient.get(`/volunteers/${id}`);
                                                                                                                            +	}
                                                                                                                            +	/**
                                                                                                                            +	 * edit a volunteer
                                                                                                                            +	 * @param {any} payload the volunteer data to be modified
                                                                                                                            +	 * @param {string} id of the volunteer to be modified
                                                                                                                            +	 * @returns observable with response
                                                                                                                            +	 */
                                                                                                                            +	editVolunteer(id: String, payload: any ): Observable<any> {
                                                                                                                            +		return this.httpClient.put(`/volunteers/${id}`, payload);
                                                                                                                            +	}
                                                                                                                            +	/**
                                                                                                                            +	 * delete volunteer by id
                                                                                                                            +	 * @param {string} id of the volunteer to be deleted
                                                                                                                            +	 * @returns observable with response
                                                                                                                            +	 */
                                                                                                                            +	deleteVolunteer(id: String): Observable<any> {
                                                                                                                            +		return this.httpClient.delete(`/volunteers/${id}`);
                                                                                                                            +	}
                                                                                                                            +/**
                                                                                                                            +	 * send CSV and organisation id to server
                                                                                                                            +	 * @param {string} id of the organisation to be modfified
                                                                                                                            +	 * @param {any} file with CSV data
                                                                                                                            +	 * @returns observable with response
                                                                                                                            +	 */
                                                                                                                            +	importCsv(file: any, id: any) {
                                                                                                                            +		const formdata: FormData = new FormData();
                                                                                                                            +		console.log(id);
                                                                                                                            +		formdata.append('file', file);
                                                                                                                            +		formdata.append('organisation_id', id);
                                                                                                                            +		return this.httpClient.post('/volunteers/import', formdata);
                                                                                                                            +	}
                                                                                                                            +/**
                                                                                                                            +	 * get alocations for a volunteer
                                                                                                                            +	 * @param {string} volunteerId of the volunteer for whom to get alocations
                                                                                                                            +	 * @returns observable with response alocations
                                                                                                                            +	 */
                                                                                                                            +	getAllocations(volunteerId: string) {
                                                                                                                            +		return this.httpClient.get(`/volunteers/${volunteerId}/allocations`);
                                                                                                                            +	}
                                                                                                                            +}
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + + + + + + + + + + + + +
                                                                                                                            +
                                                                                                                            +

                                                                                                                            result-matching ""

                                                                                                                            +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              +

                                                                                                                              No results matching ""

                                                                                                                              +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interceptors/ApiPrefixInterceptor.html b/documentation/interceptors/ApiPrefixInterceptor.html new file mode 100644 index 0000000..97b61ef --- /dev/null +++ b/documentation/interceptors/ApiPrefixInterceptor.html @@ -0,0 +1,337 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                              +
                                                                                                                              + + +
                                                                                                                              +
                                                                                                                              + + + + + + + + + + + + +
                                                                                                                              +
                                                                                                                              +

                                                                                                                              +

                                                                                                                              File

                                                                                                                              +

                                                                                                                              +

                                                                                                                              + src/app/core/http/api-prefix.interceptor.ts +

                                                                                                                              + +

                                                                                                                              +

                                                                                                                              Description

                                                                                                                              +

                                                                                                                              +

                                                                                                                              +

                                                                                                                              Prefixes all requests with environment.serverUrl.

                                                                                                                              + +

                                                                                                                              + + +
                                                                                                                              +

                                                                                                                              Index

                                                                                                                              + + + + + + + + + + + + + + + +
                                                                                                                              +
                                                                                                                              Methods
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              +

                                                                                                                              Constructor

                                                                                                                              + + + + + + + + + + + + + +
                                                                                                                              +constructor(authService: AuthenticationService) +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                              NameTypeOptional
                                                                                                                              authService + AuthenticationService + + No +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              + +

                                                                                                                              + Methods +

                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                              + + + + intercept + + + +
                                                                                                                              +intercept(request: HttpRequest, next: HttpHandler) +
                                                                                                                              + +
                                                                                                                              + +
                                                                                                                              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                              NameTypeOptional
                                                                                                                              request + HttpRequest<any> + + No +
                                                                                                                              next + HttpHandler + + No +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + Returns : Observable<HttpEvent<any>> + +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              + + +
                                                                                                                              +
                                                                                                                              import {
                                                                                                                              +	HttpEvent,
                                                                                                                              +	HttpHandler,
                                                                                                                              +	HttpInterceptor,
                                                                                                                              +	HttpRequest,
                                                                                                                              +	HttpHeaders
                                                                                                                              +} from '@angular/common/http';
                                                                                                                              +import { Injectable } from '@angular/core';
                                                                                                                              +import { environment } from '@env/environment';
                                                                                                                              +import { Observable } from 'rxjs';
                                                                                                                              +import { AuthenticationService } from '../authentication/authentication.service';
                                                                                                                              +/**
                                                                                                                              + * Prefixes all requests with `environment.serverUrl`.
                                                                                                                              + */
                                                                                                                              +@Injectable()
                                                                                                                              +export class ApiPrefixInterceptor implements HttpInterceptor {
                                                                                                                              +	constructor(private authService: AuthenticationService) {}
                                                                                                                              +	intercept(
                                                                                                                              +		request: HttpRequest<any>,
                                                                                                                              +		next: HttpHandler
                                                                                                                              +	): Observable<HttpEvent<any>> {
                                                                                                                              +		if (request.url.indexOf('assets') === -1) {
                                                                                                                              +			const token = this.authService.accessToken || null;
                                                                                                                              +			request = request.clone({
                                                                                                                              +				setHeaders: {
                                                                                                                              +					'Authorization': (token ? `Bearer ${token}` : '')
                                                                                                                              +				},
                                                                                                                              +				url: environment.serverUrl + request.url
                                                                                                                              +			});
                                                                                                                              +		}
                                                                                                                              +		return next.handle(request);
                                                                                                                              +	}
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + + + + + + + + + + + +
                                                                                                                              +
                                                                                                                              +

                                                                                                                              result-matching ""

                                                                                                                              +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +

                                                                                                                                No results matching ""

                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interceptors/ErrorHandlerInterceptor.html b/documentation/interceptors/ErrorHandlerInterceptor.html new file mode 100644 index 0000000..01b0bf5 --- /dev/null +++ b/documentation/interceptors/ErrorHandlerInterceptor.html @@ -0,0 +1,479 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                +
                                                                                                                                + + +
                                                                                                                                +
                                                                                                                                + + + + + + + + + + + + +
                                                                                                                                +
                                                                                                                                +

                                                                                                                                +

                                                                                                                                File

                                                                                                                                +

                                                                                                                                +

                                                                                                                                + src/app/core/http/error-handler.interceptor.ts +

                                                                                                                                + +

                                                                                                                                +

                                                                                                                                Description

                                                                                                                                +

                                                                                                                                +

                                                                                                                                +

                                                                                                                                Adds a default error handler to all requests.

                                                                                                                                + +

                                                                                                                                + + +
                                                                                                                                +

                                                                                                                                Index

                                                                                                                                + + + + + + + + + + + + + + + +
                                                                                                                                +
                                                                                                                                Methods
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +

                                                                                                                                Constructor

                                                                                                                                + + + + + + + + + + + + + +
                                                                                                                                +constructor(router: Router, errorMessageService: ErrorMessageService, authService: AuthenticationService) +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                NameTypeOptional
                                                                                                                                router + Router + + No +
                                                                                                                                errorMessageService + ErrorMessageService + + No +
                                                                                                                                authService + AuthenticationService + + No +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                + +

                                                                                                                                + Methods +

                                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                                + + + + Private + errorHandler + + + +
                                                                                                                                + + errorHandler(response: HttpResponse) +
                                                                                                                                + +
                                                                                                                                +

                                                                                                                                Customize the default error handler here if needed

                                                                                                                                +
                                                                                                                                + +
                                                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + +
                                                                                                                                NameTypeOptional
                                                                                                                                response + HttpResponse<any> + + No +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + Returns : Observable<HttpEvent<any>> + +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                                + + + + intercept + + + +
                                                                                                                                +intercept(request: HttpRequest, next: HttpHandler) +
                                                                                                                                + +
                                                                                                                                + +
                                                                                                                                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                NameTypeOptional
                                                                                                                                request + HttpRequest<any> + + No +
                                                                                                                                next + HttpHandler + + No +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + Returns : Observable<HttpEvent<any>> + +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                + + +
                                                                                                                                +
                                                                                                                                import {
                                                                                                                                +	HttpEvent,
                                                                                                                                +	HttpHandler,
                                                                                                                                +	HttpInterceptor,
                                                                                                                                +	HttpRequest,
                                                                                                                                +	HttpResponse
                                                                                                                                +} from '@angular/common/http';
                                                                                                                                +import { Injectable } from '@angular/core';
                                                                                                                                +import { Router } from '@angular/router';
                                                                                                                                +import { ErrorMessageService } from '@app/core/service';
                                                                                                                                +import { environment } from '@env/environment';
                                                                                                                                +import { Observable } from 'rxjs';
                                                                                                                                +import { catchError } from 'rxjs/operators';
                                                                                                                                +import { AuthenticationService } from '../authentication/authentication.service';
                                                                                                                                +
                                                                                                                                +/**
                                                                                                                                + * Adds a default error handler to all requests.
                                                                                                                                + */
                                                                                                                                +@Injectable()
                                                                                                                                +export class ErrorHandlerInterceptor implements HttpInterceptor {
                                                                                                                                +	constructor(
                                                                                                                                +		private router: Router,
                                                                                                                                +		private errorMessageService: ErrorMessageService,
                                                                                                                                +		private authService: AuthenticationService
                                                                                                                                +	) {}
                                                                                                                                +
                                                                                                                                +	intercept(
                                                                                                                                +		request: HttpRequest<any>,
                                                                                                                                +		next: HttpHandler
                                                                                                                                +	): Observable<HttpEvent<any>> {
                                                                                                                                +		return next
                                                                                                                                +			.handle(request)
                                                                                                                                +			.pipe(catchError(error => this.errorHandler(error)));
                                                                                                                                +	}
                                                                                                                                +
                                                                                                                                +	/**
                                                                                                                                +	* Customize the default error handler here if needed
                                                                                                                                +	*/
                                                                                                                                +	private errorHandler(
                                                                                                                                +		response: HttpResponse<any>
                                                                                                                                +	): Observable<HttpEvent<any>> {
                                                                                                                                +		if (response.status === 401) {
                                                                                                                                +			this.authService.setCredentials(null);
                                                                                                                                +			this.router.navigate(['/login'], {
                                                                                                                                +				replaceUrl: true
                                                                                                                                +			});
                                                                                                                                +		} else if (response.status === 400) {
                                                                                                                                +			const errorResponse: any = response;
                                                                                                                                +			if (errorResponse.error) {
                                                                                                                                +				if (errorResponse.error.validation) {
                                                                                                                                +					errorResponse.error.validation.keys.forEach((key: string) => {
                                                                                                                                +						this.errorMessageService.set(
                                                                                                                                +							errorResponse.error.validation.errors[key],
                                                                                                                                +							key,
                                                                                                                                +							response.url
                                                                                                                                +						);
                                                                                                                                +					});
                                                                                                                                +				} else {
                                                                                                                                +					this.errorMessageService.set(
                                                                                                                                +						errorResponse.error.error,
                                                                                                                                +						'_GLOBAL_',
                                                                                                                                +						response.url
                                                                                                                                +					);
                                                                                                                                +				}
                                                                                                                                +			}
                                                                                                                                +		}
                                                                                                                                +		if (!environment.production) {
                                                                                                                                +			// Do something with the error
                                                                                                                                +			console.error('Request error', response);
                                                                                                                                +		}
                                                                                                                                +		throw response;
                                                                                                                                +	}
                                                                                                                                +}
                                                                                                                                +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + + + + + + + + + + + +
                                                                                                                                +
                                                                                                                                +

                                                                                                                                result-matching ""

                                                                                                                                +
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  +

                                                                                                                                  No results matching ""

                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/Alert.html b/documentation/interfaces/Alert.html new file mode 100644 index 0000000..ebe6d45 --- /dev/null +++ b/documentation/interfaces/Alert.html @@ -0,0 +1,584 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                  +
                                                                                                                                  + + +
                                                                                                                                  +
                                                                                                                                  + + + + + + + + + + + + + + + + +
                                                                                                                                  +
                                                                                                                                  +

                                                                                                                                  +

                                                                                                                                  File

                                                                                                                                  +

                                                                                                                                  +

                                                                                                                                  + src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts +

                                                                                                                                  + +

                                                                                                                                  +

                                                                                                                                  Description

                                                                                                                                  +

                                                                                                                                  +

                                                                                                                                  +

                                                                                                                                  Alert message interface

                                                                                                                                  + +

                                                                                                                                  + + +
                                                                                                                                  +

                                                                                                                                  Index

                                                                                                                                  + + + + + + + + + +
                                                                                                                                  +
                                                                                                                                  Properties
                                                                                                                                  +
                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  + + + +
                                                                                                                                  +

                                                                                                                                  Properties

                                                                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                                                                  + + message +
                                                                                                                                  + message: string + +
                                                                                                                                  + Type : string + +
                                                                                                                                  + + + + + + + + + + + + + + + + + + + +
                                                                                                                                  + + type +
                                                                                                                                  + type: string + +
                                                                                                                                  + Type : string + +
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  + + +
                                                                                                                                  +
                                                                                                                                  import {
                                                                                                                                  +	Component,
                                                                                                                                  +	OnInit,
                                                                                                                                  +	ViewChild,
                                                                                                                                  +	AfterContentChecked,
                                                                                                                                  +} from '@angular/core';
                                                                                                                                  +import { ActivatedRoute, Router, NavigationExtras, ParamMap } from '@angular/router';
                                                                                                                                  +import { OrganisationService } from '../../../organisations.service';
                                                                                                                                  +import { NgbModal, NgbTabset } from '@ng-bootstrap/ng-bootstrap';
                                                                                                                                  +import {
                                                                                                                                  +	FormGroup,
                                                                                                                                  +	Validators,
                                                                                                                                  +	FormBuilder
                                                                                                                                  +} from '@angular/forms';
                                                                                                                                  +import { AuthenticationService } from '../../../../../core/authentication/authentication.service';
                                                                                                                                  +
                                                                                                                                  +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service';
                                                                                                                                  +import { ResourcesService } from '@app/pages/resources/resources.service';
                                                                                                                                  +import { Location } from '@angular/common';
                                                                                                                                  +import { FiltersService, UsersService } from '@app/core';
                                                                                                                                  +
                                                                                                                                  +/**
                                                                                                                                  +	 * Alert message interface
                                                                                                                                  +	 */
                                                                                                                                  +interface Alert {
                                                                                                                                  +	type: string;
                                                                                                                                  +	message: string;
                                                                                                                                  +}
                                                                                                                                  +
                                                                                                                                  +@Component({
                                                                                                                                  +	selector: 'app-organisation-details',
                                                                                                                                  +	templateUrl: './organisation-details.component.html',
                                                                                                                                  +	styleUrls: ['./organisation-details.component.scss']
                                                                                                                                  +})
                                                                                                                                  +export class NgodetailsComponent implements OnInit, AfterContentChecked {
                                                                                                                                  +
                                                                                                                                  +	/**
                                                                                                                                  +	 * var that holds data about NGO, resources and volunteers
                                                                                                                                  +	 */
                                                                                                                                  +	needupdate = false;
                                                                                                                                  +	data: any;
                                                                                                                                  +	resourceData: any[] = [];
                                                                                                                                  +	volunteersData: any[] = [];
                                                                                                                                  +	/**
                                                                                                                                  +	 * var that holds pager and filters for resources and volunteers
                                                                                                                                  +	 */
                                                                                                                                  +	resourcePager: any = {};
                                                                                                                                  +	resourceFiltersSelected = Array(2);
                                                                                                                                  +	volunteerPager: any = {};
                                                                                                                                  +	volunteerFiltersSelected = Array(2);
                                                                                                                                  +	/**
                                                                                                                                  +	 * flag for ngtemplate in HTML
                                                                                                                                  +	 */
                                                                                                                                  +	hasVolunteers = false;
                                                                                                                                  +	hasResources = false;
                                                                                                                                  +
                                                                                                                                  +	nrvol = 0;
                                                                                                                                  +	/**
                                                                                                                                  +	 * flag used to get ID from link and pass it to get method
                                                                                                                                  +	 */
                                                                                                                                  +	ngoid: string;
                                                                                                                                  +	/**
                                                                                                                                  +	 * var for data to send when adding new resource. Only for DSU
                                                                                                                                  +	 */
                                                                                                                                  +	navigationExtras: NavigationExtras;
                                                                                                                                  +	/**
                                                                                                                                  +	 * Fliterable values
                                                                                                                                  +	 */
                                                                                                                                  +	volunteerTypeFilterValues: any[] = [];
                                                                                                                                  +	categoryFilterValues: any[] = [];
                                                                                                                                  +	specializationFilterValues: any[] = [];
                                                                                                                                  +	locationFilterValues: any[] = [];
                                                                                                                                  +	/**
                                                                                                                                  +	 * Tabs reference for vefifing which is open
                                                                                                                                  +	 */
                                                                                                                                  +	@ViewChild('tabRef', { static: true}) tabRef: NgbTabset;
                                                                                                                                  +	tabsInitialized = false;
                                                                                                                                  +	selectedTab = 'volunteers';
                                                                                                                                  +
                                                                                                                                  +	/**
                                                                                                                                  +	 * flag for toast message
                                                                                                                                  +	 */
                                                                                                                                  +	messageSent = false;
                                                                                                                                  +	updateSent = false;
                                                                                                                                  +	/**
                                                                                                                                  +	 * flag for HTML to display loading animation
                                                                                                                                  +	 */
                                                                                                                                  +	loading = false;
                                                                                                                                  +	/**
                                                                                                                                  +	* mapping of object keys to filter recognizable keys
                                                                                                                                  +	*/
                                                                                                                                  +	propertyMap = {
                                                                                                                                  +		'_id': 'id',
                                                                                                                                  +		'parent_id': 'parent_id'
                                                                                                                                  +	};
                                                                                                                                  +	/**
                                                                                                                                  +	* store the current voluneer that has courses open
                                                                                                                                  +	*/
                                                                                                                                  +	currentVolunteerId = '';
                                                                                                                                  +
                                                                                                                                  +	constructor(
                                                                                                                                  +		private route: ActivatedRoute,
                                                                                                                                  +		private router: Router,
                                                                                                                                  +		private resourceService: ResourcesService,
                                                                                                                                  +		public authService: AuthenticationService,
                                                                                                                                  +		private organisationService: OrganisationService,
                                                                                                                                  +		private filterService: FiltersService,
                                                                                                                                  +		private location: Location,
                                                                                                                                  +		private userService: UsersService,
                                                                                                                                  +		private citiesandcounties: CitiesCountiesService,
                                                                                                                                  +	) {
                                                                                                                                  +		if (this.router.url.indexOf('validate') > -1) {
                                                                                                                                  +			this.needupdate = true;
                                                                                                                                  +		}
                                                                                                                                  +		/**
                                                                                                                                  +		 * set a specific open tab if necessary
                                                                                                                                  +		 */
                                                                                                                                  +		const navigation = this.router.getCurrentNavigation();
                                                                                                                                  +
                                                                                                                                  +		if (navigation && navigation.extras && navigation.extras.state) {
                                                                                                                                  +			this.selectedTab = navigation.extras.state.tabName;
                                                                                                                                  +		}
                                                                                                                                  +	}
                                                                                                                                  +
                                                                                                                                  +	ngOnInit() {
                                                                                                                                  +		/**
                                                                                                                                  +		 * get values that can be queried for the filters
                                                                                                                                  +		 */
                                                                                                                                  +		this.citiesandcounties.getCounties().subscribe((response: any) => {
                                                                                                                                  +			const aux = response;
                                                                                                                                  +			aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id);
                                                                                                                                  +			this.locationFilterValues = aux;
                                                                                                                                  +		});
                                                                                                                                  +		this.filterService.getCategoryFilters().subscribe((data) => {
                                                                                                                                  +			this.categoryFilterValues = data.map((x: any) => {
                                                                                                                                  +				const parent = data.find((y: any) => y._id === x.parent_id);
                                                                                                                                  +				return {
                                                                                                                                  +					id: x._id,
                                                                                                                                  +					name: x.name,
                                                                                                                                  +					parent_id: x.parent_id,
                                                                                                                                  +					pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null),
                                                                                                                                  +					level: x.parent_id === '0' ? 0 : 1
                                                                                                                                  +				};
                                                                                                                                  +			});
                                                                                                                                  +		});
                                                                                                                                  +		this.filterService.getSpecializationFilters().subscribe((data) => {
                                                                                                                                  +			this.specializationFilterValues = data.map((elem: any) => {
                                                                                                                                  +				return {id: elem._id, name: elem.name};
                                                                                                                                  +			});
                                                                                                                                  +		});
                                                                                                                                  +		/**
                                                                                                                                  +		 * get current id, init pager, and get all data with the id
                                                                                                                                  +		 */
                                                                                                                                  +		this.ngoid = this.route.snapshot.paramMap.get('id');
                                                                                                                                  +		this.volunteerPager = this.organisationService.getVolunteerPager();
                                                                                                                                  +		this.resourcePager = this.organisationService.getResourcePager();
                                                                                                                                  +		this.getData();
                                                                                                                                  +		this.getResources();
                                                                                                                                  +		this.getVolunteers();
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +		 * switch tab of necessary
                                                                                                                                  +		 */
                                                                                                                                  +	ngAfterContentChecked() {
                                                                                                                                  +		if (this.tabRef.tabs) {
                                                                                                                                  +			this.tabRef.select(this.selectedTab);
                                                                                                                                  +		}
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +		 * get org data
                                                                                                                                  +		 */
                                                                                                                                  +	getData() {
                                                                                                                                  +		this.organisationService.getorganisation(this.ngoid).subscribe(data => {
                                                                                                                                  +			this.data = data;
                                                                                                                                  +			this.navigationExtras = {
                                                                                                                                  +				state: {
                                                                                                                                  +					ngo: {
                                                                                                                                  +						name: data.name,
                                                                                                                                  +						_id: this.ngoid
                                                                                                                                  +					}
                                                                                                                                  +				}
                                                                                                                                  +			};
                                                                                                                                  +		});
                                                                                                                                  +	}
                                                                                                                                  +		/**
                                                                                                                                  +		 * get volunteers data
                                                                                                                                  +		 */
                                                                                                                                  +	getVolunteers() {
                                                                                                                                  +		this.organisationService.getVolunteersbyorganisation(this.ngoid, this.volunteerPager).subscribe(data => {
                                                                                                                                  +			this.volunteerPager.total = data.pager.total;
                                                                                                                                  +			this.volunteersData = data.data;
                                                                                                                                  +			if (!!data.data.courses) {
                                                                                                                                  +				data.data.courses = data.data.courses.reverse();
                                                                                                                                  +			}
                                                                                                                                  +			if (Object.entries(this.volunteerPager.filters).length === 0 && this.volunteerPager.filters.constructor === Object) {
                                                                                                                                  +				if (this.volunteersData.length === 0) {
                                                                                                                                  +					this.hasVolunteers = false;
                                                                                                                                  +				} else {
                                                                                                                                  +					this.hasVolunteers = true;
                                                                                                                                  +					this.nrvol = data.pager.total;
                                                                                                                                  +				}
                                                                                                                                  +			} else {
                                                                                                                                  +				this.hasVolunteers = true;
                                                                                                                                  +			}
                                                                                                                                  +		});
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +		 * get resourcesData
                                                                                                                                  +		 */
                                                                                                                                  +	getResources() {
                                                                                                                                  +		this.organisationService.getResourcesbyorganisation(this.ngoid, this.resourcePager).subscribe(data => {
                                                                                                                                  +			this.resourcePager.total = data.pager.total;
                                                                                                                                  +			this.resourceData = data.data;
                                                                                                                                  +			if (Object.entries(this.volunteerPager.filters).length === 0 &&
                                                                                                                                  +				this.volunteerPager.filters.constructor === Object &&
                                                                                                                                  +				this.resourceData.length === 0) {
                                                                                                                                  +
                                                                                                                                  +				this.hasResources = false;
                                                                                                                                  +			} else {
                                                                                                                                  +				this.hasResources = true;
                                                                                                                                  +			}
                                                                                                                                  +		});
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +		 * resource filter callback. Filters added to pager and then a request is made
                                                                                                                                  +		 * @param {number} id the index in the pager filters and filters Selected array
                                                                                                                                  +		 */
                                                                                                                                  +	resourcefilterChanged(id: number) {
                                                                                                                                  +		this.resourcePager.filters[id] =  this.resourceFiltersSelected[id].map((elem: any) => elem.id).join(',');
                                                                                                                                  +		this.getResources();
                                                                                                                                  +	}
                                                                                                                                  +/**
                                                                                                                                  +	 * volunteer filter callback. Filters added to pager and then a request is made
                                                                                                                                  +	 * @param {number} id the index in the pager filters and filters Selected array
                                                                                                                                  +	 */
                                                                                                                                  +	volunteerfilterChanged(id: number) {
                                                                                                                                  +		this.volunteerPager.filters[id] = this.volunteerFiltersSelected[id].map((elem: any) => elem.id).join(',');
                                                                                                                                  +		this.getVolunteers();
                                                                                                                                  +	}
                                                                                                                                  +	// deleteRes(id: string) {
                                                                                                                                  +	// 	this.resourceService.deleteResource(id).subscribe(resp => {
                                                                                                                                  +	// 		this.getResources();
                                                                                                                                  +	// 	});
                                                                                                                                  +	// }
                                                                                                                                  +	/**
                                                                                                                                  +	 * delete NGO
                                                                                                                                  +	 */
                                                                                                                                  +	deleteSelf() {
                                                                                                                                  +		if (this.authService.user._id === this.data._id) {
                                                                                                                                  +			if (confirm('Sunteți sigur că doriți să vă ștergeți contul?')) {
                                                                                                                                  +				this.loading = true;
                                                                                                                                  +				this.organisationService.deleteorganisation(this.ngoid).subscribe(data => {
                                                                                                                                  +					this.loading = false;
                                                                                                                                  +					this.authService.setCredentials();
                                                                                                                                  +					this.router.navigateByUrl('/login');
                                                                                                                                  +				}, () => {
                                                                                                                                  +					this.location.back();
                                                                                                                                  +				});
                                                                                                                                  +			}
                                                                                                                                  +		} else {
                                                                                                                                  +			if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) {
                                                                                                                                  +				this.loading = true;
                                                                                                                                  +				this.organisationService.deleteorganisation(this.ngoid).subscribe(data => {
                                                                                                                                  +					this.loading = false;
                                                                                                                                  +					this.router.navigateByUrl('/organisations');
                                                                                                                                  +				}, () => {
                                                                                                                                  +					this.loading = false;
                                                                                                                                  +				});
                                                                                                                                  +			}
                                                                                                                                  +		}
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	 *  navigate to add resource with ngo data
                                                                                                                                  +	 */
                                                                                                                                  +	addresource() {
                                                                                                                                  +		this.router.navigateByUrl('/resources/add', this.navigationExtras);
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	 *  navigate to add volunteer with ngo data
                                                                                                                                  +	 */
                                                                                                                                  +	addvolunteer() {
                                                                                                                                  +		this.router.navigateByUrl('/volunteers/add', this.navigationExtras);
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	* sort callback for volunteers table
                                                                                                                                  +	*/
                                                                                                                                  +	volunteerSortChanged(pager: any) {
                                                                                                                                  +		this.volunteerPager = pager;
                                                                                                                                  +		this.getVolunteers();
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	* sort callback for resource table
                                                                                                                                  +	*/
                                                                                                                                  +	resourceSortChanged(pager: any) {
                                                                                                                                  +		this.resourcePager = pager;
                                                                                                                                  +			this.getResources();
                                                                                                                                  +	}
                                                                                                                                  +/**
                                                                                                                                  +	* search callback for both tabels
                                                                                                                                  +	*/
                                                                                                                                  +	searchChanged(pager: any) {
                                                                                                                                  +		if (pager.search !== '') {
                                                                                                                                  +			if (this.selectedTab === 'volunteers') {
                                                                                                                                  +				this.volunteerPager = pager;
                                                                                                                                  +				this.getVolunteers();
                                                                                                                                  +			} else {
                                                                                                                                  +				this.resourcePager = pager;
                                                                                                                                  +				this.getResources();
                                                                                                                                  +			}
                                                                                                                                  +		}
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	* send manual notification and trigger popup
                                                                                                                                  +	*/
                                                                                                                                  +	sendNotification() {
                                                                                                                                  +		this.organisationService.sendUpdateDataEmail(this.ngoid).subscribe(() => {
                                                                                                                                  +			this.messageSent = true;
                                                                                                                                  +			setTimeout(() => this.close(), 5000);
                                                                                                                                  +		});
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	* send info updated and trigger popup
                                                                                                                                  +	*/
                                                                                                                                  +	validateinfo() {
                                                                                                                                  +		this.organisationService.updated(this.ngoid).subscribe(() => {
                                                                                                                                  +			this.updateSent = true;
                                                                                                                                  +			this.needupdate = false;
                                                                                                                                  +			setTimeout(() => this.close(), 5000);
                                                                                                                                  +		});
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	* manual close for message send popup
                                                                                                                                  +	*/
                                                                                                                                  +	close() {
                                                                                                                                  +		this.messageSent = false;
                                                                                                                                  +		this.updateSent = false;
                                                                                                                                  +	}
                                                                                                                                  +	/**
                                                                                                                                  +	* expand volunteer specialization row for a specific volunteer
                                                                                                                                  +	* @param {string} volunteerId  of the current voluneer that is referenced
                                                                                                                                  +	* @param {boolean} status is open or is cloed
                                                                                                                                  +	*/
                                                                                                                                  +	openMenu(volunteerId: string, status: boolean) {
                                                                                                                                  +		if (status) {
                                                                                                                                  +			this.currentVolunteerId = volunteerId;
                                                                                                                                  +		} else {
                                                                                                                                  +			this.currentVolunteerId = null;
                                                                                                                                  +		}
                                                                                                                                  +	}
                                                                                                                                  +
                                                                                                                                  +	canEdit() {
                                                                                                                                  +		if (this.data) {
                                                                                                                                  +			return this.authService.is('DSU') || (this.authService.is('NGO') && this.data._id === this.authService.user.organisation._id);
                                                                                                                                  +		} else {
                                                                                                                                  +			return false;
                                                                                                                                  +		}
                                                                                                                                  +	}
                                                                                                                                  +}
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  + + + + + + + +
                                                                                                                                  +
                                                                                                                                  +

                                                                                                                                  result-matching ""

                                                                                                                                  +
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    +

                                                                                                                                    No results matching ""

                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/Credentials.html b/documentation/interfaces/Credentials.html new file mode 100644 index 0000000..1b6f23d --- /dev/null +++ b/documentation/interfaces/Credentials.html @@ -0,0 +1,272 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                    +
                                                                                                                                    + + +
                                                                                                                                    +
                                                                                                                                    + + + + + + + + + + + + + + + + +
                                                                                                                                    +
                                                                                                                                    +

                                                                                                                                    +

                                                                                                                                    File

                                                                                                                                    +

                                                                                                                                    +

                                                                                                                                    + src/app/core/model/authentication.model.ts +

                                                                                                                                    + +

                                                                                                                                    +

                                                                                                                                    Description

                                                                                                                                    +

                                                                                                                                    +

                                                                                                                                    +

                                                                                                                                    Credential model to be stored in local storage

                                                                                                                                    + +

                                                                                                                                    + + +
                                                                                                                                    +

                                                                                                                                    Index

                                                                                                                                    + + + + + + + + + +
                                                                                                                                    +
                                                                                                                                    Properties
                                                                                                                                    +
                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    + + + +
                                                                                                                                    +

                                                                                                                                    Properties

                                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                                    + + token +
                                                                                                                                    + token: string + +
                                                                                                                                    + Type : string + +
                                                                                                                                    + + + + + + + + + + + + + + + + + + + +
                                                                                                                                    + + user +
                                                                                                                                    + user: User + +
                                                                                                                                    + Type : User + +
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    + + +
                                                                                                                                    +
                                                                                                                                    declare namespace Authentication {
                                                                                                                                    +	/**
                                                                                                                                    +	*	Login payload model to be sent to server
                                                                                                                                    +	*/
                                                                                                                                    +	export interface LoginPayload {
                                                                                                                                    +		username: string;
                                                                                                                                    +		password: string;
                                                                                                                                    +	}
                                                                                                                                    +/**
                                                                                                                                    +	*	Signup payload model to be sent to server
                                                                                                                                    +	*/
                                                                                                                                    +	export interface SignupPayload {
                                                                                                                                    +		firstName: string;
                                                                                                                                    +		lastName: string;
                                                                                                                                    +		email: string;
                                                                                                                                    +		phone: string;
                                                                                                                                    +		password: string;
                                                                                                                                    +		cPassword: string;
                                                                                                                                    +	}
                                                                                                                                    +	/**
                                                                                                                                    +	*	User model to be stored in credentials
                                                                                                                                    +	*/
                                                                                                                                    +	export interface User {
                                                                                                                                    +		_id: string;
                                                                                                                                    +		role: string;
                                                                                                                                    +		firstName: string;
                                                                                                                                    +		lastName: string;
                                                                                                                                    +		emailVerified: boolean;
                                                                                                                                    +		emailHash: string;
                                                                                                                                    +		passwordLastUpdated?: any;
                                                                                                                                    +		lastLogin: Date;
                                                                                                                                    +		phone?: any;
                                                                                                                                    +		email: string;
                                                                                                                                    +		createdAt: Date;
                                                                                                                                    +		updatedAt: Date;
                                                                                                                                    +		organisation?: any;
                                                                                                                                    +		institution?: any;
                                                                                                                                    +	}
                                                                                                                                    +	/**
                                                                                                                                    +	*	Credential model to be stored in local storage
                                                                                                                                    +	*/
                                                                                                                                    +	export interface Credentials {
                                                                                                                                    +		token: string;
                                                                                                                                    +		user: User;
                                                                                                                                    +	}
                                                                                                                                    +}
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    + + + + + + + +
                                                                                                                                    +
                                                                                                                                    +

                                                                                                                                    result-matching ""

                                                                                                                                    +
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      +

                                                                                                                                      No results matching ""

                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/ErrorMessageObject.html b/documentation/interfaces/ErrorMessageObject.html new file mode 100644 index 0000000..4ea2765 --- /dev/null +++ b/documentation/interfaces/ErrorMessageObject.html @@ -0,0 +1,310 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                      +
                                                                                                                                      + + +
                                                                                                                                      +
                                                                                                                                      + + + + + + + + + + + + + + + + +
                                                                                                                                      +
                                                                                                                                      +

                                                                                                                                      +

                                                                                                                                      File

                                                                                                                                      +

                                                                                                                                      +

                                                                                                                                      + src/app/core/model/error.model.ts +

                                                                                                                                      + +

                                                                                                                                      +

                                                                                                                                      Description

                                                                                                                                      +

                                                                                                                                      +

                                                                                                                                      +

                                                                                                                                      Error message object model for consistency

                                                                                                                                      + +

                                                                                                                                      + + +
                                                                                                                                      +

                                                                                                                                      Index

                                                                                                                                      + + + + + + + + + +
                                                                                                                                      +
                                                                                                                                      Properties
                                                                                                                                      +
                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      + + + +
                                                                                                                                      +

                                                                                                                                      Properties

                                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                                      + + error +
                                                                                                                                      + error: string + +
                                                                                                                                      + Type : string + +
                                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                                      + + id +
                                                                                                                                      + id: number + +
                                                                                                                                      + Type : number + +
                                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                                      + + serviceUrl +
                                                                                                                                      + serviceUrl: string + +
                                                                                                                                      + Type : string + +
                                                                                                                                      + + + + + + + + + + + + + + + + + + + +
                                                                                                                                      + + type +
                                                                                                                                      + type: string + +
                                                                                                                                      + Type : string + +
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      + + +
                                                                                                                                      +
                                                                                                                                      declare namespace ErrorModel {
                                                                                                                                      +	/**
                                                                                                                                      +	*	Error object model for consistency
                                                                                                                                      +	*/
                                                                                                                                      +	export interface RootObject {
                                                                                                                                      +		statusCode: number;
                                                                                                                                      +		error: string;
                                                                                                                                      +		message: string;
                                                                                                                                      +		attributes?: any;
                                                                                                                                      +	}
                                                                                                                                      +	/**
                                                                                                                                      +	*	Error message object model for consistency
                                                                                                                                      +	*/
                                                                                                                                      +	export interface ErrorMessageObject {
                                                                                                                                      +		id: number;
                                                                                                                                      +		error: string;
                                                                                                                                      +		type: string;
                                                                                                                                      +		serviceUrl: string;
                                                                                                                                      +	}
                                                                                                                                      +}
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      + + + + + + + +
                                                                                                                                      +
                                                                                                                                      +

                                                                                                                                      result-matching ""

                                                                                                                                      +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        +

                                                                                                                                        No results matching ""

                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/LoginPayload.html b/documentation/interfaces/LoginPayload.html new file mode 100644 index 0000000..8fb500b --- /dev/null +++ b/documentation/interfaces/LoginPayload.html @@ -0,0 +1,272 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                        +
                                                                                                                                        + + +
                                                                                                                                        +
                                                                                                                                        + + + + + + + + + + + + + + + + +
                                                                                                                                        +
                                                                                                                                        +

                                                                                                                                        +

                                                                                                                                        File

                                                                                                                                        +

                                                                                                                                        +

                                                                                                                                        + src/app/core/model/authentication.model.ts +

                                                                                                                                        + +

                                                                                                                                        +

                                                                                                                                        Description

                                                                                                                                        +

                                                                                                                                        +

                                                                                                                                        +

                                                                                                                                        Login payload model to be sent to server

                                                                                                                                        + +

                                                                                                                                        + + +
                                                                                                                                        +

                                                                                                                                        Index

                                                                                                                                        + + + + + + + + + +
                                                                                                                                        +
                                                                                                                                        Properties
                                                                                                                                        +
                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        + + + +
                                                                                                                                        +

                                                                                                                                        Properties

                                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                                        + + password +
                                                                                                                                        + password: string + +
                                                                                                                                        + Type : string + +
                                                                                                                                        + + + + + + + + + + + + + + + + + + + +
                                                                                                                                        + + username +
                                                                                                                                        + username: string + +
                                                                                                                                        + Type : string + +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        + + +
                                                                                                                                        +
                                                                                                                                        declare namespace Authentication {
                                                                                                                                        +	/**
                                                                                                                                        +	*	Login payload model to be sent to server
                                                                                                                                        +	*/
                                                                                                                                        +	export interface LoginPayload {
                                                                                                                                        +		username: string;
                                                                                                                                        +		password: string;
                                                                                                                                        +	}
                                                                                                                                        +/**
                                                                                                                                        +	*	Signup payload model to be sent to server
                                                                                                                                        +	*/
                                                                                                                                        +	export interface SignupPayload {
                                                                                                                                        +		firstName: string;
                                                                                                                                        +		lastName: string;
                                                                                                                                        +		email: string;
                                                                                                                                        +		phone: string;
                                                                                                                                        +		password: string;
                                                                                                                                        +		cPassword: string;
                                                                                                                                        +	}
                                                                                                                                        +	/**
                                                                                                                                        +	*	User model to be stored in credentials
                                                                                                                                        +	*/
                                                                                                                                        +	export interface User {
                                                                                                                                        +		_id: string;
                                                                                                                                        +		role: string;
                                                                                                                                        +		firstName: string;
                                                                                                                                        +		lastName: string;
                                                                                                                                        +		emailVerified: boolean;
                                                                                                                                        +		emailHash: string;
                                                                                                                                        +		passwordLastUpdated?: any;
                                                                                                                                        +		lastLogin: Date;
                                                                                                                                        +		phone?: any;
                                                                                                                                        +		email: string;
                                                                                                                                        +		createdAt: Date;
                                                                                                                                        +		updatedAt: Date;
                                                                                                                                        +		organisation?: any;
                                                                                                                                        +		institution?: any;
                                                                                                                                        +	}
                                                                                                                                        +	/**
                                                                                                                                        +	*	Credential model to be stored in local storage
                                                                                                                                        +	*/
                                                                                                                                        +	export interface Credentials {
                                                                                                                                        +		token: string;
                                                                                                                                        +		user: User;
                                                                                                                                        +	}
                                                                                                                                        +}
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        + + + + + + + +
                                                                                                                                        +
                                                                                                                                        +

                                                                                                                                        result-matching ""

                                                                                                                                        +
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          +

                                                                                                                                          No results matching ""

                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/RootObject.html b/documentation/interfaces/RootObject.html new file mode 100644 index 0000000..c796e7e --- /dev/null +++ b/documentation/interfaces/RootObject.html @@ -0,0 +1,316 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                          +
                                                                                                                                          + + +
                                                                                                                                          +
                                                                                                                                          + + + + + + + + + + + + + + + + +
                                                                                                                                          +
                                                                                                                                          +

                                                                                                                                          +

                                                                                                                                          File

                                                                                                                                          +

                                                                                                                                          +

                                                                                                                                          + src/app/core/model/error.model.ts +

                                                                                                                                          + +

                                                                                                                                          +

                                                                                                                                          Description

                                                                                                                                          +

                                                                                                                                          +

                                                                                                                                          +

                                                                                                                                          Error object model for consistency

                                                                                                                                          + +

                                                                                                                                          + + +
                                                                                                                                          +

                                                                                                                                          Index

                                                                                                                                          + + + + + + + + + +
                                                                                                                                          +
                                                                                                                                          Properties
                                                                                                                                          +
                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          + + + +
                                                                                                                                          +

                                                                                                                                          Properties

                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                          + + attributes +
                                                                                                                                          + attributes: any + +
                                                                                                                                          + Type : any + +
                                                                                                                                          + Optional +
                                                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                                                          + + error +
                                                                                                                                          + error: string + +
                                                                                                                                          + Type : string + +
                                                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                                                          + + message +
                                                                                                                                          + message: string + +
                                                                                                                                          + Type : string + +
                                                                                                                                          + + + + + + + + + + + + + + + + + + + +
                                                                                                                                          + + statusCode +
                                                                                                                                          + statusCode: number + +
                                                                                                                                          + Type : number + +
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          + + +
                                                                                                                                          +
                                                                                                                                          declare namespace ErrorModel {
                                                                                                                                          +	/**
                                                                                                                                          +	*	Error object model for consistency
                                                                                                                                          +	*/
                                                                                                                                          +	export interface RootObject {
                                                                                                                                          +		statusCode: number;
                                                                                                                                          +		error: string;
                                                                                                                                          +		message: string;
                                                                                                                                          +		attributes?: any;
                                                                                                                                          +	}
                                                                                                                                          +	/**
                                                                                                                                          +	*	Error message object model for consistency
                                                                                                                                          +	*/
                                                                                                                                          +	export interface ErrorMessageObject {
                                                                                                                                          +		id: number;
                                                                                                                                          +		error: string;
                                                                                                                                          +		type: string;
                                                                                                                                          +		serviceUrl: string;
                                                                                                                                          +	}
                                                                                                                                          +}
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          + + + + + + + +
                                                                                                                                          +
                                                                                                                                          +

                                                                                                                                          result-matching ""

                                                                                                                                          +
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            +

                                                                                                                                            No results matching ""

                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/SignupPayload.html b/documentation/interfaces/SignupPayload.html new file mode 100644 index 0000000..2bf7f54 --- /dev/null +++ b/documentation/interfaces/SignupPayload.html @@ -0,0 +1,400 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                            +
                                                                                                                                            + + +
                                                                                                                                            +
                                                                                                                                            + + + + + + + + + + + + + + + + +
                                                                                                                                            +
                                                                                                                                            +

                                                                                                                                            +

                                                                                                                                            File

                                                                                                                                            +

                                                                                                                                            +

                                                                                                                                            + src/app/core/model/authentication.model.ts +

                                                                                                                                            + +

                                                                                                                                            +

                                                                                                                                            Description

                                                                                                                                            +

                                                                                                                                            +

                                                                                                                                            +

                                                                                                                                            Signup payload model to be sent to server

                                                                                                                                            + +

                                                                                                                                            + + +
                                                                                                                                            +

                                                                                                                                            Index

                                                                                                                                            + + + + + + + + + +
                                                                                                                                            +
                                                                                                                                            Properties
                                                                                                                                            +
                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            + + + +
                                                                                                                                            +

                                                                                                                                            Properties

                                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            + + cPassword +
                                                                                                                                            + cPassword: string + +
                                                                                                                                            + Type : string + +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            + + email +
                                                                                                                                            + email: string + +
                                                                                                                                            + Type : string + +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            + + firstName +
                                                                                                                                            + firstName: string + +
                                                                                                                                            + Type : string + +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            + + lastName +
                                                                                                                                            + lastName: string + +
                                                                                                                                            + Type : string + +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            + + password +
                                                                                                                                            + password: string + +
                                                                                                                                            + Type : string + +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            + + phone +
                                                                                                                                            + phone: string + +
                                                                                                                                            + Type : string + +
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            + + +
                                                                                                                                            +
                                                                                                                                            declare namespace Authentication {
                                                                                                                                            +	/**
                                                                                                                                            +	*	Login payload model to be sent to server
                                                                                                                                            +	*/
                                                                                                                                            +	export interface LoginPayload {
                                                                                                                                            +		username: string;
                                                                                                                                            +		password: string;
                                                                                                                                            +	}
                                                                                                                                            +/**
                                                                                                                                            +	*	Signup payload model to be sent to server
                                                                                                                                            +	*/
                                                                                                                                            +	export interface SignupPayload {
                                                                                                                                            +		firstName: string;
                                                                                                                                            +		lastName: string;
                                                                                                                                            +		email: string;
                                                                                                                                            +		phone: string;
                                                                                                                                            +		password: string;
                                                                                                                                            +		cPassword: string;
                                                                                                                                            +	}
                                                                                                                                            +	/**
                                                                                                                                            +	*	User model to be stored in credentials
                                                                                                                                            +	*/
                                                                                                                                            +	export interface User {
                                                                                                                                            +		_id: string;
                                                                                                                                            +		role: string;
                                                                                                                                            +		firstName: string;
                                                                                                                                            +		lastName: string;
                                                                                                                                            +		emailVerified: boolean;
                                                                                                                                            +		emailHash: string;
                                                                                                                                            +		passwordLastUpdated?: any;
                                                                                                                                            +		lastLogin: Date;
                                                                                                                                            +		phone?: any;
                                                                                                                                            +		email: string;
                                                                                                                                            +		createdAt: Date;
                                                                                                                                            +		updatedAt: Date;
                                                                                                                                            +		organisation?: any;
                                                                                                                                            +		institution?: any;
                                                                                                                                            +	}
                                                                                                                                            +	/**
                                                                                                                                            +	*	Credential model to be stored in local storage
                                                                                                                                            +	*/
                                                                                                                                            +	export interface Credentials {
                                                                                                                                            +		token: string;
                                                                                                                                            +		user: User;
                                                                                                                                            +	}
                                                                                                                                            +}
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            + + + + + + + +
                                                                                                                                            +
                                                                                                                                            +

                                                                                                                                            result-matching ""

                                                                                                                                            +
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              +

                                                                                                                                              No results matching ""

                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/interfaces/User.html b/documentation/interfaces/User.html new file mode 100644 index 0000000..3480ca6 --- /dev/null +++ b/documentation/interfaces/User.html @@ -0,0 +1,680 @@ + + + + + + rvm-client documentation + + + + + + + + + + + + +
                                                                                                                                              +
                                                                                                                                              + + +
                                                                                                                                              +
                                                                                                                                              + + + + + + + + + + + + + + + + +
                                                                                                                                              +
                                                                                                                                              +

                                                                                                                                              +

                                                                                                                                              File

                                                                                                                                              +

                                                                                                                                              +

                                                                                                                                              + src/app/core/model/authentication.model.ts +

                                                                                                                                              + +

                                                                                                                                              +

                                                                                                                                              Description

                                                                                                                                              +

                                                                                                                                              +

                                                                                                                                              +

                                                                                                                                              User model to be stored in credentials

                                                                                                                                              + +

                                                                                                                                              + + +
                                                                                                                                              +

                                                                                                                                              Index

                                                                                                                                              + + + + + + + + + +
                                                                                                                                              +
                                                                                                                                              Properties
                                                                                                                                              +
                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              + + + +
                                                                                                                                              +

                                                                                                                                              Properties

                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + _id +
                                                                                                                                              + _id: string + +
                                                                                                                                              + Type : string + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + createdAt +
                                                                                                                                              + createdAt: Date + +
                                                                                                                                              + Type : Date + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + email +
                                                                                                                                              + email: string + +
                                                                                                                                              + Type : string + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + emailHash +
                                                                                                                                              + emailHash: string + +
                                                                                                                                              + Type : string + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + emailVerified +
                                                                                                                                              + emailVerified: boolean + +
                                                                                                                                              + Type : boolean + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + firstName +
                                                                                                                                              + firstName: string + +
                                                                                                                                              + Type : string + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + institution +
                                                                                                                                              + institution: any + +
                                                                                                                                              + Type : any + +
                                                                                                                                              + Optional +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + lastLogin +
                                                                                                                                              + lastLogin: Date + +
                                                                                                                                              + Type : Date + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + lastName +
                                                                                                                                              + lastName: string + +
                                                                                                                                              + Type : string + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + organisation +
                                                                                                                                              + organisation: any + +
                                                                                                                                              + Type : any + +
                                                                                                                                              + Optional +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + passwordLastUpdated +
                                                                                                                                              + passwordLastUpdated: any + +
                                                                                                                                              + Type : any + +
                                                                                                                                              + Optional +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + phone +
                                                                                                                                              + phone: any + +
                                                                                                                                              + Type : any + +
                                                                                                                                              + Optional +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + role +
                                                                                                                                              + role: string + +
                                                                                                                                              + Type : string + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              + + updatedAt +
                                                                                                                                              + updatedAt: Date + +
                                                                                                                                              + Type : Date + +
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              + + +
                                                                                                                                              +
                                                                                                                                              declare namespace Authentication {
                                                                                                                                              +	/**
                                                                                                                                              +	*	Login payload model to be sent to server
                                                                                                                                              +	*/
                                                                                                                                              +	export interface LoginPayload {
                                                                                                                                              +		username: string;
                                                                                                                                              +		password: string;
                                                                                                                                              +	}
                                                                                                                                              +/**
                                                                                                                                              +	*	Signup payload model to be sent to server
                                                                                                                                              +	*/
                                                                                                                                              +	export interface SignupPayload {
                                                                                                                                              +		firstName: string;
                                                                                                                                              +		lastName: string;
                                                                                                                                              +		email: string;
                                                                                                                                              +		phone: string;
                                                                                                                                              +		password: string;
                                                                                                                                              +		cPassword: string;
                                                                                                                                              +	}
                                                                                                                                              +	/**
                                                                                                                                              +	*	User model to be stored in credentials
                                                                                                                                              +	*/
                                                                                                                                              +	export interface User {
                                                                                                                                              +		_id: string;
                                                                                                                                              +		role: string;
                                                                                                                                              +		firstName: string;
                                                                                                                                              +		lastName: string;
                                                                                                                                              +		emailVerified: boolean;
                                                                                                                                              +		emailHash: string;
                                                                                                                                              +		passwordLastUpdated?: any;
                                                                                                                                              +		lastLogin: Date;
                                                                                                                                              +		phone?: any;
                                                                                                                                              +		email: string;
                                                                                                                                              +		createdAt: Date;
                                                                                                                                              +		updatedAt: Date;
                                                                                                                                              +		organisation?: any;
                                                                                                                                              +		institution?: any;
                                                                                                                                              +	}
                                                                                                                                              +	/**
                                                                                                                                              +	*	Credential model to be stored in local storage
                                                                                                                                              +	*/
                                                                                                                                              +	export interface Credentials {
                                                                                                                                              +		token: string;
                                                                                                                                              +		user: User;
                                                                                                                                              +	}
                                                                                                                                              +}
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              + + + + + + + +
                                                                                                                                              +
                                                                                                                                              +

                                                                                                                                              result-matching ""

                                                                                                                                              +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +

                                                                                                                                                No results matching ""

                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/js/compodoc.js b/documentation/js/compodoc.js new file mode 100644 index 0000000..8cc41d3 --- /dev/null +++ b/documentation/js/compodoc.js @@ -0,0 +1,14 @@ +var compodoc = { + EVENTS: { + READY: 'compodoc.ready', + SEARCH_READY: 'compodoc.search.ready' + } +}; + +Object.assign( compodoc, EventDispatcher.prototype ); + +document.addEventListener('DOMContentLoaded', function() { + compodoc.dispatchEvent({ + type: compodoc.EVENTS.READY + }); +}); diff --git a/documentation/js/lazy-load-graphs.js b/documentation/js/lazy-load-graphs.js new file mode 100644 index 0000000..2ef47ca --- /dev/null +++ b/documentation/js/lazy-load-graphs.js @@ -0,0 +1,44 @@ +document.addEventListener('DOMContentLoaded', function() { + var lazyGraphs = [].slice.call(document.querySelectorAll('[lazy]')); + var active = false; + + var lazyLoad = function() { + if (active === false) { + active = true; + + setTimeout(function() { + lazyGraphs.forEach(function(lazyGraph) { + if ( + lazyGraph.getBoundingClientRect().top <= window.innerHeight && + lazyGraph.getBoundingClientRect().bottom >= 0 && + getComputedStyle(lazyGraph).display !== 'none' + ) { + lazyGraph.data = lazyGraph.getAttribute('lazy'); + lazyGraph.removeAttribute('lazy'); + + lazyGraphs = lazyGraphs.filter(function(image) { return image !== lazyGraph}); + + if (lazyGraphs.length === 0) { + document.removeEventListener('scroll', lazyLoad); + window.removeEventListener('resize', lazyLoad); + window.removeEventListener('orientationchange', lazyLoad); + } + } + }); + + active = false; + }, 200); + } + }; + + // initial load + lazyLoad(); + + var container = document.querySelector('.container-fluid.modules'); + if (container) { + container.addEventListener('scroll', lazyLoad); + window.addEventListener('resize', lazyLoad); + window.addEventListener('orientationchange', lazyLoad); + } + +}); diff --git a/documentation/js/libs/EventDispatcher.js b/documentation/js/libs/EventDispatcher.js new file mode 100644 index 0000000..f112877 --- /dev/null +++ b/documentation/js/libs/EventDispatcher.js @@ -0,0 +1,5 @@ +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var EventDispatcher=function(){};Object.assign(EventDispatcher.prototype,{addEventListener:function(i,t){void 0===this._listeners&&(this._listeners={});var e=this._listeners;void 0===e[i]&&(e[i]=[]),-1===e[i].indexOf(t)&&e[i].push(t)},hasEventListener:function(i,t){if(void 0===this._listeners)return!1;var e=this._listeners;return void 0!==e[i]&&-1!==e[i].indexOf(t)},removeEventListener:function(i,t){if(void 0!==this._listeners){var e=this._listeners[i];if(void 0!==e){var s=e.indexOf(t);-1!==s&&e.splice(s,1)}}},dispatchEvent:function(i){if(void 0!==this._listeners){var t=this._listeners[i.type];if(void 0!==t){i.target=this;var e=[],s=0,n=t.length;for(s=0;s1?t[t.length-1]:void 0:t[0]},this.getActiveContent=function(){var t=this.getActiveTab().getElementsByTagName("A")[0].getAttribute("href").replace("#","");return t&&document.getElementById("c-"+t)},this.tab.addEventListener("click",this.handle,!1)},d=document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"),u=0,h=d.length;u0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,f.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])}); \ No newline at end of file diff --git a/documentation/js/libs/custom-elements-es5-adapter.js b/documentation/js/libs/custom-elements-es5-adapter.js new file mode 100644 index 0000000..3a694b8 --- /dev/null +++ b/documentation/js/libs/custom-elements-es5-adapter.js @@ -0,0 +1,15 @@ +/** +@license @nocompile +Copyright (c) 2018 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ +(function () { + 'use strict'; + + (function(){if(void 0===window.Reflect||void 0===window.customElements||window.customElements.hasOwnProperty('polyfillWrapFlushCallback'))return;const a=HTMLElement;window.HTMLElement=function(){return Reflect.construct(a,[],this.constructor)},HTMLElement.prototype=a.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,a);})(); + +}()); diff --git a/documentation/js/libs/custom-elements.min.js b/documentation/js/libs/custom-elements.min.js new file mode 100644 index 0000000..9b64a23 --- /dev/null +++ b/documentation/js/libs/custom-elements.min.js @@ -0,0 +1,38 @@ +(function(){ + 'use strict';var h=new function(){};var aa=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function m(b){var a=aa.has(b);b=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(b);return!a&&b}function n(b){var a=b.isConnected;if(void 0!==a)return a;for(;b&&!(b.__CE_isImportDocument||b instanceof Document);)b=b.parentNode||(window.ShadowRoot&&b instanceof ShadowRoot?b.host:void 0);return!(!b||!(b.__CE_isImportDocument||b instanceof Document))} + function p(b,a){for(;a&&a!==b&&!a.nextSibling;)a=a.parentNode;return a&&a!==b?a.nextSibling:null} + function t(b,a,c){c=c?c:new Set;for(var d=b;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;a(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)t(d,a,c);d=p(b,e);continue}else if("template"===f){d=p(b,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)t(e,a,c)}d=d.firstChild?d.firstChild:p(b,d)}}function u(b,a,c){b[a]=c};function v(){this.a=new Map;this.s=new Map;this.f=[];this.b=!1}function ba(b,a,c){b.a.set(a,c);b.s.set(c.constructor,c)}function w(b,a){b.b=!0;b.f.push(a)}function x(b,a){b.b&&t(a,function(a){return y(b,a)})}function y(b,a){if(b.b&&!a.__CE_patched){a.__CE_patched=!0;for(var c=0;ct?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);r>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);r>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===ho||n[0]===po?po+n:n}function s(n){return(n+="")[0]===po?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function d(){var n=0;for(var t in this._)++n;return n}function v(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function x(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function M(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=go.length;e=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=ko.get(n);return c&&(n=c,l=B),a?t?i:r:t?_:u}function $(n,t){return function(e){var r=to.event;to.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{to.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Eo,i="click"+r,u=to.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==No&&(No=!("onselectstart"in e)&&M(e.style,"userSelect")),No){var o=n(e).style,a=o[No];o[No]="none"}return function(n){if(u.on(r,null),No&&(o[No]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(Ao<0){var u=t(n);if(u.scrollX||u.scrollY){var o=(r=to.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important"))[0][0].getScreenCTM();Ao=!(o.f||o.e),r.remove()}}return Ao?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return to.event.changedTouches[0].identifier}function K(n){return n>0?1:n<0?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:n<-1?Lo:Math.acos(n)}function tn(n){return n>1?Ro:n<-1?-Ro:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):bn(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:n<0&&(n+=360),n<60?u+(o-u)*n/60:n<180?o:n<240?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:t<0?0:t>1?1:t,e=e<0?0:e>1?1:e,o=e<=.5?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=to.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Do)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=dn(i)*Zo,r=dn(r)*Vo,u=dn(u)*Xo,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Po,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function dn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function vn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(n<=.00304?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):bn(""+n,mn,cn):new mn(n,t,e)}function xn(n){return new mn(n>>16,n>>8&255,255&n)}function Mn(n){return xn(n)+""}function _n(n){return n<16?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function bn(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=Wo.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o|=o>>4,a=240&u,a|=a>>4,l=15&u,l|=l<<4):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=l<.5?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(t0&&l<1?0:r),new ln(r,i,l)}function Sn(n,t,e){var r=vn((.4124564*(n=kn(n))+.3575761*(t=kn(t))+.1804375*(e=kn(e)))/Zo),i=vn((.2126729*n+.7151522*t+.072175*e)/Vo);return hn(116*i-16,500*(r-i),200*(i-vn((.0193339*n+.119192*t+.9503041*e)/Xo)))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&t<300||304===t){try{n=e.call(u,l)}catch(n){return void o.error.call(u,n)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=to.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=to.event;to.event=n;try{o.progress.call(u,l)}finally{to.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(ro(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},to.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;r<2&&(t=0),r<3&&(e=Date.now());var i={c:n,t:e+t,n:null};return Go?Go.n=i:Jo=i,Go=i,Ko||(Qo=clearTimeout(Qo),Ko=1,na(Tn)),i}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(Qo),Qo=setTimeout(Tn,t)),Ko=0):(Ko=1,na(Tn))}function Rn(){for(var n=Date.now(),t=Jo;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=Jo,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Un(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ea.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,d="",v="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,v="%",p="f";break;case"p":g=100,v="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(d="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(d=i[0],v=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=ra.get(p)||Fn;var x=c&&s;return function(n){var e=v;if(y&&n%1)return"";var i=n<0||0===n&&1/n<0?(n=-n,"-"):"-"===a?"":a;if(g<0){var l=to.formatPrefix(n,h);n=l.scale(n),e=l.symbol+v}else n*=g;var M,_,b=(n=p(n,h)).lastIndexOf(".");if(b<0){var w=m?n.lastIndexOf("e"):-1;w<0?(M=n,_=""):(M=n.substring(0,w),_=n.substring(w))}else M=n.substring(0,b),_=t+n.substring(b+1);!c&&s&&(M=u(M,1/0));var S=d.length+M.length+_.length+(x?0:i.length),k=S"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(x?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return t-e1)for(;o=c)return-1;if(37===(i=t.charCodeAt(a++))){if(o=t.charAt(a++),!(u=C[o in aa?t.charAt(a++):o])||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){M.lastIndex=0;var r=M.exec(t.slice(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=x.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,d=n.days,v=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{var t=new(ua=Hn);return t._=n,r(t)}finally{ua=Date}}var r=t(n);return e.parse=function(n){try{ua=Hn;var t=r.parse(n);return t&&t._}finally{ua=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var x=to.map(),M=Vn(d),_=Xn(d),b=Vn(v),w=Xn(v),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){x.set(n.toLowerCase(),t)});var A={a:function(n){return v[n.getDay()]},A:function(n){return d[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ia.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ia.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ia.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=n<0?"-":"",i=(r?-n:n)+"",u=i.length;return r+(u68?1900:2e3)}function nt(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){la.lastIndex=0;var r=la.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=so(t)/60|0,i=so(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){ca.lastIndex=0;var r=ca.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);da.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;va.point=function(o,a){va.point=n,r=(t=o)*Do,i=Math.cos(a=(e=a)*Do/2+Lo/4),u=Math.sin(a)},va.lineEnd=function(){n(t,e)}}function vt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function xt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function Mt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function _t(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function bt(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return so(n[0]-t[0])=0;--a)i.point((s=f[a])[0],s[1]);else r(p.x,p.p.x,-1,i);p=p.p}f=(p=p.o).z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(_||(u.polygonStart(),_=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,d,v=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=to.merge(p);var n=Ot(y,g);p.length?(_||(u.polygonStart(),_=!0),Lt(p,jt,n,e,u)):n&&(_||(u.polygonStart(),_=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),_&&(u.polygonEnd(),_=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},x=Pt(),M=t(x),_=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:_,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function jt(n,t){return((n=n.x)[0]<0?n[1]-Ro-Co:Ro-n[1])-((t=t.x)[0]<0?t[1]-Ro-Co:Ro-t[1])}function Ut(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Lo:-Lo,l=so(u-e);so(l-Lo)0?Ro:-Ro),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Lo&&(so(e-i)Co?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Ro,r.point(-Lo,i),r.point(0,i),r.point(Lo,i),r.point(Lo,0),r.point(Lo,-i),r.point(0,-i),r.point(-Lo,-i),r.point(-Lo,0),r.point(-Lo,i);else if(so(n[0]-t[0])>Co){var u=n[0]=0?1:-1,w=b*_,S=w>Lo,k=g*x;if(da.add(Math.atan2(k*b*Math.sin(w),d*M+k*Math.cos(w))),u+=S?_+b*qo:_,S^h>=e^y>=e){var N=mt(vt(s),vt(n));_t(N);var E=mt(i,N);_t(E);var A=(S^_>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^_>=0?1:-1)}if(!v++)break;h=y,g=x,d=M,s=n}}return(u<-Co||uu}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],d=t(s,h),v=o?d?0:i(s,h):d?i(s+(s<0?Lo:-Lo),h):0;if(!e&&(c=l=d)&&n.lineStart(),d!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Co,g[1]+=Co,d=t(g[0],g[1]))),d!==l)f=0,d?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^d){var y;v&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!d||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=d,u=v},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=[1,0,0],i=mt(vt(n),vt(t)),o=yt(i,i),a=i[0],l=o-a*a;if(!l)return!e&&n;var c=u*o/l,f=-u*a/l,s=mt(r,i),h=Mt(r,c);xt(h,Mt(i,f));var p=s,g=yt(h,p),d=yt(p,p),v=g*g-d*(yt(h,h)-1);if(!(v<0)){var y=Math.sqrt(v),m=Mt(p,(-g-y)/d);if(xt(m,h),m=bt(m),!e)return m;var x,M=n[0],_=t[0],b=n[1],w=t[1];_0^m[1]<(so(m[0]-M)Lo^(M<=m[0]&&m[0]<=_)){var E=Mt(p,(-g+y)/d);return xt(E,h),[m,bt(E)]}}}function i(t,e){var r=o?n:Lo-n,i=0;return t<-r?i|=1:t>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=so(u)>Co;return Rt(t,e,de(n,6*Do),o?[0,-n]:[-Lo,n-Lo])}function It(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=0,s=1,h=a.x-l,p=a.y-c;if(u=n-l,h||!(u>0)){if(u/=h,h<0){if(u0){if(u>s)return;u>f&&(f=u)}if(u=e-l,h||!(u<0)){if(u/=h,h<0){if(u>s)return;u>f&&(f=u)}else if(h>0){if(u0)){if(u/=p,p<0){if(u0){if(u>s)return;u>f&&(f=u)}if(u=r-c,p||!(u<0)){if(u/=p,p<0){if(u>s)return;u>f&&(f=u)}else if(p>0){if(u0&&(i.a={x:l+f*h,y:c+f*p}),s<1&&(i.b={x:l+s*h,y:c+s*p}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return so(r[0]-n)0?0:3:so(r[0]-e)0?2:1:so(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=v.length,r=n[1],i=0;ir&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0)do{c.point(0===f||3===f?n:e,f>1?r:t)}while((f=(f+l+4)%4)!==s);else c.point(a[0],a[1])}function f(i,u){return n<=i&&i<=e&&t<=u&&u<=r}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,v&&v.push(y=[]),S=!0,w=!1,_=b=NaN}function p(){d&&(g(m,x),M&&w&&E.rejoin(),d.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){var e=f(n=Math.max(-za,Math.min(za,n)),t=Math.max(-za,Math.min(za,t)));if(v&&y.push([n,t]),S)m=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var d,v,y,m,x,M,_,b,w,S,k,N=a,E=Pt(),A=It(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,d=[],v=[],k=!0},polygonEnd:function(){a=N,d=to.merge(d);var t=l([n,r]),e=k&&t,i=d.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(d,u,t,c,a),a.polygonEnd()),d=v=y=null}};return C}}function Vt(n){var t=0,e=Lo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Lo/180,e=n[1]*Lo/180):[t/Lo*180,e/Lo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){qa+=i*n-r*t,r=n,i=t}var t,e,r,i;ja.point=function(u,o){ja.point=n,t=r=u,e=i=o},ja.lineEnd=function(){n(t,e)}}function Bt(n,t){nDa&&(Da=n),tPa&&(Pa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){xa+=n,Ma+=t,++_a}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);ba+=o*(t+n)/2,wa+=o*(e+r)/2,Sa+=o,Gt(t=n,e=r)}var t,e;Fa.point=function(r,i){Fa.point=n,Gt(t=r,e=i)}}function Qt(){Fa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);ba+=o*(r+n)/2,wa+=o*(i+t)/2,Sa+=o,ka+=(o=i*n-r*t)*(r+n),Na+=o*(i+t),Ea+=3*o,Gt(r=n,i=t)}var t,e,r,i;Fa.point=function(u,o){Fa.point=n,Gt(t=r=u,e=i=o)},Fa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,qo)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:_};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=NaN,S.point=u,t.lineStart()}function u(e,r){var u=vt([e,r]),o=n(e,r);i(x,M,m,_,b,w,x=o[0],M=o[1],m=e,_=u[0],b=u[1],w=u[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function l(){r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=x,g=M,d=_,v=b,y=w,S.point=u}function f(){i(x,M,m,_,b,w,p,g,s,d,v,y,a,t),S.lineEnd=o,o()}var s,h,p,g,d,v,y,m,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,d,v,y){var m=f-t,x=s-e,M=m*m+x*x;if(M>4*u&&v--){var _=a+p,b=l+g,w=c+d,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),N=so(so(w)-1)u||so((m*z+x*L)/M-.5)>.3||a*p+l*g+c*d0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Po,e*Po])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Do,n[1]*Do),[n[0]*h+l,c-n[1]*h]}function e(n){return(n=a.invert((n[0]-l)/h,(c-n[1])/h))&&[n[0]*Po,n[1]*Po]}function r(){a=Ct(o=se(y,x,M),u);var n=u(d,v);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,d=0,v=0,y=0,x=0,M=0,_=Ca,b=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(_(o,s(b(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(_=null==n?(w=n,Ca):Yt((w=+n)*Do),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,b=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(d=n[0]%360*Do,v=n[1]%360*Do,r()):[d*Po,v*Po]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Do,x=n[1]%360*Do,M=n.length>2?n[2]%360*Do:0,r()):[y*Po,x*Po,M*Po]},to.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Do,e*Do)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Lo?n-qo:n<-Lo?n+qo:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Lo?t-qo:t<-Lo?t+qo:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function de(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=ve(e,i),u=ve(e,u),(o>0?iu)&&(i+=o*qo)):(i=n+o*qo,u=n-.5*l);for(var c,f=i;o>0?f>u:f0?t<-Ro+Co&&(t=-Ro+Co):t>Ro-Co&&(t=Ro-Co);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Lo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Ro]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return so(i)1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function je(n){var t=Qa.pop()||new Pe;return t.site=n,t}function Ue(n){Be(n),Ja.remove(n),Qa.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];Ue(n);for(var l=u;l.circle&&so(e-l.circle.x)Co)a=a.L;else{if(!((i=u-Ye(a,o))>Co)){r>-Co?(t=a.P,e=a):i>-Co?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=je(n);if(Ja.insert(t,l),t||e){if(t===e)return Be(t),e=je(t.site),Ja.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(e){Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,d=g.x-f,v=g.y-s,y=2*(h*v-p*d),m=h*h+p*p,x=d*d+v*v,M={x:(v*m-p*x)/y+f,y:(h*x-d*m)/y+s};nr(e.edge,c,g,M),l.edge=Ke(c,n,null,M),e.edge=Ke(n,g,null,M),$e(t),$e(e)}else l.edge=Ke(t.site,l.site)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-1/0;var a=(e=o.site).x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ye(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ie(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],d=Wa,v=d.length;v--;)if((u=d[v])&&u.prepare())for(l=(a=u.edges).length,o=0;oCo||so(i-e)>Co)&&(a.splice(o,0,new tr(Qe(u.site,f,so(r-s)Co?{x:s,y:so(t-s)Co?{x:so(e-g)Co?{x:h,y:so(t-h)Co?{x:so(e-p)=-zo)){var h=l*l+c*c,p=f*f+v*v,g=(v*h-c*p)/s,d=(l*p-f*h)/s,v=d+a,y=nl.pop()||new Xe;y.arc=n,y.site=i,y.x=g+o,y.y=v+Math.sqrt(g*g+d*d),y.cy=v,n.circle=y;for(var m=null,x=Ka._;x;)if(y.y=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:v,y:l};e={x:v,y:c}}else{if(u){if(u.y1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||h=_)<<1|t>=M,w=b+4;bu&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:vr(e,r)})),u=rl.lastIndex;return u=0&&!(e=to.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;e=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function br(n){return function(t){return.5*(t<.5?n(2*t):2-n(2-2*t))}}function wr(n){return n*n}function Sr(n){return n*n*n}function kr(n){if(n<=0)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(n<.5?e:3*(n-t)+e-.75)}function Nr(n){return function(t){return Math.pow(t,n)}}function Er(n){return 1-Math.cos(n*Ro)}function Ar(n){return Math.pow(2,10*(n-1))}function Cr(n){return 1-Math.sqrt(1-n*n)}function zr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/qo*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*qo/t)}}function Lr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function qr(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Tr(n,t){n=to.hcl(n),t=to.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:u<-180&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Rr(n,t){n=to.hsl(n),t=to.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:u<-180&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=to.lab(n),t=to.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Fr(t),i=Ur(t,e),u=Fr(Hr(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Or(e)+"rotate(",null,")")-2,x:vr(n,t)})):t&&e.push(Or(e)+"rotate("+t+")")}function Zr(n,t,e,r){n!==t?r.push({i:e.push(Or(e)+"skewX(",null,")")-2,x:vr(n,t)}):t&&e.push(Or(e)+"skewX("+t+")")}function Vr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Or(e)+"scale(",null,",",null,")");r.push({i:i-4,x:vr(n[0],t[0])},{i:i-2,x:vr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Or(e)+"scale("+t+")")}function Xr(n,t){var e=[],r=[];return n=to.transform(n),t=to.transform(t),Yr(n.translate,t.translate,e,r),Ir(n.rotate,t.rotate,e,r),Zr(n.skew,t.skew,e,r),Vr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function ui(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oi&&(r=e,i=t);return r}function vi(n){return n.reduce(yi,0)}function yi(n,t){return n+t[1]}function mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function Mi(n){return[to.min(n),to.max(n)]}function _i(n,t){return n.value-t.value}function bi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function wi(n,t){n._pack_next=t,t._pack_prev=n}function Si(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function ki(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-1/0,h=1/0,p=-1/0;if(e.forEach(Ni),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(Ci(r,i,u=e[2]),t(u),bi(r,u),r._pack_prev=u,bi(u,i),i=r._pack_next,o=3;o2?Yi:Fi,l=r?Br:$r;return o=i(n,t,l,e),a=i(t,n,l,mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Pr)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return $i(n,t)},u.tickFormat=function(t,e){return Bi(n,t,e)},u.nice=function(t){return Vi(n,t),i()},u.copy=function(){return Ii(n,t,e,r)},i()}function Zi(n,t){return to.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Vi(n,t){return Hi(n,Oi(Xi(n,t)[2])),Hi(n,Oi(Xi(n,t)[2])),n}function Xi(n,t){null==t&&(t=10);var e=ji(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return u<=.15?i*=10:u<=.35?i*=5:u<=.75&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function $i(n,t){return to.range.apply(to,Xi(n,t))}function Bi(n,t,e){var r=Xi(n,t);if(e){var i=ea.exec(e);if(i.shift(),"s"===i[8]){var u=to.formatPrefix(Math.max(so(r[0]),so(r[1])));return i[7]||(i[7]="."+Wi(u.scale(r[2]))),i[8]="f",e=to.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+Ji(i[8],r)),e=i.join("")}else e=",."+Wi(r[2])+"f";return to.format(e)}function Wi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Ji(n,t){var e=Wi(t[2]);return n in dl?Math.abs(e-Wi(Math.max(so(t[0]),so(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Gi(n,t,e,r){function i(n){return(e?Math.log(n<0?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Hi(r.map(i),e?Math:yl);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=ji(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;c0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return vl;arguments.length<2?e=vl:"function"!=typeof e&&(e=to.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return o*t0?a[e-1]:n[0],e0?0:1}function hu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,d=(s+p)/2,v=h-f,y=p-s,m=v*v+y*y,x=e-r,M=f*p-h*s,_=(y<0?-1:1)*Math.sqrt(Math.max(0,x*x*m-M*M)),b=(M*y-v*_)/m,w=(-M*v-y*_)/m,S=(M*y+v*_)/m,k=(-M*v+y*_)/m,N=b-g,E=w-d,A=S-g,C=k-d;return N*N+E*E>A*A+C*C&&(b=S,w=k),[[b-l,w-c],[b*e/x,w*e/x]]}function pu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function du(n){return n.join("L")+"Z"}function vu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function yu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r);for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Tu(n){return n.length<3?gu(n):n[0]+bu(n,qu(n))}function Ru(n){for(var t,e,r,i=-1,u=n.length;++i0;)p[--a].call(n,o);if(u>=1)return d.event&&d.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),d=g[r];d||(l=i.time,f=qn(u,0,l),d=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function Bu(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wu(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Ju(n){return n.toISOString()}function Gu(n,t,e){function r(t){return n(t)}function i(n,e){var r=(n[1]-n[0])/e,i=to.bisect(Yl,r);return i==Yl.length?[t.year,Xi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[r/Yl[i-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=Ku(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ku(+t+1);return t}}:n))},r.ticks=function(n,t){var e=ji(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],Ku(+e[1]+1),t<1?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Gu(n.copy(),t,e)},Zi(r,n)}function Ku(n){return new Date(n)}function Qu(n){return JSON.parse(n.responseText)}function no(n){var t=io.createRange();return t.selectNode(io.body),t.createContextualFragment(n.responseText)}var to={version:"3.5.17"},eo=[].slice,ro=function(n){return eo.call(n)},io=this.document;if(io)try{ro(io.documentElement.childNodes)[0].nodeType}catch(n){ro=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),io)try{io.createElement("DIV").style.setProperty("opacity",0,"")}catch(n){var uo=this.Element.prototype,oo=uo.setAttribute,ao=uo.setAttributeNS,lo=this.CSSStyleDeclaration.prototype,co=lo.setProperty;uo.setAttribute=function(n,t){oo.call(this,n,t+"")},uo.setAttributeNS=function(n,t,e){ao.call(this,n,t,e+"")},lo.setProperty=function(n,t,e){co.call(this,n,t+"",e)}}to.ascending=e,to.descending=function(n,t){return tn?1:t>=n?0:NaN},to.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},to.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},to.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),i=r){e=i=r;break}for(;++ur&&(e=r),i1)return l/(f-1)},to.deviation=function(){var n=to.variance.apply(this,arguments);return n?Math.sqrt(n):n};var fo=u(e);to.bisectLeft=fo.left,to.bisect=to.bisectRight=fo.right,to.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},to.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,u<2&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},to.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},to.pairs=function(n){for(var t=0,e=n.length-1,r=n[0],i=new Array(e<0?0:e);t=0;)for(t=(r=n[i]).length;--t>=0;)e[--o]=r[t];return e};var so=Math.abs;to.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e==1/0)throw new Error("infinite range");var r,i=[],u=a(so(e)),o=-1;if(n*=u,t*=u,(e*=u)<0)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,d=u[a++],v=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(to.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},to.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;e=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},to.event=null,to.requote=function(n){return n.replace(vo,"\\$&")};var vo=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,yo={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},mo=function(n,t){return t.querySelector(n)},xo=function(n,t){return t.querySelectorAll(n)},Mo=function(n,t){var e=n.matches||n[M(n,"matchesSelector")];return(Mo=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(mo=function(n,t){return Sizzle(n,t)[0]||null},xo=Sizzle,Mo=Sizzle.matchesSelector),to.selection=function(){return to.select(io.documentElement)};var _o=to.selection.prototype=[];_o.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),wo.hasOwnProperty(e)?{space:wo[e],local:n}:n}},_o.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=to.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},_o.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},_o.sort=function(n){n=Y.apply(this,arguments);for(var t=-1,e=this.length;++t0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){_&&_.domain(M.range().map(function(n){return(n-k.x)/k.k}).map(M.invert)),w&&w.domain(b.range().map(function(n){return(n-k.y)/k.k}).map(b.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),v=null)}function s(){function n(){a=1,u(to.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=to.select(t(i)).on(q,n).on(T,r),h=e(to.mouse(i)),p=W(i);ql.call(i),l(o)}function h(){function n(){var n=to.touches(g);return p=k.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=e(n))}),n}function t(){var t=to.event.target;to.select(t).on(M,r).on(_,a),b.push(t);for(var e=to.event.changedTouches,i=0,u=e.length;i1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=to.touches(g);ql.call(g);for(var a=0,l=o.length;a=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,ra=to.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=to.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ia=to.time={},ua=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){oa.setUTCDate.apply(this._,arguments)},setDay:function(){oa.setUTCDay.apply(this._,arguments)},setFullYear:function(){oa.setUTCFullYear.apply(this._,arguments)},setHours:function(){oa.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){oa.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){oa.setUTCMinutes.apply(this._,arguments)},setMonth:function(){oa.setUTCMonth.apply(this._,arguments)},setSeconds:function(){oa.setUTCSeconds.apply(this._,arguments)},setTime:function(){oa.setTime.apply(this._,arguments)}};var oa=Date.prototype;ia.year=On(function(n){return(n=ia.day(n)).setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ia.years=ia.year.range,ia.years.utc=ia.year.utc.range,ia.day=On(function(n){var t=new ua(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ia.days=ia.day.range,ia.days.utc=ia.day.utc.range,ia.dayOfYear=function(n){var t=ia.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ia[n]=On(function(n){return(n=ia.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ia.year(n).getDay();return Math.floor((ia.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ia[n+"s"]=e.range,ia[n+"s"].utc=e.utc.range,ia[n+"OfYear"]=function(n){var e=ia.year(n).getDay();return Math.floor((ia.dayOfYear(n)+(e+t)%7)/7)}}),ia.week=ia.sunday,ia.weeks=ia.sunday.range,ia.weeks.utc=ia.sunday.utc.range,ia.weekOfYear=ia.sundayOfYear;var aa={"-":"",_:" ",0:"0"},la=/^\s*\d+/,ca=/^%/;to.locale=function(n){return{numberFormat:Un(n),timeFormat:In(n)}};var fa=to.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});to.format=fa.numberFormat,to.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,sa),st(sa.s,this.s,this),this.s?this.t+=sa.t:this.s=sa.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var sa=new ft;to.geo.stream=function(n,t){n&&ha.hasOwnProperty(n.type)?ha[n.type](n,t):ht(n,t)};var ha={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rp&&(p=t)}function t(t,e){var r=vt([t*Do,e*Do]);if(y){var i=mt(y,r),u=mt([i[1],-i[0],0],i);_t(u),u=bt(u);var o=t-g,l=o>0?1:-1,c=u[0]*Po*l,d=so(o)>180;if(d^(l*gp&&(p=v);else if(c=(c+360)%360-180,d^(l*gp&&(p=e);d?ta(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(th&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){_.point=t}function r(){M[0]=f,M[1]=h,_.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=so(r)>180?r+(r>0?360:-360):r}else d=n,v=e;va.point(n,e),t(n,e)}function u(){va.lineStart()}function o(){i(d,v),va.lineEnd(),so(m)>Co&&(f=-(h=180)),M[0]=f,M[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nCo?p=90:m<-Co&&(s=-90),M[0]=f,M[1]=h}};return function(n){p=h=-(f=s=1/0),x=[],to.geo.stream(n,_);var t=x.length;if(t){x.sort(l);for(var e=1,r=[g=x[0]];ea(g[0],g[1])&&(g[1]=u[1]),a(u[0],g[1])>a(g[0],g[1])&&(g[0]=u[0])):r.push(g=u);for(var i,u,o=-1/0,e=0,g=r[t=r.length-1];e<=t;g=u,++e)u=r[e],(i=a(g[1],u[0]))>o&&(o=i,f=u[0],h=g[1])}return x=M=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),to.geo.centroid=function(n){ya=ma=xa=Ma=_a=ba=wa=Sa=ka=Na=Ea=0,to.geo.stream(n,Aa);var t=ka,e=Na,r=Ea,i=t*t+e*e+r*r;return i=.12&&i<.234&&r>=-.425&&r<-.214?o:i>=.166&&i<.234&&r>=-.214&&r<-.115?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Co,s+.12*c+Co],[f-.214*c-Co,s+.234*c-Co]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Co,s+.166*c+Co],[f-.115*c-Co,s+.234*c-Co]]).stream(l).point,n},n.scale(1070)};var La,qa,Ta,Ra,Da,Pa,ja={point:_,lineStart:_,lineEnd:_,polygonStart:function(){qa=0,ja.lineStart=$t},polygonEnd:function(){ja.lineStart=ja.lineEnd=ja.point=_,La+=so(qa/2)}},Ua={point:Bt,lineStart:_,lineEnd:_,polygonStart:_,polygonEnd:_},Fa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Fa.lineStart=ne},polygonEnd:function(){Fa.point=Gt,Fa.lineStart=Kt,Fa.lineEnd=Qt}};to.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),to.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return La=0,to.geo.stream(n,i(ja)),La},n.centroid=function(n){return xa=Ma=_a=ba=wa=Sa=ka=Na=Ea=0,to.geo.stream(n,i(Fa)),Ea?[ka/Ea,Na/Ea]:Sa?[ba/Sa,wa/Sa]:_a?[xa/_a,Ma/_a]:[NaN,NaN]},n.bounds=function(n){return Da=Pa=-(Ta=Ra=1/0),to.geo.stream(n,i(Ua)),[[Ta,Ra],[Da,Pa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(to.geo.albersUsa()).context(null)},to.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},to.geo.projection=oe,to.geo.projectionMutator=ae,(to.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,to.geo.rotation=function(n){function t(t){return t=n(t[0]*Do,t[1]*Do),t[0]*=Po,t[1]*=Po,t}return n=se(n[0]%360*Do,n[1]*Do,n.length>2?n[2]*Do:0),t.invert=function(t){return t=n.invert(t[0]*Do,t[1]*Do),t[0]*=Po,t[1]*=Po,t},t},fe.invert=ce,to.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Do,-n[1]*Do,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Po,n[1]*=Po}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=de((t=+r)*Do,i*Do),n):t},n.precision=function(r){return arguments.length?(e=de(t*Do,(i=+r)*Do),n):i},n.angle(90)},to.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Do,i=n[1]*Do,u=t[1]*Do,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},to.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return to.range(Math.ceil(u/v)*v,i,v).map(h).concat(to.range(Math.ceil(c/y)*y,l,y).map(p)).concat(to.range(Math.ceil(r/g)*g,e,g).filter(function(n){return so(n%v)>Co}).map(f)).concat(to.range(Math.ceil(a/d)*d,o,d).filter(function(n){return so(n%y)>Co}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,d=g,v=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(v=+t[0],y=+t[1],n):[v,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],d=+t[1],n):[g,d]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Co],[180,90-Co]]).minorExtent([[-180,-80-Co],[180,80+Co]])},to.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=xe,i=Me;return n.distance=function(){return to.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},to.geo.interpolate=function(n,t){return _e(n[0]*Do,n[1]*Do,t[0]*Do,t[1]*Do)},to.geo.length=function(n){return Ha=0,to.geo.stream(n,Oa),Ha};var Ha,Oa={sphere:_,point:_,lineStart:be,lineEnd:_,polygonStart:_,polygonEnd:_},Ya=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(to.geo.azimuthalEqualArea=function(){return oe(Ya)}).raw=Ya;var Ia=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(to.geo.azimuthalEquidistant=function(){return oe(Ia)}).raw=Ia,(to.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(to.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var Za=we(function(n){return 1/n},Math.atan);(to.geo.gnomonic=function(){return oe(Za)}).raw=Za,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Ro]},(to.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var Va=we(function(){return 1},Math.asin);(to.geo.orthographic=function(){return oe(Va)}).raw=Va;var Xa=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(to.geo.stereographic=function(){return oe(Xa)}).raw=Xa,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Ro]},(to.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,to.geom={},to.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;t=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[]).point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Co)*Co,y:Math.round(o(n,t)/Co)*Co,i:t}})}var r=Ce,i=ze,u=r,o=i,a=tl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u=e.site,o=e.edges.sort(Ve),a=-1,l=o.length,c=o[l-1].edge,f=c.l===u?c.r:c.l;++a=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]={leaf:!0,nodes:[],point:null,x:null,y:null}),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,d,v,y,m,x=En(a),M=En(l);if(null!=t)d=t,v=e,y=r,m=i;else if(y=m=-(d=v=1/0),s=[],h=[],g=n.length,o)for(p=0;py&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;py&&(y=_),b>m&&(m=b),s.push(_),h.push(b)}var w=y-d,S=m-v;w>S?m=v+w:y=d+S;var k={leaf:!0,nodes:[],point:null,x:null,y:null};if(k.add=function(n){u(k,n,+x(n,++p),+M(n,p),d,v,y,m)},k.visit=function(n){hr(n,k,d,v,y,m)},k.find=function(n){return pr(k,n[0],n[1],d,v,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=ul.get(e)||il,r=ol.get(r)||m,Mr(r(e.apply(null,eo.call(arguments,1))))},to.interpolateHcl=Tr,to.interpolateHsl=Rr,to.interpolateLab=Dr,to.interpolateRound=Pr,to.transform=function(n){var t=io.createElementNS(to.ns.prefix.svg,"g");return(to.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:al)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var al={a:1,b:0,c:0,d:1,e:0,f:0};to.interpolateTransform=Xr,to.layout={},to.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;l=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return ui(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=li,e=oi,r=ai;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ii(t,function(n){n.children&&(n.value=0)}),ui(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},to.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++ca&&(a=r),o.push(r)}for(e=0;e0)for(u=-1;++u=f[0]&&a<=f[1]&&((o=l[to.bisect(s,a,1,p)-1]).y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=Mi,i=mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},to.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,ui(a,function(n){n.r=+f(n.value)}),ui(a,ki),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;ui(a,function(n){n.r+=s}),ui(a,ki),ui(a,function(n){n.r-=s})}return Ai(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=to.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ri(n,e)},to.layout.tree=function(){function n(n,r){var u=M.call(this,n,r),o=t(u[0]);return N=o,e(o,0),i(o),g(o,0),m(o),u}function t(n){var e={t:n,prelim:0,mod:0,shift:0,change:0,msel:0,mser:0};if(n.x=0,n.y=0,w)e.x_size=1,e.y_size=1;else if("object"==typeof S)e.x_size=S[0],e.y_size=S[1];else{var r=S(n);e.x_size=r[0],e.y_size=r[1]}k&&(n.x_size=e.x_size,n.y_size=e.y_size);for(var i=[],u=n.children?n.children.length:0,o=0;oe.lowY&&(e=e.nxt);var p=i+r.prelim-(o+u.prelim);null!=_?p+=_(r.t,u.t)*N.x_size:null!=b&&(p+=r.x_size/2+u.x_size/2+b(r.t,u.t)),p>0?(o+=p,a(n,t,e.index,p)):1===t&&0===o&&0===r.num_children&&u.num_children>1&&p<0&&(o+=p,a(n,t,e.index,p));var g=f(r),d=f(u);g<=d&&null!=(r=c(r))&&(i+=r.mod),g>=d&&null!=(u=l(u))&&(o+=u.mod)}null==r&&null!=u?s(n,t,u,o):null!=r&&null==u&&h(n,t,r,i)}function a(n,t,e,r){n.children[t].mod+=r,n.children[t].msel+=r,n.children[t].mser+=r,d(n,t,e,r)}function l(n){return 0==n.num_children?n.tl:n.children[0]}function c(n){return 0==n.num_children?n.tr:n.children[n.num_children-1]}function f(n){return n.t.y+n.y_size}function s(n,t,e,r){var i=n.children[0].el;i.tl=e;var u=r-e.mod-n.children[0].msel;i.mod+=u,i.prelim-=u,n.children[0].el=n.children[t].el,n.children[0].msel=n.children[t].msel}function h(n,t,e,r){var i=n.children[t].er;i.tr=e;var u=r-e.mod-n.children[t].mser;i.mod+=u,i.prelim-=u,n.children[t].er=n.children[t-1].er,n.children[t].mser=n.children[t-1].mser}function p(n){n.prelim=(n.children[0].prelim+n.children[0].mod-n.children[0].x_size/2+n.children[n.num_children-1].mod+n.children[n.num_children-1].prelim+n.children[n.num_children-1].x_size/2)/2}function g(n,t){t+=n.mod,n.t.x=n.prelim+t,v(n);for(var e=0;e=e.lowY;)e=e.nxt;return{lowY:n,index:t,nxt:e}}function m(n){if(null!=w){for(var t,e=n,r=n,i=n,u=[n];t=u.pop();)(f=t.t).xr.t.x&&(r=t),f.depth>i.t.depth&&(i=t),t.children&&(u=u.concat(t.children));var o=null==_?.5:_(e.t,r.t)/2,a=o-e.t.x,l=w[0]/(r.t.x+o+a),c=w[1]/(i.t.depth>0?i.t.depth:1);for(u=[n];t=u.pop();){var f=t.t;f.x=(f.x+a)*l,f.y=f.depth*c,k&&(f.x_size*=l,f.y_size*=c),t.children&&(u=u.concat(t.children))}}else x(n,-n.t.x)}function x(n,t){n.t.x+=t;for(var e=0;e0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,d))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,d,c,!1),d=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,d,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oi&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++u1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=to.random.normal.apply(to,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=to.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;es?0:1;if(c=To)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,d,v,y,m,x,M,_,b,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(v=u===bl?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(v/c*Math.sin(y))),n&&(N=tn(v/n*Math.sin(y)))),c){m=c*Math.cos(f+E),x=c*Math.sin(f+E),M=c*Math.cos(s-E),_=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Lo?0:1;if(E&&su(m,x,M,_)===p^C){var z=(f+s)/2;m=c*Math.cos(z),x=c*Math.sin(z),M=_=null}}else m=x=0;if(n){b=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Lo?0:1;if(N&&su(b,w,S,k)===1-p^L){var q=(f+s)/2;b=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else b=w=0;if(h>Co&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){d=nLo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=xe,o=Me,a=Pu,l=lu,c=cu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},to.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return"M"+(l=l.map(r))[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=xe,e=Me,r=ju;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},to.svg.diagonal.radial=function(){var n=to.svg.diagonal(),t=ju,e=n.projection;return n.projection=function(n){return arguments.length?e(Uu(t=n)):t},n},to.svg.symbol=function(){function n(n,r){return(El.get(t.call(this,n,r))||Ou)(e.call(this,n,r))}var t=Hu,e=Fu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var El=to.map({circle:Ou,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Cl)),e=t*Cl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Al),e=t*Al/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Al),e=t*Al/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});to.svg.symbolTypes=El.keys();var Al=Math.sqrt(3),Cl=Math.tan(30*Do);_o.transition=function(n){for(var t,e,r=zl||++Rl,i=Xu(n),u=[],o=Ll||{time:Date.now(),ease:kr,delay:0,duration:250},a=-1,l=this.length;++arect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==to.event.keyCode&&(C||(x=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function d(){32==to.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function v(){var n=to.mouse(_),t=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(to.event.altKey?(x||(x=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]1)for(var r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return u.default.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(t={onlyLeaves:!1,circularReference:"leaf",search:"dfsPreOrder",iterateOverObject:!0,skipIteration:function(){return!1}},void 0!==o.onlyLeaves&&(t.onlyLeaves=o.onlyLeaves),void 0!==o.circularReference&&(t.circularReference=o.circularReference),void 0!==o.iterateOverObject&&(t.iterateOverObject=o.iterateOverObject),void 0!==o.skipIteration&&(t.skipIteration=o.skipIteration),void 0===o.search){i.next=9;break}if(o.search in s){i.next=8;break}throw new Error("The search algorithm "+o.search+" is incorrect.");case 8:t.search=o.search;case 9:return r=new l.default(e,t),n=(0,d.default)(t.circularReference),i.delegateYield(s[t.search](r,t.onlyLeaves,n),"t0",12);case 12:case"end":return i.stop()}},_[0],this)}Object.defineProperty(r,"__esModule",{value:!0});var a=e("babel-runtime/regenerator"),u=o(a);r.default=i;var c=e("./search"),s=n(c),f=e("./root-node"),l=o(f),p=e("./seen"),d=o(p),_=[i].map(u.default.mark)},{"./root-node":5,"./search":6,"./seen":7,"babel-runtime/regenerator":115}],3:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){var t;return l.default.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:r.t0=l.default.keys(e);case 1:if((r.t1=r.t0()).done){r.next=7;break}return t=r.t1.value,r.next=5,[t,e[t]];case 5:r.next=1;break;case 7:case"end":return r.stop()}},p[0],this)}function i(e){var t;return l.default.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:t=0;case 1:if(!(tf;)if(u=c[f++],u!=u)return!0}else for(;s>f;f++)if((e||f in c)&&c[f]===r)return e||f||0;return!e&&-1}}},{"./_to-index":88,"./_to-iobject":90,"./_to-length":91}],39:[function(e,t,r){var n=e("./_cof"),o=e("./_wks")("toStringTag"),i="Arguments"==n(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};t.exports=function(e){var t,r,u;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=a(t=Object(e),o))?r:i?n(t):"Object"==(u=n(t))&&"function"==typeof t.callee?"Arguments":u}},{"./_cof":40,"./_wks":97}],40:[function(e,t,r){var n={}.toString;t.exports=function(e){return n.call(e).slice(8,-1)}},{}],41:[function(e,t,r){var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},{}],42:[function(e,t,r){"use strict";var n=e("./_object-dp"),o=e("./_property-desc");t.exports=function(e,t,r){t in e?n.f(e,t,o(0,r)):e[t]=r}},{"./_object-dp":70,"./_property-desc":81}],43:[function(e,t,r){var n=e("./_a-function");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},{"./_a-function":35}],44:[function(e,t,r){t.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},{}],45:[function(e,t,r){t.exports=!e("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":50}],46:[function(e,t,r){var n=e("./_is-object"),o=e("./_global").document,i=n(o)&&n(o.createElement);t.exports=function(e){return i?o.createElement(e):{}}},{"./_global":51,"./_is-object":59}],47:[function(e,t,r){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],48:[function(e,t,r){var n=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie");t.exports=function(e){var t=n(e),r=o.f;if(r)for(var a,u=r(e),c=i.f,s=0;u.length>s;)c.call(e,a=u[s++])&&t.push(a);return t}},{"./_object-gops":75,"./_object-keys":78,"./_object-pie":79}],49:[function(e,t,r){var n=e("./_global"),o=e("./_core"),i=e("./_ctx"),a=e("./_hide"),u="prototype",c=function(e,t,r){var s,f,l,p=e&c.F,d=e&c.G,_=e&c.S,b=e&c.P,h=e&c.B,y=e&c.W,v=d?o:o[t]||(o[t]={}),m=v[u],g=d?n:_?n[t]:(n[t]||{})[u];d&&(r=t);for(s in r)f=!p&&g&&void 0!==g[s],f&&s in v||(l=f?g[s]:r[s],v[s]=d&&"function"!=typeof g[s]?r[s]:h&&f?i(l,n):y&&g[s]==l?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t[u]=e[u],t}(l):b&&"function"==typeof l?i(Function.call,l):l,b&&((v.virtual||(v.virtual={}))[s]=l,e&c.R&&m&&!m[s]&&a(m,s,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},{"./_core":41,"./_ctx":43,"./_global":51,"./_hide":53}],50:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],51:[function(e,t,r){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},{}],52:[function(e,t,r){var n={}.hasOwnProperty;t.exports=function(e,t){return n.call(e,t)}},{}],53:[function(e,t,r){var n=e("./_object-dp"),o=e("./_property-desc");t.exports=e("./_descriptors")?function(e,t,r){return n.f(e,t,o(1,r))}:function(e,t,r){return e[t]=r,e}},{"./_descriptors":45,"./_object-dp":70,"./_property-desc":81}],54:[function(e,t,r){t.exports=e("./_global").document&&document.documentElement},{"./_global":51}],55:[function(e,t,r){t.exports=!e("./_descriptors")&&!e("./_fails")(function(){return 7!=Object.defineProperty(e("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":45,"./_dom-create":46,"./_fails":50}],56:[function(e,t,r){var n=e("./_cof");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},{"./_cof":40}],57:[function(e,t,r){var n=e("./_iterators"),o=e("./_wks")("iterator"),i=Array.prototype;t.exports=function(e){return void 0!==e&&(n.Array===e||i[o]===e)}},{"./_iterators":65,"./_wks":97}],58:[function(e,t,r){var n=e("./_cof");t.exports=Array.isArray||function(e){return"Array"==n(e)}},{"./_cof":40}],59:[function(e,t,r){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],60:[function(e,t,r){var n=e("./_an-object");t.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},{"./_an-object":37}],61:[function(e,t,r){"use strict";var n=e("./_object-create"),o=e("./_property-desc"),i=e("./_set-to-string-tag"),a={};e("./_hide")(a,e("./_wks")("iterator"),function(){return this}),t.exports=function(e,t,r){e.prototype=n(a,{next:o(1,r)}),i(e,t+" Iterator")}},{"./_hide":53,"./_object-create":69,"./_property-desc":81,"./_set-to-string-tag":84,"./_wks":97}],62:[function(e,t,r){"use strict";var n=e("./_library"),o=e("./_export"),i=e("./_redefine"),a=e("./_hide"),u=e("./_has"),c=e("./_iterators"),s=e("./_iter-create"),f=e("./_set-to-string-tag"),l=e("./_object-gpo"),p=e("./_wks")("iterator"),d=!([].keys&&"next"in[].keys()),_="@@iterator",b="keys",h="values",y=function(){return this};t.exports=function(e,t,r,v,m,g,j){s(r,t,v);var w,x,k,O=function(e){if(!d&&e in M)return M[e];switch(e){case b:return function(){return new r(this,e)};case h:return function(){return new r(this,e)}}return function(){return new r(this,e)}},E=t+" Iterator",S=m==h,L=!1,M=e.prototype,A=M[p]||M[_]||m&&M[m],P=A||O(m),T=m?S?O("entries"):P:void 0,F="Array"==t?M.entries||A:A;if(F&&(k=l(F.call(new e)),k!==Object.prototype&&(f(k,E,!0),n||u(k,p)||a(k,p,y))),S&&A&&A.name!==h&&(L=!0,P=function(){return A.call(this)}),n&&!j||!d&&!L&&M[p]||a(M,p,P),c[t]=P,c[E]=y,m)if(w={values:S?P:O(h),keys:g?P:O(b),entries:T},j)for(x in w)x in M||i(M,x,w[x]);else o(o.P+o.F*(d||L),t,w);return w}},{"./_export":49,"./_has":52,"./_hide":53,"./_iter-create":61,"./_iterators":65,"./_library":67,"./_object-gpo":76,"./_redefine":82,"./_set-to-string-tag":84,"./_wks":97}],63:[function(e,t,r){var n=e("./_wks")("iterator"),o=!1;try{var i=[7][n]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}t.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var i=[7],a=i[n]();a.next=function(){return{done:r=!0}},i[n]=function(){return a},e(i)}catch(e){}return r}},{"./_wks":97}],64:[function(e,t,r){t.exports=function(e,t){return{value:t,done:!!e}}},{}],65:[function(e,t,r){t.exports={}},{}],66:[function(e,t,r){var n=e("./_object-keys"),o=e("./_to-iobject");t.exports=function(e,t){for(var r,i=o(e),a=n(i),u=a.length,c=0;u>c;)if(i[r=a[c++]]===t)return r}},{"./_object-keys":78,"./_to-iobject":90}],67:[function(e,t,r){t.exports=!0},{}],68:[function(e,t,r){var n=e("./_uid")("meta"),o=e("./_is-object"),i=e("./_has"),a=e("./_object-dp").f,u=0,c=Object.isExtensible||function(){return!0},s=!e("./_fails")(function(){return c(Object.preventExtensions({}))}),f=function(e){a(e,n,{value:{i:"O"+ ++u,w:{}}})},l=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,n)){if(!c(e))return"F";if(!t)return"E";f(e)}return e[n].i},p=function(e,t){if(!i(e,n)){if(!c(e))return!0;if(!t)return!1;f(e)}return e[n].w},d=function(e){return s&&_.NEED&&c(e)&&!i(e,n)&&f(e),e},_=t.exports={KEY:n,NEED:!1,fastKey:l,getWeak:p,onFreeze:d}},{"./_fails":50,"./_has":52,"./_is-object":59,"./_object-dp":70,"./_uid":94}],69:[function(e,t,r){var n=e("./_an-object"),o=e("./_object-dps"),i=e("./_enum-bug-keys"),a=e("./_shared-key")("IE_PROTO"),u=function(){},c="prototype",s=function(){var t,r=e("./_dom-create")("iframe"),n=i.length,o="<",a=">";for(r.style.display="none",e("./_html").appendChild(r),r.src="javascript:",t=r.contentWindow.document,t.open(),t.write(o+"script"+a+"document.F=Object"+o+"/script"+a),t.close(),s=t.F;n--;)delete s[c][i[n]];return s()};t.exports=Object.create||function(e,t){var r;return null!==e?(u[c]=n(e),r=new u,u[c]=null,r[a]=e):r=s(),void 0===t?r:o(r,t)}},{"./_an-object":37,"./_dom-create":46,"./_enum-bug-keys":47,"./_html":54,"./_object-dps":71,"./_shared-key":85}],70:[function(e,t,r){var n=e("./_an-object"),o=e("./_ie8-dom-define"),i=e("./_to-primitive"),a=Object.defineProperty;r.f=e("./_descriptors")?Object.defineProperty:function(e,t,r){if(n(e),t=i(t,!0),n(r),o)try{return a(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},{"./_an-object":37,"./_descriptors":45,"./_ie8-dom-define":55,"./_to-primitive":93}],71:[function(e,t,r){var n=e("./_object-dp"),o=e("./_an-object"),i=e("./_object-keys");t.exports=e("./_descriptors")?Object.defineProperties:function(e,t){o(e);for(var r,a=i(t),u=a.length,c=0;u>c;)n.f(e,r=a[c++],t[r]);return e}},{"./_an-object":37,"./_descriptors":45,"./_object-dp":70,"./_object-keys":78}],72:[function(e,t,r){ +var n=e("./_object-pie"),o=e("./_property-desc"),i=e("./_to-iobject"),a=e("./_to-primitive"),u=e("./_has"),c=e("./_ie8-dom-define"),s=Object.getOwnPropertyDescriptor;r.f=e("./_descriptors")?s:function(e,t){if(e=i(e),t=a(t,!0),c)try{return s(e,t)}catch(e){}if(u(e,t))return o(!n.f.call(e,t),e[t])}},{"./_descriptors":45,"./_has":52,"./_ie8-dom-define":55,"./_object-pie":79,"./_property-desc":81,"./_to-iobject":90,"./_to-primitive":93}],73:[function(e,t,r){var n=e("./_to-iobject"),o=e("./_object-gopn").f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(e){try{return o(e)}catch(e){return a.slice()}};t.exports.f=function(e){return a&&"[object Window]"==i.call(e)?u(e):o(n(e))}},{"./_object-gopn":74,"./_to-iobject":90}],74:[function(e,t,r){var n=e("./_object-keys-internal"),o=e("./_enum-bug-keys").concat("length","prototype");r.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},{"./_enum-bug-keys":47,"./_object-keys-internal":77}],75:[function(e,t,r){r.f=Object.getOwnPropertySymbols},{}],76:[function(e,t,r){var n=e("./_has"),o=e("./_to-object"),i=e("./_shared-key")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(e){return e=o(e),n(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},{"./_has":52,"./_shared-key":85,"./_to-object":92}],77:[function(e,t,r){var n=e("./_has"),o=e("./_to-iobject"),i=e("./_array-includes")(!1),a=e("./_shared-key")("IE_PROTO");t.exports=function(e,t){var r,u=o(e),c=0,s=[];for(r in u)r!=a&&n(u,r)&&s.push(r);for(;t.length>c;)n(u,r=t[c++])&&(~i(s,r)||s.push(r));return s}},{"./_array-includes":38,"./_has":52,"./_shared-key":85,"./_to-iobject":90}],78:[function(e,t,r){var n=e("./_object-keys-internal"),o=e("./_enum-bug-keys");t.exports=Object.keys||function(e){return n(e,o)}},{"./_enum-bug-keys":47,"./_object-keys-internal":77}],79:[function(e,t,r){r.f={}.propertyIsEnumerable},{}],80:[function(e,t,r){var n=e("./_export"),o=e("./_core"),i=e("./_fails");t.exports=function(e,t){var r=(o.Object||{})[e]||Object[e],a={};a[e]=t(r),n(n.S+n.F*i(function(){r(1)}),"Object",a)}},{"./_core":41,"./_export":49,"./_fails":50}],81:[function(e,t,r){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],82:[function(e,t,r){t.exports=e("./_hide")},{"./_hide":53}],83:[function(e,t,r){var n=e("./_is-object"),o=e("./_an-object"),i=function(e,t){if(o(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,r,n){try{n=e("./_ctx")(Function.call,e("./_object-gopd").f(Object.prototype,"__proto__").set,2),n(t,[]),r=!(t instanceof Array)}catch(e){r=!0}return function(e,t){return i(e,t),r?e.__proto__=t:n(e,t),e}}({},!1):void 0),check:i}},{"./_an-object":37,"./_ctx":43,"./_is-object":59,"./_object-gopd":72}],84:[function(e,t,r){var n=e("./_object-dp").f,o=e("./_has"),i=e("./_wks")("toStringTag");t.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},{"./_has":52,"./_object-dp":70,"./_wks":97}],85:[function(e,t,r){var n=e("./_shared")("keys"),o=e("./_uid");t.exports=function(e){return n[e]||(n[e]=o(e))}},{"./_shared":86,"./_uid":94}],86:[function(e,t,r){var n=e("./_global"),o="__core-js_shared__",i=n[o]||(n[o]={});t.exports=function(e){return i[e]||(i[e]={})}},{"./_global":51}],87:[function(e,t,r){var n=e("./_to-integer"),o=e("./_defined");t.exports=function(e){return function(t,r){var i,a,u=String(o(t)),c=n(r),s=u.length;return c<0||c>=s?e?"":void 0:(i=u.charCodeAt(c),i<55296||i>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?e?u.charAt(c):i:e?u.slice(c,c+2):(i-55296<<10)+(a-56320)+65536)}}},{"./_defined":44,"./_to-integer":89}],88:[function(e,t,r){var n=e("./_to-integer"),o=Math.max,i=Math.min;t.exports=function(e,t){return e=n(e),e<0?o(e+t,0):i(e,t)}},{"./_to-integer":89}],89:[function(e,t,r){var n=Math.ceil,o=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?o:n)(e)}},{}],90:[function(e,t,r){var n=e("./_iobject"),o=e("./_defined");t.exports=function(e){return n(o(e))}},{"./_defined":44,"./_iobject":56}],91:[function(e,t,r){var n=e("./_to-integer"),o=Math.min;t.exports=function(e){return e>0?o(n(e),9007199254740991):0}},{"./_to-integer":89}],92:[function(e,t,r){var n=e("./_defined");t.exports=function(e){return Object(n(e))}},{"./_defined":44}],93:[function(e,t,r){var n=e("./_is-object");t.exports=function(e,t){if(!n(e))return e;var r,o;if(t&&"function"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if("function"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(!t&&"function"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":59}],94:[function(e,t,r){var n=0,o=Math.random();t.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+o).toString(36))}},{}],95:[function(e,t,r){var n=e("./_global"),o=e("./_core"),i=e("./_library"),a=e("./_wks-ext"),u=e("./_object-dp").f;t.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||u(t,e,{value:a.f(e)})}},{"./_core":41,"./_global":51,"./_library":67,"./_object-dp":70,"./_wks-ext":96}],96:[function(e,t,r){r.f=e("./_wks")},{"./_wks":97}],97:[function(e,t,r){var n=e("./_shared")("wks"),o=e("./_uid"),i=e("./_global").Symbol,a="function"==typeof i,u=t.exports=function(e){return n[e]||(n[e]=a&&i[e]||(a?i:o)("Symbol."+e))};u.store=n},{"./_global":51,"./_shared":86,"./_uid":94}],98:[function(e,t,r){var n=e("./_classof"),o=e("./_wks")("iterator"),i=e("./_iterators");t.exports=e("./_core").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[n(e)]}},{"./_classof":39,"./_core":41,"./_iterators":65,"./_wks":97}],99:[function(e,t,r){var n=e("./_an-object"),o=e("./core.get-iterator-method");t.exports=e("./_core").getIterator=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return n(t.call(e))}},{"./_an-object":37,"./_core":41,"./core.get-iterator-method":98}],100:[function(e,t,r){var n=e("./_classof"),o=e("./_wks")("iterator"),i=e("./_iterators");t.exports=e("./_core").isIterable=function(e){var t=Object(e);return void 0!==t[o]||"@@iterator"in t||i.hasOwnProperty(n(t))}},{"./_classof":39,"./_core":41,"./_iterators":65,"./_wks":97}],101:[function(e,t,r){"use strict";var n=e("./_ctx"),o=e("./_export"),i=e("./_to-object"),a=e("./_iter-call"),u=e("./_is-array-iter"),c=e("./_to-length"),s=e("./_create-property"),f=e("./core.get-iterator-method");o(o.S+o.F*!e("./_iter-detect")(function(e){Array.from(e)}),"Array",{from:function(e){var t,r,o,l,p=i(e),d="function"==typeof this?this:Array,_=arguments.length,b=_>1?arguments[1]:void 0,h=void 0!==b,y=0,v=f(p);if(h&&(b=n(b,_>2?arguments[2]:void 0,2)),void 0==v||d==Array&&u(v))for(t=c(p.length),r=new d(t);t>y;y++)s(r,y,h?b(p[y],y):p[y]);else for(l=v.call(p),r=new d;!(o=l.next()).done;y++)s(r,y,h?a(l,b,[o.value,y],!0):o.value);return r.length=y,r}})},{"./_create-property":42,"./_ctx":43,"./_export":49,"./_is-array-iter":57,"./_iter-call":60,"./_iter-detect":63,"./_to-length":91,"./_to-object":92,"./core.get-iterator-method":98}],102:[function(e,t,r){"use strict";var n=e("./_add-to-unscopables"),o=e("./_iter-step"),i=e("./_iterators"),a=e("./_to-iobject");t.exports=e("./_iter-define")(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,r):"values"==t?o(0,e[r]):o(0,[r,e[r]])},"values"),i.Arguments=i.Array,n("keys"),n("values"),n("entries")},{"./_add-to-unscopables":36,"./_iter-define":62,"./_iter-step":64,"./_iterators":65,"./_to-iobject":90}],103:[function(e,t,r){var n=e("./_export");n(n.S,"Object",{create:e("./_object-create")})},{"./_export":49,"./_object-create":69}],104:[function(e,t,r){var n=e("./_export");n(n.S+n.F*!e("./_descriptors"),"Object",{defineProperty:e("./_object-dp").f})},{"./_descriptors":45,"./_export":49,"./_object-dp":70}],105:[function(e,t,r){var n=e("./_to-object"),o=e("./_object-gpo");e("./_object-sap")("getPrototypeOf",function(){return function(e){return o(n(e))}})},{"./_object-gpo":76,"./_object-sap":80,"./_to-object":92}],106:[function(e,t,r){var n=e("./_export");n(n.S,"Object",{setPrototypeOf:e("./_set-proto").set})},{"./_export":49,"./_set-proto":83}],107:[function(e,t,r){},{}],108:[function(e,t,r){"use strict";var n=e("./_string-at")(!0);e("./_iter-define")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},{"./_iter-define":62,"./_string-at":87}],109:[function(e,t,r){"use strict";var n=e("./_global"),o=e("./_has"),i=e("./_descriptors"),a=e("./_export"),u=e("./_redefine"),c=e("./_meta").KEY,s=e("./_fails"),f=e("./_shared"),l=e("./_set-to-string-tag"),p=e("./_uid"),d=e("./_wks"),_=e("./_wks-ext"),b=e("./_wks-define"),h=e("./_keyof"),y=e("./_enum-keys"),v=e("./_is-array"),m=e("./_an-object"),g=e("./_to-iobject"),j=e("./_to-primitive"),w=e("./_property-desc"),x=e("./_object-create"),k=e("./_object-gopn-ext"),O=e("./_object-gopd"),E=e("./_object-dp"),S=e("./_object-keys"),L=O.f,M=E.f,A=k.f,P=n.Symbol,T=n.JSON,F=T&&T.stringify,I="prototype",C=d("_hidden"),N=d("toPrimitive"),R={}.propertyIsEnumerable,G=f("symbol-registry"),D=f("symbols"),U=f("op-symbols"),Y=Object[I],W="function"==typeof P,B=n.QObject,q=!B||!B[I]||!B[I].findChild,J=i&&s(function(){return 7!=x(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a})?function(e,t,r){var n=L(Y,t);n&&delete Y[t],M(e,t,r),n&&e!==Y&&M(Y,t,n)}:M,K=function(e){var t=D[e]=x(P[I]);return t._k=e,t},z=W&&"symbol"==typeof P.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof P},Q=function(e,t,r){return e===Y&&Q(U,t,r),m(e),t=j(t,!0),m(r),o(D,t)?(r.enumerable?(o(e,C)&&e[C][t]&&(e[C][t]=!1),r=x(r,{enumerable:w(0,!1)})):(o(e,C)||M(e,C,w(1,{})),e[C][t]=!0),J(e,t,r)):M(e,t,r)},H=function(e,t){m(e);for(var r,n=y(t=g(t)),o=0,i=n.length;i>o;)Q(e,r=n[o++],t[r]);return e},V=function(e,t){return void 0===t?x(e):H(x(e),t)},X=function(e){var t=R.call(this,e=j(e,!0));return!(this===Y&&o(D,e)&&!o(U,e))&&(!(t||!o(this,e)||!o(D,e)||o(this,C)&&this[C][e])||t)},Z=function(e,t){if(e=g(e),t=j(t,!0),e!==Y||!o(D,t)||o(U,t)){var r=L(e,t);return!r||!o(D,t)||o(e,C)&&e[C][t]||(r.enumerable=!0),r}},$=function(e){for(var t,r=A(g(e)),n=[],i=0;r.length>i;)o(D,t=r[i++])||t==C||t==c||n.push(t);return n},ee=function(e){for(var t,r=e===Y,n=A(r?U:g(e)),i=[],a=0;n.length>a;)!o(D,t=n[a++])||r&&!o(Y,t)||i.push(D[t]);return i};W||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(r){this===Y&&t.call(U,r),o(this,C)&&o(this[C],e)&&(this[C][e]=!1),J(this,e,w(1,r))};return i&&q&&J(Y,e,{configurable:!0,set:t}),K(e)},u(P[I],"toString",function(){return this._k}),O.f=Z,E.f=Q,e("./_object-gopn").f=k.f=$,e("./_object-pie").f=X,e("./_object-gops").f=ee,i&&!e("./_library")&&u(Y,"propertyIsEnumerable",X,!0),_.f=function(e){return K(d(e))}),a(a.G+a.W+a.F*!W,{Symbol:P});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;te.length>re;)d(te[re++]);for(var te=S(d.store),re=0;te.length>re;)b(te[re++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return o(G,e+="")?G[e]:G[e]=P(e)},keyFor:function(e){if(z(e))return h(G,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){q=!0},useSimple:function(){q=!1}}),a(a.S+a.F*!W,"Object",{create:V,defineProperty:Q,defineProperties:H,getOwnPropertyDescriptor:Z,getOwnPropertyNames:$,getOwnPropertySymbols:ee}),T&&a(a.S+a.F*(!W||s(function(){var e=P();return"[null]"!=F([e])||"{}"!=F({a:e})||"{}"!=F(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!z(e)){for(var t,r,n=[e],o=1;arguments.length>o;)n.push(arguments[o++]);return t=n[1],"function"==typeof t&&(r=t),!r&&v(t)||(t=function(e,t){if(r&&(t=r.call(this,e,t)),!z(t))return t}),n[1]=t,F.apply(T,n)}}}),P[I][N]||e("./_hide")(P[I],N,P[I].valueOf),l(P,"Symbol"),l(Math,"Math",!0),l(n.JSON,"JSON",!0)},{"./_an-object":37,"./_descriptors":45,"./_enum-keys":48,"./_export":49,"./_fails":50,"./_global":51,"./_has":52,"./_hide":53,"./_is-array":58,"./_keyof":66,"./_library":67,"./_meta":68,"./_object-create":69,"./_object-dp":70,"./_object-gopd":72,"./_object-gopn":74,"./_object-gopn-ext":73,"./_object-gops":75,"./_object-keys":78,"./_object-pie":79,"./_property-desc":81,"./_redefine":82,"./_set-to-string-tag":84,"./_shared":86,"./_to-iobject":90,"./_to-primitive":93,"./_uid":94,"./_wks":97,"./_wks-define":95,"./_wks-ext":96}],110:[function(e,t,r){e("./_wks-define")("asyncIterator")},{"./_wks-define":95}],111:[function(e,t,r){e("./_wks-define")("observable")},{"./_wks-define":95}],112:[function(e,t,r){e("./es6.array.iterator");for(var n=e("./_global"),o=e("./_hide"),i=e("./_iterators"),a=e("./_wks")("toStringTag"),u=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],c=0;c<5;c++){var s=u[c],f=n[s],l=f&&f.prototype;l&&!l[a]&&o(l,a,s),i[s]=i.Array}},{"./_global":51,"./_hide":53,"./_iterators":65,"./_wks":97,"./es6.array.iterator":102}],113:[function(e,t,r){(function(r){var n="object"==typeof r?r:"object"==typeof window?window:"object"==typeof self?self:this,o=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,i=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,t.exports=e("./runtime"),o)n.regeneratorRuntime=i;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./runtime":114}],114:[function(e,t,r){(function(e,r){!function(r){"use strict";function n(e,t,r,n){var o=t&&t.prototype instanceof i?t:i,a=Object.create(o.prototype),u=new _(n||[]);return a._invoke=f(e,r,u),a}function o(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}function i(){}function a(){}function u(){}function c(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function s(t){function r(e,n,i,a){var u=o(t[e],t,n);if("throw"!==u.type){var c=u.arg,s=c.value;return s&&"object"==typeof s&&m.call(s,"__await")?Promise.resolve(s.__await).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):Promise.resolve(s).then(function(e){c.value=e,i(c)},a)}a(u.arg)}function n(e,t){function n(){return new Promise(function(n,o){r(e,t,n,o)})}return i=i?i.then(n,n):n()}"object"==typeof e&&e.domain&&(r=e.domain.bind(r));var i;this._invoke=n}function f(e,t,r){var n=O;return function(i,a){if(n===S)throw new Error("Generator is already running");if(n===L){if("throw"===i)throw a;return h()}for(r.method=i,r.arg=a;;){var u=r.delegate;if(u){var c=l(u,r);if(c){if(c===M)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===O)throw n=L,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=S;var s=o(e,t,r);if("normal"===s.type){if(n=r.done?L:E,s.arg===M)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n=L,r.method="throw",r.arg=s.arg)}}}function l(e,t){var r=e.iterator[t.method];if(r===y){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=y,l(e,t),"throw"===t.method))return M;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return M}var n=o(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,M;var i=n.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=y),t.delegate=null,M):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,M)}function p(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function d(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(p,this),this.reset(!0)}function b(e){if(e){var t=e[j];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,n=function t(){for(;++r=0;--n){var o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=m.call(o,"catchLoc"),u=m.call(o,"finallyLoc");if(a&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&m.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),d(r),M}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;d(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:b(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=y),M}}}("object"==typeof r?r:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:1}],115:[function(e,t,r){t.exports=e("regenerator-runtime")},{"regenerator-runtime":113}]},{},[2])(2)}); diff --git a/documentation/js/libs/es6-shim.min.js b/documentation/js/libs/es6-shim.min.js new file mode 100644 index 0000000..1c2d15c --- /dev/null +++ b/documentation/js/libs/es6-shim.min.js @@ -0,0 +1,11 @@ +/*! + * https://github.com/paulmillr/es6-shim + * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com) + * and contributors, MIT License + * es6-shim: v0.35.1 + * see https://github.com/paulmillr/es6-shim/blob/0.35.1/LICENSE + * Details and documentation: + * https://github.com/paulmillr/es6-shim/ + */ +(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{return e()}catch(t){return false}};var u=o(i);var f=function(){return!i(function(){Object.defineProperty({},"x",{get:function(){}})})};var s=!!Object.defineProperty&&f();var c=function foo(){}.name==="foo";var l=Function.call.bind(Array.prototype.forEach);var p=Function.call.bind(Array.prototype.reduce);var v=Function.call.bind(Array.prototype.filter);var y=Function.call.bind(Array.prototype.some);var h=function(e,t,r,n){if(!n&&t in e){return}if(s){Object.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:r})}else{e[t]=r}};var b=function(e,t,r){l(n(t),function(n){var o=t[n];h(e,n,o,!!r)})};var g=Function.call.bind(Object.prototype.toString);var d=typeof/abc/==="function"?function IsCallableSlow(e){return typeof e==="function"&&g(e)==="[object Function]"}:function IsCallableFast(e){return typeof e==="function"};var O={getter:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}Object.defineProperty(e,t,{configurable:true,enumerable:false,get:r})},proxy:function(e,t,r){if(!s){throw new TypeError("getters require true ES5 support")}var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,{configurable:n.configurable,enumerable:n.enumerable,get:function getKey(){return e[t]},set:function setKey(r){e[t]=r}})},redefine:function(e,t,r){if(s){var n=Object.getOwnPropertyDescriptor(e,t);n.value=r;Object.defineProperty(e,t,n)}else{e[t]=r}},defineByDescriptor:function(e,t,r){if(s){Object.defineProperty(e,t,r)}else if("value"in r){e[t]=r.value}},preserveToString:function(e,t){if(t&&d(t.toString)){h(e,"toString",t.toString.bind(t),true)}}};var m=Object.create||function(e,t){var r=function Prototype(){};r.prototype=e;var o=new r;if(typeof t!=="undefined"){n(t).forEach(function(e){O.defineByDescriptor(o,e,t[e])})}return o};var w=function(e,t){if(!Object.setPrototypeOf){return false}return a(function(){var r=function Subclass(t){var r=new e(t);Object.setPrototypeOf(r,Subclass.prototype);return r};Object.setPrototypeOf(r,e);r.prototype=m(e.prototype,{constructor:{value:r}});return t(r)})};var j=function(){if(typeof self!=="undefined"){return self}if(typeof window!=="undefined"){return window}if(typeof global!=="undefined"){return global}throw new Error("unable to locate global object")};var S=j();var T=S.isFinite;var I=Function.call.bind(String.prototype.indexOf);var E=Function.apply.bind(Array.prototype.indexOf);var P=Function.call.bind(Array.prototype.concat);var C=Function.call.bind(String.prototype.slice);var M=Function.call.bind(Array.prototype.push);var x=Function.apply.bind(Array.prototype.push);var N=Function.call.bind(Array.prototype.shift);var A=Math.max;var R=Math.min;var _=Math.floor;var k=Math.abs;var F=Math.exp;var L=Math.log;var D=Math.sqrt;var z=Function.call.bind(Object.prototype.hasOwnProperty);var q;var W=function(){};var G=S.Symbol||{};var H=G.species||"@@species";var V=Number.isNaN||function isNaN(e){return e!==e};var B=Number.isFinite||function isFinite(e){return typeof e==="number"&&T(e)};var $=d(Math.sign)?Math.sign:function sign(e){var t=Number(e);if(t===0){return t}if(V(t)){return t}return t<0?-1:1};var U=function isArguments(e){return g(e)==="[object Arguments]"};var J=function isArguments(e){return e!==null&&typeof e==="object"&&typeof e.length==="number"&&e.length>=0&&g(e)!=="[object Array]"&&g(e.callee)==="[object Function]"};var X=U(arguments)?U:J;var K={primitive:function(e){return e===null||typeof e!=="function"&&typeof e!=="object"},string:function(e){return g(e)==="[object String]"},regex:function(e){return g(e)==="[object RegExp]"},symbol:function(e){return typeof S.Symbol==="function"&&typeof e==="symbol"}};var Z=function overrideNative(e,t,r){var n=e[t];h(e,t,r,true);O.preserveToString(e[t],n)};var Y=typeof G==="function"&&typeof G["for"]==="function"&&K.symbol(G());var Q=K.symbol(G.iterator)?G.iterator:"_es6-shim iterator_";if(S.Set&&typeof(new S.Set)["@@iterator"]==="function"){Q="@@iterator"}if(!S.Reflect){h(S,"Reflect",{},true)}var ee=S.Reflect;var te=String;var re={Call:function Call(t,r){var n=arguments.length>2?arguments[2]:[];if(!re.IsCallable(t)){throw new TypeError(t+" is not a function")}return e(t,r,n)},RequireObjectCoercible:function(e,t){if(e==null){throw new TypeError(t||"Cannot call method on "+e)}return e},TypeIsObject:function(e){if(e===void 0||e===null||e===true||e===false){return false}return typeof e==="function"||typeof e==="object"},ToObject:function(e,t){return Object(re.RequireObjectCoercible(e,t))},IsCallable:d,IsConstructor:function(e){return re.IsCallable(e)},ToInt32:function(e){return re.ToNumber(e)>>0},ToUint32:function(e){return re.ToNumber(e)>>>0},ToNumber:function(e){if(g(e)==="[object Symbol]"){throw new TypeError("Cannot convert a Symbol value to a number")}return+e},ToInteger:function(e){var t=re.ToNumber(e);if(V(t)){return 0}if(t===0||!B(t)){return t}return(t>0?1:-1)*_(k(t))},ToLength:function(e){var t=re.ToInteger(e);if(t<=0){return 0}if(t>Number.MAX_SAFE_INTEGER){return Number.MAX_SAFE_INTEGER}return t},SameValue:function(e,t){if(e===t){if(e===0){return 1/e===1/t}return true}return V(e)&&V(t)},SameValueZero:function(e,t){return e===t||V(e)&&V(t)},IsIterable:function(e){return re.TypeIsObject(e)&&(typeof e[Q]!=="undefined"||X(e))},GetIterator:function(e){if(X(e)){return new q(e,"value")}var t=re.GetMethod(e,Q);if(!re.IsCallable(t)){throw new TypeError("value is not an iterable")}var r=re.Call(t,e);if(!re.TypeIsObject(r)){throw new TypeError("bad iterator")}return r},GetMethod:function(e,t){var r=re.ToObject(e)[t];if(r===void 0||r===null){return void 0}if(!re.IsCallable(r)){throw new TypeError("Method not callable: "+t)}return r},IteratorComplete:function(e){return!!e.done},IteratorClose:function(e,t){var r=re.GetMethod(e,"return");if(r===void 0){return}var n,o;try{n=re.Call(r,e)}catch(i){o=i}if(t){return}if(o){throw o}if(!re.TypeIsObject(n)){throw new TypeError("Iterator's return method returned a non-object.")}},IteratorNext:function(e){var t=arguments.length>1?e.next(arguments[1]):e.next();if(!re.TypeIsObject(t)){throw new TypeError("bad iterator")}return t},IteratorStep:function(e){var t=re.IteratorNext(e);var r=re.IteratorComplete(t);return r?false:t},Construct:function(e,t,r,n){var o=typeof r==="undefined"?e:r;if(!n&&ee.construct){return ee.construct(e,t,o)}var i=o.prototype;if(!re.TypeIsObject(i)){i=Object.prototype}var a=m(i);var u=re.Call(e,a,t);return re.TypeIsObject(u)?u:a},SpeciesConstructor:function(e,t){var r=e.constructor;if(r===void 0){return t}if(!re.TypeIsObject(r)){throw new TypeError("Bad constructor")}var n=r[H];if(n===void 0||n===null){return t}if(!re.IsConstructor(n)){throw new TypeError("Bad @@species")}return n},CreateHTML:function(e,t,r,n){var o=re.ToString(e);var i="<"+t;if(r!==""){var a=re.ToString(n);var u=a.replace(/"/g,""");i+=" "+r+'="'+u+'"'}var f=i+">";var s=f+o;return s+""},IsRegExp:function IsRegExp(e){if(!re.TypeIsObject(e)){return false}var t=e[G.match];if(typeof t!=="undefined"){return!!t}return K.regex(e)},ToString:function ToString(e){return te(e)}};if(s&&Y){var ne=function defineWellKnownSymbol(e){if(K.symbol(G[e])){return G[e]}var t=G["for"]("Symbol."+e);Object.defineProperty(G,e,{configurable:false,enumerable:false,writable:false,value:t});return t};if(!K.symbol(G.search)){var oe=ne("search");var ie=String.prototype.search;h(RegExp.prototype,oe,function search(e){return re.Call(ie,e,[this])});var ae=function search(e){var t=re.RequireObjectCoercible(this);if(e!==null&&typeof e!=="undefined"){var r=re.GetMethod(e,oe);if(typeof r!=="undefined"){return re.Call(r,e,[t])}}return re.Call(ie,t,[re.ToString(e)])};Z(String.prototype,"search",ae)}if(!K.symbol(G.replace)){var ue=ne("replace");var fe=String.prototype.replace;h(RegExp.prototype,ue,function replace(e,t){return re.Call(fe,e,[this,t])});var se=function replace(e,t){var r=re.RequireObjectCoercible(this);if(e!==null&&typeof e!=="undefined"){var n=re.GetMethod(e,ue);if(typeof n!=="undefined"){return re.Call(n,e,[r,t])}}return re.Call(fe,r,[re.ToString(e),t])};Z(String.prototype,"replace",se)}if(!K.symbol(G.split)){var ce=ne("split");var le=String.prototype.split;h(RegExp.prototype,ce,function split(e,t){return re.Call(le,e,[this,t])});var pe=function split(e,t){var r=re.RequireObjectCoercible(this);if(e!==null&&typeof e!=="undefined"){var n=re.GetMethod(e,ce);if(typeof n!=="undefined"){return re.Call(n,e,[r,t])}}return re.Call(le,r,[re.ToString(e),t])};Z(String.prototype,"split",pe)}var ve=K.symbol(G.match);var ye=ve&&function(){var e={};e[G.match]=function(){return 42};return"a".match(e)!==42}();if(!ve||ye){var he=ne("match");var be=String.prototype.match;h(RegExp.prototype,he,function match(e){return re.Call(be,e,[this])});var ge=function match(e){var t=re.RequireObjectCoercible(this);if(e!==null&&typeof e!=="undefined"){var r=re.GetMethod(e,he);if(typeof r!=="undefined"){return re.Call(r,e,[t])}}return re.Call(be,t,[re.ToString(e)])};Z(String.prototype,"match",ge)}}var de=function wrapConstructor(e,t,r){O.preserveToString(t,e);if(Object.setPrototypeOf){Object.setPrototypeOf(e,t)}if(s){l(Object.getOwnPropertyNames(e),function(n){if(n in W||r[n]){return}O.proxy(e,n,t)})}else{l(Object.keys(e),function(n){if(n in W||r[n]){return}t[n]=e[n]})}t.prototype=e.prototype;O.redefine(e.prototype,"constructor",t)};var Oe=function(){return this};var me=function(e){if(s&&!z(e,H)){O.getter(e,H,Oe)}};var we=function(e,t){var r=t||function iterator(){return this};h(e,Q,r);if(!e[Q]&&K.symbol(Q)){e[Q]=r}};var je=function createDataProperty(e,t,r){if(s){Object.defineProperty(e,t,{configurable:true,enumerable:true,writable:true,value:r})}else{e[t]=r}};var Se=function createDataPropertyOrThrow(e,t,r){je(e,t,r);if(!re.SameValue(e[t],r)){throw new TypeError("property is nonconfigurable")}};var Te=function(e,t,r,n){if(!re.TypeIsObject(e)){throw new TypeError("Constructor requires `new`: "+t.name)}var o=t.prototype;if(!re.TypeIsObject(o)){o=r}var i=m(o);for(var a in n){if(z(n,a)){var u=n[a];h(i,a,u,true)}}return i};if(String.fromCodePoint&&String.fromCodePoint.length!==1){var Ie=String.fromCodePoint;Z(String,"fromCodePoint",function fromCodePoint(e){return re.Call(Ie,this,arguments)})}var Ee={fromCodePoint:function fromCodePoint(e){var t=[];var r;for(var n=0,o=arguments.length;n1114111){throw new RangeError("Invalid code point "+r)}if(r<65536){M(t,String.fromCharCode(r))}else{r-=65536;M(t,String.fromCharCode((r>>10)+55296));M(t,String.fromCharCode(r%1024+56320))}}return t.join("")},raw:function raw(e){var t=re.ToObject(e,"bad callSite");var r=re.ToObject(t.raw,"bad raw value");var n=r.length;var o=re.ToLength(n);if(o<=0){return""}var i=[];var a=0;var u,f,s,c;while(a=o){break}f=a+1=Ce){throw new RangeError("repeat count must be less than infinity and not overflow maximum string size")}return Pe(t,r)},startsWith:function startsWith(e){var t=re.ToString(re.RequireObjectCoercible(this));if(re.IsRegExp(e)){throw new TypeError('Cannot call method "startsWith" with a regex')}var r=re.ToString(e);var n;if(arguments.length>1){n=arguments[1]}var o=A(re.ToInteger(n),0);return C(t,o,o+r.length)===r},endsWith:function endsWith(e){var t=re.ToString(re.RequireObjectCoercible(this));if(re.IsRegExp(e)){throw new TypeError('Cannot call method "endsWith" with a regex')}var r=re.ToString(e);var n=t.length;var o;if(arguments.length>1){o=arguments[1]}var i=typeof o==="undefined"?n:re.ToInteger(o);var a=R(A(i,0),n);return C(t,a-r.length,a)===r},includes:function includes(e){if(re.IsRegExp(e)){throw new TypeError('"includes" does not accept a RegExp')}var t=re.ToString(e);var r;if(arguments.length>1){r=arguments[1]}return I(this,t,r)!==-1},codePointAt:function codePointAt(e){var t=re.ToString(re.RequireObjectCoercible(this));var r=re.ToInteger(e);var n=t.length;if(r>=0&&r56319||i){return o}var a=t.charCodeAt(r+1);if(a<56320||a>57343){return o}return(o-55296)*1024+(a-56320)+65536}}};if(String.prototype.includes&&"a".includes("a",Infinity)!==false){Z(String.prototype,"includes",Me.includes)}if(String.prototype.startsWith&&String.prototype.endsWith){var xe=i(function(){"/a/".startsWith(/a/)});var Ne=a(function(){return"abc".startsWith("a",Infinity)===false});if(!xe||!Ne){Z(String.prototype,"startsWith",Me.startsWith);Z(String.prototype,"endsWith",Me.endsWith)}}if(Y){var Ae=a(function(){var e=/a/;e[G.match]=false;return"/a/".startsWith(e)});if(!Ae){Z(String.prototype,"startsWith",Me.startsWith)}var Re=a(function(){var e=/a/;e[G.match]=false;return"/a/".endsWith(e)});if(!Re){Z(String.prototype,"endsWith",Me.endsWith)}var _e=a(function(){var e=/a/;e[G.match]=false;return"/a/".includes(e)});if(!_e){Z(String.prototype,"includes",Me.includes)}}b(String.prototype,Me);var ke=[" \n\x0B\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003","\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028","\u2029\ufeff"].join("");var Fe=new RegExp("(^["+ke+"]+)|(["+ke+"]+$)","g");var Le=function trim(){return re.ToString(re.RequireObjectCoercible(this)).replace(Fe,"")};var De=["\x85","\u200b","\ufffe"].join("");var ze=new RegExp("["+De+"]","g");var qe=/^[\-+]0x[0-9a-f]+$/i;var We=De.trim().length!==De.length;h(String.prototype,"trim",Le,We);var Ge=function(e){return{value:e,done:arguments.length===0}};var He=function(e){re.RequireObjectCoercible(e);this._s=re.ToString(e);this._i=0};He.prototype.next=function(){var e=this._s;var t=this._i;if(typeof e==="undefined"||t>=e.length){this._s=void 0;return Ge()}var r=e.charCodeAt(t);var n,o;if(r<55296||r>56319||t+1===e.length){o=1}else{n=e.charCodeAt(t+1);o=n<56320||n>57343?1:2}this._i=t+o;return Ge(e.substr(t,o))};we(He.prototype);we(String.prototype,function(){return new He(this)});var Ve={from:function from(e){var r=this;var n;if(arguments.length>1){n=arguments[1]}var o,i;if(typeof n==="undefined"){o=false}else{if(!re.IsCallable(n)){throw new TypeError("Array.from: when provided, the second argument must be a function")}if(arguments.length>2){i=arguments[2]}o=true}var a=typeof(X(e)||re.GetMethod(e,Q))!=="undefined";var u,f,s;if(a){f=re.IsConstructor(r)?Object(new r):[];var c=re.GetIterator(e);var l,p;s=0;while(true){l=re.IteratorStep(c);if(l===false){break}p=l.value;try{if(o){p=typeof i==="undefined"?n(p,s):t(n,i,p,s)}f[s]=p}catch(v){re.IteratorClose(c,true);throw v}s+=1}u=s}else{var y=re.ToObject(e);u=re.ToLength(y.length);f=re.IsConstructor(r)?Object(new r(u)):new Array(u);var h;for(s=0;s2){f=arguments[2]}var s=typeof f==="undefined"?n:re.ToInteger(f);var c=s<0?A(n+s,0):R(s,n);var l=R(c-u,n-a);var p=1;if(u0){if(u in r){r[a]=r[u]}else{delete r[a]}u+=p;a+=p;l-=1}return r},fill:function fill(e){var t;if(arguments.length>1){t=arguments[1]}var r;if(arguments.length>2){r=arguments[2]}var n=re.ToObject(this);var o=re.ToLength(n.length);t=re.ToInteger(typeof t==="undefined"?0:t);r=re.ToInteger(typeof r==="undefined"?o:r);var i=t<0?A(o+t,0):R(t,o);var a=r<0?o+r:r;for(var u=i;u1?arguments[1]:null;for(var i=0,a;i1?arguments[1]:null;for(var i=0;i1&&typeof arguments[1]!=="undefined"){return re.Call(Ze,this,arguments)}else{return t(Ze,this,e)}})}var Ye=-(Math.pow(2,32)-1);var Qe=function(e,r){var n={length:Ye};n[r?(n.length>>>0)-1:0]=true;return a(function(){t(e,n,function(){throw new RangeError("should not reach here")},[]);return true})};if(!Qe(Array.prototype.forEach)){var et=Array.prototype.forEach;Z(Array.prototype,"forEach",function forEach(e){return re.Call(et,this.length>=0?this:[],arguments)},true)}if(!Qe(Array.prototype.map)){var tt=Array.prototype.map;Z(Array.prototype,"map",function map(e){return re.Call(tt,this.length>=0?this:[],arguments)},true)}if(!Qe(Array.prototype.filter)){var rt=Array.prototype.filter;Z(Array.prototype,"filter",function filter(e){return re.Call(rt,this.length>=0?this:[],arguments)},true)}if(!Qe(Array.prototype.some)){var nt=Array.prototype.some;Z(Array.prototype,"some",function some(e){return re.Call(nt,this.length>=0?this:[],arguments)},true)}if(!Qe(Array.prototype.every)){var ot=Array.prototype.every;Z(Array.prototype,"every",function every(e){return re.Call(ot,this.length>=0?this:[],arguments)},true)}if(!Qe(Array.prototype.reduce)){var it=Array.prototype.reduce;Z(Array.prototype,"reduce",function reduce(e){return re.Call(it,this.length>=0?this:[],arguments)},true)}if(!Qe(Array.prototype.reduceRight,true)){var at=Array.prototype.reduceRight;Z(Array.prototype,"reduceRight",function reduceRight(e){return re.Call(at,this.length>=0?this:[],arguments)},true)}var ut=Number("0o10")!==8;var ft=Number("0b10")!==2;var st=y(De,function(e){return Number(e+0+e)===0});if(ut||ft||st){var ct=Number;var lt=/^0b[01]+$/i;var pt=/^0o[0-7]+$/i;var vt=lt.test.bind(lt);var yt=pt.test.bind(pt);var ht=function(e){var t;if(typeof e.valueOf==="function"){t=e.valueOf();if(K.primitive(t)){return t}}if(typeof e.toString==="function"){t=e.toString();if(K.primitive(t)){return t}}throw new TypeError("No default value")};var bt=ze.test.bind(ze);var gt=qe.test.bind(qe);var dt=function(){var e=function Number(t){var r;if(arguments.length>0){r=K.primitive(t)?t:ht(t,"number")}else{r=0}if(typeof r==="string"){r=re.Call(Le,r);if(vt(r)){r=parseInt(C(r,2),2)}else if(yt(r)){r=parseInt(C(r,2),8)}else if(bt(r)||gt(r)){r=NaN}}var n=this;var o=a(function(){ct.prototype.valueOf.call(n);return true});if(n instanceof e&&!o){return new ct(r)}return ct(r)};return e}();de(ct,dt,{});b(dt,{NaN:ct.NaN,MAX_VALUE:ct.MAX_VALUE,MIN_VALUE:ct.MIN_VALUE,NEGATIVE_INFINITY:ct.NEGATIVE_INFINITY,POSITIVE_INFINITY:ct.POSITIVE_INFINITY});Number=dt;O.redefine(S,"Number",dt)}var Ot=Math.pow(2,53)-1;b(Number,{MAX_SAFE_INTEGER:Ot,MIN_SAFE_INTEGER:-Ot,EPSILON:2.220446049250313e-16,parseInt:S.parseInt,parseFloat:S.parseFloat,isFinite:B,isInteger:function isInteger(e){return B(e)&&re.ToInteger(e)===e},isSafeInteger:function isSafeInteger(e){return Number.isInteger(e)&&k(e)<=Number.MAX_SAFE_INTEGER},isNaN:V});h(Number,"parseInt",S.parseInt,Number.parseInt!==S.parseInt);if(![,1].find(function(e,t){return t===0})){Z(Array.prototype,"find",$e.find)}if([,1].findIndex(function(e,t){return t===0})!==0){Z(Array.prototype,"findIndex",$e.findIndex)}var mt=Function.bind.call(Function.bind,Object.prototype.propertyIsEnumerable);var wt=function ensureEnumerable(e,t){if(s&&mt(e,t)){Object.defineProperty(e,t,{enumerable:false})}};var jt=function sliceArgs(){var e=Number(this);var t=arguments.length;var r=t-e;var n=new Array(r<0?0:r);for(var o=e;o1){return NaN}if(t===-1){return-Infinity}if(t===1){return Infinity}if(t===0){return t}return.5*L((1+t)/(1-t))},cbrt:function cbrt(e){var t=Number(e);if(t===0){return t}var r=t<0;var n;if(r){t=-t}if(t===Infinity){n=Infinity}else{n=F(L(t)/3);n=(t/(n*n)+2*n)/3}return r?-n:n},clz32:function clz32(e){var t=Number(e);var r=re.ToUint32(t);if(r===0){return 32}return Or?re.Call(Or,r):31-_(L(r+.5)*gr)},cosh:function cosh(e){var t=Number(e);if(t===0){return 1}if(V(t)){return NaN}if(!T(t)){return Infinity}if(t<0){t=-t}if(t>21){return F(t)/2}return(F(t)+F(-t))/2},expm1:function expm1(e){var t=Number(e);if(t===-Infinity){return-1}if(!T(t)||t===0){return t}if(k(t)>.5){return F(t)-1}var r=t;var n=0;var o=1;while(n+r!==n){n+=r;o+=1;r*=t/o}return n},hypot:function hypot(e,t){var r=0;var n=0;for(var o=0;o0?i/n*(i/n):i}}return n===Infinity?Infinity:n*D(r)},log2:function log2(e){return L(e)*gr},log10:function log10(e){return L(e)*dr},log1p:function log1p(e){var t=Number(e);if(t<-1||V(t)){return NaN}if(t===0||t===Infinity){return t}if(t===-1){return-Infinity}return 1+t-1===0?t:t*(L(1+t)/(1+t-1))},sign:$,sinh:function sinh(e){var t=Number(e);if(!T(t)||t===0){return t}if(k(t)<1){return(Math.expm1(t)-Math.expm1(-t))/2}return(F(t-1)-F(-t-1))*br/2},tanh:function tanh(e){var t=Number(e);if(V(t)||t===0){return t}if(t>=20){return 1}if(t<=-20){return-1}return(Math.expm1(t)-Math.expm1(-t))/(F(t)+F(-t))},trunc:function trunc(e){var t=Number(e);return t<0?-_(-t):_(t)},imul:function imul(e,t){var r=re.ToUint32(e);var n=re.ToUint32(t);var o=r>>>16&65535;var i=r&65535;var a=n>>>16&65535;var u=n&65535;return i*u+(o*u+i*a<<16>>>0)|0},fround:function fround(e){var t=Number(e);if(t===0||t===Infinity||t===-Infinity||V(t)){return t}var r=$(t);var n=k(t);if(nyr||V(i)){return r*Infinity}return r*i}};b(Math,mr);h(Math,"log1p",mr.log1p,Math.log1p(-1e-17)!==-1e-17);h(Math,"asinh",mr.asinh,Math.asinh(-1e7)!==-Math.asinh(1e7));h(Math,"tanh",mr.tanh,Math.tanh(-2e-17)!==-2e-17);h(Math,"acosh",mr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"cbrt",mr.cbrt,Math.abs(1-Math.cbrt(1e-300)/1e-100)/Number.EPSILON>8);h(Math,"sinh",mr.sinh,Math.sinh(-2e-17)!==-2e-17);var wr=Math.expm1(10);h(Math,"expm1",mr.expm1,wr>22025.465794806718||wr<22025.465794806718);var jr=Math.round;var Sr=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Tr=lr+1;var Ir=2*lr-1;var Er=[Tr,Ir].every(function(e){return Math.round(e)===e});h(Math,"round",function round(e){var t=_(e);var r=t===-1?-0:t+1;return e-t<.5?t:r},!Sr||!Er);O.preserveToString(Math.round,jr);var Pr=Math.imul;if(Math.imul(4294967295,5)!==-5){Math.imul=mr.imul;O.preserveToString(Math.imul,Pr)}if(Math.imul.length!==2){Z(Math,"imul",function imul(e,t){return re.Call(Pr,Math,arguments); +})}var Cr=function(){var e=S.setTimeout;if(typeof e!=="function"&&typeof e!=="object"){return}re.IsPromise=function(e){if(!re.TypeIsObject(e)){return false}if(typeof e._promise==="undefined"){return false}return true};var r=function(e){if(!re.IsConstructor(e)){throw new TypeError("Bad promise constructor")}var t=this;var r=function(e,r){if(t.resolve!==void 0||t.reject!==void 0){throw new TypeError("Bad Promise implementation!")}t.resolve=e;t.reject=r};t.resolve=void 0;t.reject=void 0;t.promise=new e(r);if(!(re.IsCallable(t.resolve)&&re.IsCallable(t.reject))){throw new TypeError("Bad promise constructor")}};var n;if(typeof window!=="undefined"&&re.IsCallable(window.postMessage)){n=function(){var e=[];var t="zero-timeout-message";var r=function(r){M(e,r);window.postMessage(t,"*")};var n=function(r){if(r.source===window&&r.data===t){r.stopPropagation();if(e.length===0){return}var n=N(e);n()}};window.addEventListener("message",n,true);return r}}var o=function(){var e=S.Promise;var t=e&&e.resolve&&e.resolve();return t&&function(e){return t.then(e)}};var i=re.IsCallable(S.setImmediate)?S.setImmediate:typeof process==="object"&&process.nextTick?process.nextTick:o()||(re.IsCallable(n)?n():function(t){e(t,0)});var a=function(e){return e};var u=function(e){throw e};var f=0;var s=1;var c=2;var l=0;var p=1;var v=2;var y={};var h=function(e,t,r){i(function(){g(e,t,r)})};var g=function(e,t,r){var n,o;if(t===y){return e(r)}try{n=e(r);o=t.resolve}catch(i){n=i;o=t.reject}o(n)};var d=function(e,t){var r=e._promise;var n=r.reactionLength;if(n>0){h(r.fulfillReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o0){h(r.rejectReactionHandler0,r.reactionCapability0,t);r.fulfillReactionHandler0=void 0;r.rejectReactions0=void 0;r.reactionCapability0=void 0;if(n>1){for(var o=1,i=0;o2&&arguments[2]===y;if(b&&o===E){i=y}else{i=new r(o)}var g=re.IsCallable(e)?e:a;var d=re.IsCallable(t)?t:u;var O=n._promise;var m;if(O.state===f){if(O.reactionLength===0){O.fulfillReactionHandler0=g;O.rejectReactionHandler0=d;O.reactionCapability0=i}else{var w=3*(O.reactionLength-1);O[w+l]=g;O[w+p]=d;O[w+v]=i}O.reactionLength+=1}else if(O.state===s){m=O.result;h(g,i,m)}else if(O.state===c){m=O.result;h(d,i,m)}else{throw new TypeError("unexpected Promise state")}return i.promise}});y=new r(E);I=T.then;return E}();if(S.Promise){delete S.Promise.accept;delete S.Promise.defer;delete S.Promise.prototype.chain}if(typeof Cr==="function"){b(S,{Promise:Cr});var Mr=w(S.Promise,function(e){return e.resolve(42).then(function(){})instanceof e});var xr=!i(function(){S.Promise.reject(42).then(null,5).then(null,W)});var Nr=i(function(){S.Promise.call(3,W)});var Ar=function(e){var t=e.resolve(5);t.constructor={};var r=e.resolve(t);try{r.then(null,W).then(null,W)}catch(n){return true}return t===r}(S.Promise);var Rr=s&&function(){var e=0;var t=Object.defineProperty({},"then",{get:function(){e+=1}});Promise.resolve(t);return e===1}();var _r=function BadResolverPromise(e){var t=new Promise(e);e(3,function(){});this.then=t.then;this.constructor=BadResolverPromise};_r.prototype=Promise.prototype;_r.all=Promise.all;var kr=a(function(){return!!_r.all([1,2])});if(!Mr||!xr||!Nr||Ar||!Rr||kr){Promise=Cr;Z(S,"Promise",Cr)}if(Promise.all.length!==1){var Fr=Promise.all;Z(Promise,"all",function all(e){return re.Call(Fr,this,arguments)})}if(Promise.race.length!==1){var Lr=Promise.race;Z(Promise,"race",function race(e){return re.Call(Lr,this,arguments)})}if(Promise.resolve.length!==1){var Dr=Promise.resolve;Z(Promise,"resolve",function resolve(e){return re.Call(Dr,this,arguments)})}if(Promise.reject.length!==1){var zr=Promise.reject;Z(Promise,"reject",function reject(e){return re.Call(zr,this,arguments)})}wt(Promise,"all");wt(Promise,"race");wt(Promise,"resolve");wt(Promise,"reject");me(Promise)}var qr=function(e){var t=n(p(e,function(e,t){e[t]=true;return e},{}));return e.join(":")===t.join(":")};var Wr=qr(["z","a","bb"]);var Gr=qr(["z",1,"a","3",2]);if(s){var Hr=function fastkey(e){if(!Wr){return null}if(typeof e==="undefined"||e===null){return"^"+re.ToString(e)}else if(typeof e==="string"){return"$"+e}else if(typeof e==="number"){if(!Gr){return"n"+e}return e}else if(typeof e==="boolean"){return"b"+e}return null};var Vr=function emptyObject(){return Object.create?Object.create(null):{}};var Br=function addIterableToMap(e,n,o){if(r(o)||K.string(o)){l(o,function(e){if(!re.TypeIsObject(e)){throw new TypeError("Iterator value "+e+" is not an entry object")}n.set(e[0],e[1])})}else if(o instanceof e){t(e.prototype.forEach,o,function(e,t){n.set(t,e)})}else{var i,a;if(o!==null&&typeof o!=="undefined"){a=n.set;if(!re.IsCallable(a)){throw new TypeError("bad map")}i=re.GetIterator(o)}if(typeof i!=="undefined"){while(true){var u=re.IteratorStep(i);if(u===false){break}var f=u.value;try{if(!re.TypeIsObject(f)){throw new TypeError("Iterator value "+f+" is not an entry object")}t(a,n,f[0],f[1])}catch(s){re.IteratorClose(i,true);throw s}}}}};var $r=function addIterableToSet(e,n,o){if(r(o)||K.string(o)){l(o,function(e){n.add(e)})}else if(o instanceof e){t(e.prototype.forEach,o,function(e){n.add(e)})}else{var i,a;if(o!==null&&typeof o!=="undefined"){a=n.add;if(!re.IsCallable(a)){throw new TypeError("bad set")}i=re.GetIterator(o)}if(typeof i!=="undefined"){while(true){var u=re.IteratorStep(i);if(u===false){break}var f=u.value;try{t(a,n,f)}catch(s){re.IteratorClose(i,true);throw s}}}}};var Ur={Map:function(){var e={};var r=function MapEntry(e,t){this.key=e;this.value=t;this.next=null;this.prev=null};r.prototype.isRemoved=function isRemoved(){return this.key===e};var n=function isMap(e){return!!e._es6map};var o=function requireMapSlot(e,t){if(!re.TypeIsObject(e)||!n(e)){throw new TypeError("Method Map.prototype."+t+" called on incompatible receiver "+re.ToString(e))}};var i=function MapIterator(e,t){o(e,"[[MapIterator]]");this.head=e._head;this.i=this.head;this.kind=t};i.prototype={next:function next(){var e=this.i;var t=this.kind;var r=this.head;if(typeof this.i==="undefined"){return Ge()}while(e.isRemoved()&&e!==r){e=e.prev}var n;while(e.next!==r){e=e.next;if(!e.isRemoved()){if(t==="key"){n=e.key}else if(t==="value"){n=e.value}else{n=[e.key,e.value]}this.i=e;return Ge(n)}}this.i=void 0;return Ge()}};we(i.prototype);var a;var u=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}if(this&&this._es6map){throw new TypeError("Bad construction")}var e=Te(this,Map,a,{_es6map:true,_head:null,_storage:Vr(),_size:0});var t=new r(null,null);t.next=t.prev=t;e._head=t;if(arguments.length>0){Br(Map,e,arguments[0])}return e};a=u.prototype;O.getter(a,"size",function(){if(typeof this._size==="undefined"){throw new TypeError("size method called on incompatible Map")}return this._size});b(a,{get:function get(e){o(this,"get");var t=Hr(e);if(t!==null){var r=this._storage[t];if(r){return r.value}else{return}}var n=this._head;var i=n;while((i=i.next)!==n){if(re.SameValueZero(i.key,e)){return i.value}}},has:function has(e){o(this,"has");var t=Hr(e);if(t!==null){return typeof this._storage[t]!=="undefined"}var r=this._head;var n=r;while((n=n.next)!==r){if(re.SameValueZero(n.key,e)){return true}}return false},set:function set(e,t){o(this,"set");var n=this._head;var i=n;var a;var u=Hr(e);if(u!==null){if(typeof this._storage[u]!=="undefined"){this._storage[u].value=t;return this}else{a=this._storage[u]=new r(e,t);i=n.prev}}while((i=i.next)!==n){if(re.SameValueZero(i.key,e)){i.value=t;return this}}a=a||new r(e,t);if(re.SameValue(-0,e)){a.key=+0}a.next=this._head;a.prev=this._head.prev;a.prev.next=a;a.next.prev=a;this._size+=1;return this},"delete":function(t){o(this,"delete");var r=this._head;var n=r;var i=Hr(t);if(i!==null){if(typeof this._storage[i]==="undefined"){return false}n=this._storage[i].prev;delete this._storage[i]}while((n=n.next)!==r){if(re.SameValueZero(n.key,t)){n.key=n.value=e;n.prev.next=n.next;n.next.prev=n.prev;this._size-=1;return true}}return false},clear:function clear(){o(this,"clear");this._size=0;this._storage=Vr();var t=this._head;var r=t;var n=r.next;while((r=n)!==t){r.key=r.value=e;n=r.next;r.next=r.prev=t}t.next=t.prev=t},keys:function keys(){o(this,"keys");return new i(this,"key")},values:function values(){o(this,"values");return new i(this,"value")},entries:function entries(){o(this,"entries");return new i(this,"key+value")},forEach:function forEach(e){o(this,"forEach");var r=arguments.length>1?arguments[1]:null;var n=this.entries();for(var i=n.next();!i.done;i=n.next()){if(r){t(e,r,i.value[1],i.value[0],this)}else{e(i.value[1],i.value[0],this)}}}});we(a,a.entries);return u}(),Set:function(){var e=function isSet(e){return e._es6set&&typeof e._storage!=="undefined"};var r=function requireSetSlot(t,r){if(!re.TypeIsObject(t)||!e(t)){throw new TypeError("Set.prototype."+r+" called on incompatible receiver "+re.ToString(t))}};var o;var i=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires "new"')}if(this&&this._es6set){throw new TypeError("Bad construction")}var e=Te(this,Set,o,{_es6set:true,"[[SetData]]":null,_storage:Vr()});if(!e._es6set){throw new TypeError("bad set")}if(arguments.length>0){$r(Set,e,arguments[0])}return e};o=i.prototype;var a=function(e){var t=e;if(t==="^null"){return null}else if(t==="^undefined"){return void 0}else{var r=t.charAt(0);if(r==="$"){return C(t,1)}else if(r==="n"){return+C(t,1)}else if(r==="b"){return t==="btrue"}}return+t};var u=function ensureMap(e){if(!e["[[SetData]]"]){var t=e["[[SetData]]"]=new Ur.Map;l(n(e._storage),function(e){var r=a(e);t.set(r,r)});e["[[SetData]]"]=t}e._storage=null};O.getter(i.prototype,"size",function(){r(this,"size");if(this._storage){return n(this._storage).length}u(this);return this["[[SetData]]"].size});b(i.prototype,{has:function has(e){r(this,"has");var t;if(this._storage&&(t=Hr(e))!==null){return!!this._storage[t]}u(this);return this["[[SetData]]"].has(e)},add:function add(e){r(this,"add");var t;if(this._storage&&(t=Hr(e))!==null){this._storage[t]=true;return this}u(this);this["[[SetData]]"].set(e,e);return this},"delete":function(e){r(this,"delete");var t;if(this._storage&&(t=Hr(e))!==null){var n=z(this._storage,t);return delete this._storage[t]&&n}u(this);return this["[[SetData]]"]["delete"](e)},clear:function clear(){r(this,"clear");if(this._storage){this._storage=Vr()}if(this["[[SetData]]"]){this["[[SetData]]"].clear()}},values:function values(){r(this,"values");u(this);return this["[[SetData]]"].values()},entries:function entries(){r(this,"entries");u(this);return this["[[SetData]]"].entries()},forEach:function forEach(e){r(this,"forEach");var n=arguments.length>1?arguments[1]:null;var o=this;u(o);this["[[SetData]]"].forEach(function(r,i){if(n){t(e,n,i,i,o)}else{e(i,i,o)}})}});h(i.prototype,"keys",i.prototype.values,true);we(i.prototype,i.prototype.values);return i}()};if(S.Map||S.Set){var Jr=a(function(){return new Map([[1,2]]).get(1)===2});if(!Jr){var Xr=S.Map;S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}var e=new Xr;if(arguments.length>0){Br(Map,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,S.Map.prototype);return e};S.Map.prototype=m(Xr.prototype);h(S.Map.prototype,"constructor",S.Map,true);O.preserveToString(S.Map,Xr)}var Kr=new Map;var Zr=function(){var e=new Map([[1,0],[2,0],[3,0],[4,0]]);e.set(-0,e);return e.get(0)===e&&e.get(-0)===e&&e.has(0)&&e.has(-0)}();var Yr=Kr.set(1,2)===Kr;if(!Zr||!Yr){var Qr=Map.prototype.set;Z(Map.prototype,"set",function set(e,r){t(Qr,this,e===0?0:e,r);return this})}if(!Zr){var en=Map.prototype.get;var tn=Map.prototype.has;b(Map.prototype,{get:function get(e){return t(en,this,e===0?0:e)},has:function has(e){return t(tn,this,e===0?0:e)}},true);O.preserveToString(Map.prototype.get,en);O.preserveToString(Map.prototype.has,tn)}var rn=new Set;var nn=function(e){e["delete"](0);e.add(-0);return!e.has(0)}(rn);var on=rn.add(1)===rn;if(!nn||!on){var an=Set.prototype.add;Set.prototype.add=function add(e){t(an,this,e===0?0:e);return this};O.preserveToString(Set.prototype.add,an)}if(!nn){var un=Set.prototype.has;Set.prototype.has=function has(e){return t(un,this,e===0?0:e)};O.preserveToString(Set.prototype.has,un);var fn=Set.prototype["delete"];Set.prototype["delete"]=function SetDelete(e){return t(fn,this,e===0?0:e)};O.preserveToString(Set.prototype["delete"],fn)}var sn=w(S.Map,function(e){var t=new e([]);t.set(42,42);return t instanceof e});var cn=Object.setPrototypeOf&&!sn;var ln=function(){try{return!(S.Map()instanceof S.Map)}catch(e){return e instanceof TypeError}}();if(S.Map.length!==0||cn||!ln){var pn=S.Map;S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires "new"')}var e=new pn;if(arguments.length>0){Br(Map,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,Map.prototype);return e};S.Map.prototype=pn.prototype;h(S.Map.prototype,"constructor",S.Map,true);O.preserveToString(S.Map,pn)}var vn=w(S.Set,function(e){var t=new e([]);t.add(42,42);return t instanceof e});var yn=Object.setPrototypeOf&&!vn;var hn=function(){try{return!(S.Set()instanceof S.Set)}catch(e){return e instanceof TypeError}}();if(S.Set.length!==0||yn||!hn){var bn=S.Set;S.Set=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires "new"')}var e=new bn;if(arguments.length>0){$r(Set,e,arguments[0])}delete e.constructor;Object.setPrototypeOf(e,Set.prototype);return e};S.Set.prototype=bn.prototype;h(S.Set.prototype,"constructor",S.Set,true);O.preserveToString(S.Set,bn)}var gn=new S.Map;var dn=!a(function(){return gn.keys().next().done});if(typeof S.Map.prototype.clear!=="function"||(new S.Set).size!==0||gn.size!==0||typeof S.Map.prototype.keys!=="function"||typeof S.Set.prototype.keys!=="function"||typeof S.Map.prototype.forEach!=="function"||typeof S.Set.prototype.forEach!=="function"||u(S.Map)||u(S.Set)||typeof gn.keys().next!=="function"||dn||!sn){b(S,{Map:Ur.Map,Set:Ur.Set},true)}if(S.Set.prototype.keys!==S.Set.prototype.values){h(S.Set.prototype,"keys",S.Set.prototype.values,true)}we(Object.getPrototypeOf((new S.Map).keys()));we(Object.getPrototypeOf((new S.Set).keys()));if(c&&S.Set.prototype.has.name!=="has"){var On=S.Set.prototype.has;Z(S.Set.prototype,"has",function has(e){return t(On,this,e)})}}b(S,Ur);me(S.Map);me(S.Set)}var mn=function throwUnlessTargetIsObject(e){if(!re.TypeIsObject(e)){throw new TypeError("target must be an object")}};var wn={apply:function apply(){return re.Call(re.Call,null,arguments)},construct:function construct(e,t){if(!re.IsConstructor(e)){throw new TypeError("First argument must be a constructor.")}var r=arguments.length>2?arguments[2]:e;if(!re.IsConstructor(r)){throw new TypeError("new.target must be a constructor.")}return re.Construct(e,t,r,"internal")},deleteProperty:function deleteProperty(e,t){mn(e);if(s){var r=Object.getOwnPropertyDescriptor(e,t);if(r&&!r.configurable){return false}}return delete e[t]},has:function has(e,t){mn(e);return t in e}};if(Object.getOwnPropertyNames){Object.assign(wn,{ownKeys:function ownKeys(e){mn(e);var t=Object.getOwnPropertyNames(e);if(re.IsCallable(Object.getOwnPropertySymbols)){x(t,Object.getOwnPropertySymbols(e))}return t}})}var jn=function ConvertExceptionToBoolean(e){return!i(e)};if(Object.preventExtensions){Object.assign(wn,{isExtensible:function isExtensible(e){mn(e);return Object.isExtensible(e)},preventExtensions:function preventExtensions(e){mn(e);return jn(function(){Object.preventExtensions(e)})}})}if(s){var Sn=function get(e,t,r){var n=Object.getOwnPropertyDescriptor(e,t);if(!n){var o=Object.getPrototypeOf(e);if(o===null){return void 0}return Sn(o,t,r)}if("value"in n){return n.value}if(n.get){return re.Call(n.get,r)}return void 0};var Tn=function set(e,r,n,o){var i=Object.getOwnPropertyDescriptor(e,r);if(!i){var a=Object.getPrototypeOf(e);if(a!==null){return Tn(a,r,n,o)}i={value:void 0,writable:true,enumerable:true,configurable:true}}if("value"in i){if(!i.writable){return false}if(!re.TypeIsObject(o)){return false}var u=Object.getOwnPropertyDescriptor(o,r);if(u){return ee.defineProperty(o,r,{value:n})}else{return ee.defineProperty(o,r,{value:n,writable:true,enumerable:true,configurable:true})}}if(i.set){t(i.set,o,n);return true}return false};Object.assign(wn,{defineProperty:function defineProperty(e,t,r){mn(e);return jn(function(){Object.defineProperty(e,t,r)})},getOwnPropertyDescriptor:function getOwnPropertyDescriptor(e,t){mn(e);return Object.getOwnPropertyDescriptor(e,t)},get:function get(e,t){mn(e);var r=arguments.length>2?arguments[2]:e;return Sn(e,t,r)},set:function set(e,t,r){mn(e);var n=arguments.length>3?arguments[3]:e;return Tn(e,t,r,n)}})}if(Object.getPrototypeOf){var In=Object.getPrototypeOf;wn.getPrototypeOf=function getPrototypeOf(e){mn(e);return In(e)}}if(Object.setPrototypeOf&&wn.getPrototypeOf){var En=function(e,t){var r=t;while(r){if(e===r){return true}r=wn.getPrototypeOf(r)}return false};Object.assign(wn,{setPrototypeOf:function setPrototypeOf(e,t){mn(e);if(t!==null&&!re.TypeIsObject(t)){throw new TypeError("proto must be an object or null")}if(t===ee.getPrototypeOf(e)){return true}if(ee.isExtensible&&!ee.isExtensible(e)){return false}if(En(e,t)){return false}Object.setPrototypeOf(e,t);return true}})}var Pn=function(e,t){if(!re.IsCallable(S.Reflect[e])){h(S.Reflect,e,t)}else{var r=a(function(){S.Reflect[e](1);S.Reflect[e](NaN);S.Reflect[e](true);return true});if(r){Z(S.Reflect,e,t)}}};Object.keys(wn).forEach(function(e){Pn(e,wn[e])});var Cn=S.Reflect.getPrototypeOf;if(c&&Cn&&Cn.name!=="getPrototypeOf"){Z(S.Reflect,"getPrototypeOf",function getPrototypeOf(e){return t(Cn,S.Reflect,e)})}if(S.Reflect.setPrototypeOf){if(a(function(){S.Reflect.setPrototypeOf(1,{});return true})){Z(S.Reflect,"setPrototypeOf",wn.setPrototypeOf)}}if(S.Reflect.defineProperty){if(!a(function(){var e=!S.Reflect.defineProperty(1,"test",{value:1});var t=typeof Object.preventExtensions!=="function"||!S.Reflect.defineProperty(Object.preventExtensions({}),"test",{});return e&&t})){Z(S.Reflect,"defineProperty",wn.defineProperty)}}if(S.Reflect.construct){if(!a(function(){var e=function F(){};return S.Reflect.construct(function(){},[],e)instanceof e})){Z(S.Reflect,"construct",wn.construct)}}if(String(new Date(NaN))!=="Invalid Date"){var Mn=Date.prototype.toString;var xn=function toString(){var e=+this;if(e!==e){return"Invalid Date"}return re.Call(Mn,this)};Z(Date.prototype,"toString",xn)}var Nn={anchor:function anchor(e){return re.CreateHTML(this,"a","name",e)},big:function big(){return re.CreateHTML(this,"big","","")},blink:function blink(){return re.CreateHTML(this,"blink","","")},bold:function bold(){return re.CreateHTML(this,"b","","")},fixed:function fixed(){return re.CreateHTML(this,"tt","","")},fontcolor:function fontcolor(e){return re.CreateHTML(this,"font","color",e)},fontsize:function fontsize(e){return re.CreateHTML(this,"font","size",e)},italics:function italics(){return re.CreateHTML(this,"i","","")},link:function link(e){return re.CreateHTML(this,"a","href",e)},small:function small(){return re.CreateHTML(this,"small","","")},strike:function strike(){return re.CreateHTML(this,"strike","","")},sub:function sub(){return re.CreateHTML(this,"sub","","")},sup:function sub(){return re.CreateHTML(this,"sup","","")}};l(Object.keys(Nn),function(e){var r=String.prototype[e];var n=false;if(re.IsCallable(r)){var o=t(r,"",' " ');var i=P([],o.match(/"/g)).length;n=o!==o.toLowerCase()||i>2}else{n=true}if(n){Z(String.prototype,e,Nn[e])}});var An=function(){if(!Y){return false}var e=typeof JSON==="object"&&typeof JSON.stringify==="function"?JSON.stringify:null;if(!e){return false}if(typeof e(G())!=="undefined"){return true}if(e([G()])!=="[null]"){return true}var t={a:G()};t[G()]=true;if(e(t)!=="{}"){return true}return false}();var Rn=a(function(){if(!Y){return true}return JSON.stringify(Object(G()))==="{}"&&JSON.stringify([Object(G())])==="[{}]"});if(An||!Rn){var _n=JSON.stringify;Z(JSON,"stringify",function stringify(e){if(typeof e==="symbol"){return}var n;if(arguments.length>1){n=arguments[1]}var o=[e];if(!r(n)){var i=re.IsCallable(n)?n:null;var a=function(e,r){var n=i?t(i,this,e,r):r;if(typeof n!=="symbol"){if(K.symbol(n)){return St({})(n)}else{return n}}};o.push(a)}else{o.push(n)}if(arguments.length>2){o.push(arguments[2])}return _n.apply(this,o)})}return S}); \ No newline at end of file diff --git a/documentation/js/libs/htmlparser.js b/documentation/js/libs/htmlparser.js new file mode 100644 index 0000000..522b39c --- /dev/null +++ b/documentation/js/libs/htmlparser.js @@ -0,0 +1,23 @@ +/*********************************************** +Copyright 2010 - 2012 Chris Winberry . All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +***********************************************/ +/* v2.0.0 */ + +!function(){function t(t,e){var a=function(){};a.prototype=e.prototype,t.super_=e,t.prototype=new a,t.prototype.constructor=t}function e(t,e){this._options=e||{},this._validateBuilder(t);this._builder=t,this.reset()}function a(t,e){this.reset(),this._options=e||{},void 0===this._options.ignoreWhitespace&&(this._options.ignoreWhitespace=!1),void 0===this._options.includeLocation&&(this._options.includeLocation=!1),void 0===this._options.verbose&&(this._options.verbose=!0),void 0===this._options.enforceEmptyTags&&(this._options.enforceEmptyTags=!0),void 0===this._options.caseSensitiveTags&&(this._options.caseSensitiveTags=!1),void 0===this._options.caseSensitiveAttr&&(this._options.caseSensitiveAttr=!1),"function"==typeof t&&(this._callback=t)}function n(t){n.super_.call(this,t,{ignoreWhitespace:!0,verbose:!1,enforceEmptyTags:!1,caseSensitiveTags:!0})}var i;if("undefined"!=typeof module&&void 0!==module.exports)i=module.exports;else{if(i={},this.Tautologistics||(this.Tautologistics={}),this.Tautologistics.NodeHtmlParser)return;this.Tautologistics.NodeHtmlParser=i}var s={Text:"text",Tag:"tag",Attr:"attr",CData:"cdata",Doctype:"doctype",Comment:"comment"};"undefined"!=typeof module&&void 0!==module.exports&&(t(e,require("stream")),e.prototype.writable=!0,e.prototype.write=function(t){t instanceof Buffer&&(t=t.toString()),this.parseChunk(t)},e.prototype.end=function(t){arguments.length&&this.write(t),this.writable=!1,this.done()},e.prototype.destroy=function(){this.writable=!1}),e.prototype.reset=function(){this._state={mode:s.Text,pos:0,data:null,pendingText:null,pendingWrite:null,lastTag:null,isScript:!1,needData:!1,output:[],done:!1},this._builder.reset()},e.prototype.parseChunk=function(t){for(this._state.needData=!1,this._state.data=null!==this._state.data?this._state.data.substr(this.pos)+t:t;this._state.pos\/]+)(\s*)\??(>?)/g,e.prototype._parseTag=function(){var t=this._state;e.re_parseTag.lastIndex=t.pos;var a=e.re_parseTag.exec(t.data);if(a){if(!a[1]&&"!--"===a[2].substr(0,3))return t.mode=s.Comment,void(t.pos+=3);if(!a[1]&&"![CDATA["===a[2].substr(0,8))return t.mode=s.CData,void(t.pos+=8);if(!a[1]&&"!DOCTYPE"===a[2].substr(0,8))return t.mode=s.Doctype,void(t.pos+=8);if(!t.done&&t.pos+a[0].length===t.data.length)return void(t.needData=!0);var n;">"===a[4]?(t.mode=s.Text,n=a[0].substr(0,a[0].length-1)):(t.mode=s.Attr,n=a[0]),t.pos+=a[0].length;var i={type:s.Tag,name:a[1]+a[2],raw:n};t.mode===s.Attr&&(t.lastTag=i),"script"===i.name.toLowerCase()?t.isScript=!0:"/script"===i.name.toLowerCase()&&(t.isScript=!1),t.mode===s.Attr?this._writePending(i):this._write(i)}else t.needData=!0},e.re_parseAttr_findName=/\s*([^=<>\s'"\/]+)\s*/g,e.prototype._parseAttr_findName=function(){e.re_parseAttr_findName.lastIndex=this._state.pos;var t=e.re_parseAttr_findName.exec(this._state.data);return t?this._state.pos+t[0].length!==e.re_parseAttr_findName.lastIndex?null:{match:t[0],name:t[1]}:null},e.re_parseAttr_findValue=/\s*=\s*(?:'([^']*)'|"([^"]*)"|([^'"\s\/>]+))\s*/g,e.re_parseAttr_findValue_last=/\s*=\s*['"]?(.*)$/g,e.prototype._parseAttr_findValue=function(){var t=this._state;e.re_parseAttr_findValue.lastIndex=t.pos;var a=e.re_parseAttr_findValue.exec(t.data);return a?t.pos+a[0].length!==e.re_parseAttr_findValue.lastIndex?null:{match:a[0],value:a[1]||a[2]||a[3]}:t.done?(e.re_parseAttr_findValue_last.lastIndex=t.pos,a=e.re_parseAttr_findValue_last.exec(t.data),a?{match:a[0],value:""!==a[1]?a[1]:null}:null):null},e.re_parseAttr_splitValue=/\s*=\s*['"]?/g,e.re_parseAttr_selfClose=/(\s*\/\s*)(>?)/g,e.prototype._parseAttr=function(){var t=this._state,a=this._parseAttr_findName(t);if(a&&"?"!==a.name){if(!t.done&&t.pos+a.match.length===t.data.length)return t.needData=!0,null;t.pos+=a.match.length;var n=this._parseAttr_findValue(t);t.data.indexOf(" ",t.pos);if(n){if(!t.done&&t.pos+n.match.length===t.data.length)return t.needData=!0,void(t.pos-=a.match.length);t.pos+=n.match.length}else if(t.data.indexOf(" ",t.pos-1))n={match:"",value:a.name};else{if(e.re_parseAttr_splitValue.lastIndex=t.pos,e.re_parseAttr_splitValue.exec(t.data))return t.needData=!0,void(t.pos-=a.match.length);n={match:"",value:null}}t.lastTag.raw+=a.match+n.match,this._writePending({type:s.Attr,name:a.name,data:n.value})}else{e.re_parseAttr_selfClose.lastIndex=t.pos;var i=e.re_parseAttr_selfClose.exec(t.data);if(i&&i.index===t.pos){if(!t.done&&!i[2]&&t.pos+i[0].length===t.data.length)return void(t.needData=!0);t.lastTag.raw+=i[1],this._write({type:s.Tag,name:"/"+t.lastTag.name,raw:null}),t.pos+=i[1].length}var r=t.data.indexOf(">",t.pos);if(r<0){if(t.done)return t.lastTag.raw+=t.data.substr(t.pos),void(t.pos=t.data.length);t.needData=!0}else t.pos=r+1,t.mode=s.Text}},e.re_parseCData_findEnding=/\]{1,2}$/,e.prototype._parseCData=function(){var t=this._state,a=t.data.indexOf("]]>",t.pos);if(a<0&&t.done&&(a=t.data.length),a<0){if(e.re_parseCData_findEnding.lastIndex=t.pos,e.re_parseCData_findEnding.exec(t.data))return void(t.needData=!0);t.pendingText||(t.pendingText=[]),t.pendingText.push(t.data.substr(t.pos,t.data.length)),t.pos=t.data.length,t.needData=!0}else{var n;t.pendingText?(t.pendingText.push(t.data.substring(t.pos,a)),n=t.pendingText.join(""),t.pendingText=null):n=t.data.substring(t.pos,a),this._write({type:s.CData,data:n}),t.mode=s.Text,t.pos=a+3}},e.prototype._parseDoctype=function(){var t=this._state,a=t.data.indexOf(">",t.pos);if(a<0&&t.done&&(a=t.data.length),a<0)e.re_parseCData_findEnding.lastIndex=t.pos,t.pendingText||(t.pendingText=[]),t.pendingText.push(t.data.substr(t.pos,t.data.length)),t.pos=t.data.length,t.needData=!0;else{var n;t.pendingText?(t.pendingText.push(t.data.substring(t.pos,a)),n=t.pendingText.join(""),t.pendingText=null):n=t.data.substring(t.pos,a),this._write({type:s.Doctype,data:n}),t.mode=s.Text,t.pos=a+1}},e.re_parseComment_findEnding=/\-{1,2}$/,e.prototype._parseComment=function(){var t=this._state,a=t.data.indexOf("--\x3e",t.pos);if(a<0&&t.done&&(a=t.data.length),a<0){if(e.re_parseComment_findEnding.lastIndex=t.pos,e.re_parseComment_findEnding.exec(t.data))return void(t.needData=!0);t.pendingText||(t.pendingText=[]),t.pendingText.push(t.data.substr(t.pos,t.data.length)),t.pos=t.data.length,t.needData=!0}else{var n;t.pendingText?(t.pendingText.push(t.data.substring(t.pos,a)),n=t.pendingText.join(""),t.pendingText=null):n=t.data.substring(t.pos,a),this._write({type:s.Comment,data:n}),t.mode=s.Text,t.pos=a+3}},a._emptyTags={area:1,base:1,basefont:1,br:1,col:1,frame:1,hr:1,img:1,input:1,isindex:1,link:1,meta:1,param:1,embed:1,"?xml":1},a.reWhitespace=/^\s*$/,a.prototype.dom=null,a.prototype.reset=function(){this.dom=[],this._done=!1,this._tagStack=[],this._lastTag=null,this._tagStack.last=function(){return this.length?this[this.length-1]:null},this._line=1,this._col=1},a.prototype.done=function(){this._done=!0,this.handleCallback(null)},a.prototype.error=function(t){this.handleCallback(t)},a.prototype.handleCallback=function(t){if("function"==typeof this._callback)this._callback(t,this.dom);else if(t)throw t},a.prototype.isEmptyTag=function(t){var e=t.name.toLowerCase();return"?"==e.charAt(0)||("/"==e.charAt(0)&&(e=e.substring(1)),this._options.enforceEmptyTags&&!!a._emptyTags[e])},a.prototype._getLocation=function(){return{line:this._line,col:this._col}},a.prototype._updateLocation=function(t){var e=t.type===s.Tag?t.raw:t.data;if(null!==e){var a=e.split("\n");this._line+=a.length-1,a.length>1&&(this._col=1),this._col+=a[a.length-1].length,t.type===s.Tag?this._col+=2:t.type===s.Comment?this._col+=7:t.type===s.CData&&(this._col+=12)}},a.prototype._copyElement=function(t){var e={type:t.type};if(this._options.verbose&&void 0!==t.raw&&(e.raw=t.raw),void 0!==t.name)switch(t.type){case s.Tag:e.name=this._options.caseSensitiveTags?t.name:t.name.toLowerCase();break;case s.Attr:e.name=this._options.caseSensitiveAttr?t.name:t.name.toLowerCase();break;default:e.name=this._options.caseSensitiveTags?t.name:t.name.toLowerCase()}return void 0!==t.data&&(e.data=t.data),t.location&&(e.location={line:t.location.line,col:t.location.col}),e},a.prototype.write=function(t){if(this._done&&this.handleCallback(new Error("Writing to the builder after done() called is not allowed without a reset()")),this._options.includeLocation&&t.type!==s.Attr&&(t.location=this._getLocation(),this._updateLocation(t)),t.type!==s.Text||!this._options.ignoreWhitespace||!a.reWhitespace.test(t.data)){var e,n;if(this._tagStack.last())if(t.type===s.Tag)if("/"==t.name.charAt(0)){var i=this._options.caseSensitiveTags?t.name.substring(1):t.name.substring(1).toLowerCase();if(!this.isEmptyTag(t)){for(var r=this._tagStack.length-1;r>-1&&this._tagStack[r--].name!=i;);if(r>-1||this._tagStack[0].name==i)for(;r=0&&s.length>=n)return s;if(a&&e.children)i=e.children;else{if(!(e instanceof Array))return s;i=e}for(var d=0;d=0&&s.length>=n));d++);return s},getElementById:function(t,e,a){var n=r.getElements({id:t},e,a,1);return n.length?n[0]:null},getElementsByTagName:function(t,e,a,n){return r.getElements({tag_name:t},e,a,n)},getElementsByTagType:function(t,e,a,n){return r.getElements({tag_type:t},e,a,n)}};i.Parser=e,i.HtmlBuilder=a,i.RssBuilder=n,i.ElementType=s,i.DomUtils=r}(); diff --git a/documentation/js/libs/innersvg.js b/documentation/js/libs/innersvg.js new file mode 100644 index 0000000..b1099de --- /dev/null +++ b/documentation/js/libs/innersvg.js @@ -0,0 +1,9 @@ +/** + * innerHTML property for SVGElement + * Copyright(c) 2010, Jeff Schiller + * + * Licensed under the Apache License, Version 2 + * + * Minor modifications by Chris Price to only polyfill when required. + */ +!function(e){if(e&&!("innerHTML"in e.prototype)){var t=function(e,r){var i=e.nodeType;if(3==i)r.push(e.textContent.replace(/&/,"&").replace(/",">"));else if(1==i){if(r.push("<",e.tagName),e.hasAttributes())for(var n=e.attributes,s=0,o=n.length;s");for(var h=e.childNodes,s=0,o=h.length;s")}else r.push("/>")}else{if(8!=i)throw"Error serializing XML. Unhandled node of type: "+i;r.push("\x3c!--",e.nodeValue,"--\x3e")}};Object.defineProperty(e.prototype,"innerHTML",{get:function(){for(var e=[],r=this.firstChild;r;)t(r,e),r=r.nextSibling;return e.join("")},set:function(e){for(;this.firstChild;)this.removeChild(this.firstChild);try{var t=new DOMParser;t.async=!1,sXML=""+e+"";for(var r=t.parseFromString(sXML,"text/xml").documentElement.firstChild;r;)this.appendChild(this.ownerDocument.importNode(r,!0)),r=r.nextSibling}catch(e){throw new Error("Error parsing XML string")}}})}}((0,eval)("this").SVGElement); \ No newline at end of file diff --git a/documentation/js/libs/lit-html.js b/documentation/js/libs/lit-html.js new file mode 100644 index 0000000..743deea --- /dev/null +++ b/documentation/js/libs/lit-html.js @@ -0,0 +1 @@ +"use strict";function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _get(target,property,receiver){if(typeof Reflect!=="undefined"&&Reflect.get){_get=Reflect.get}else{_get=function _get(target,property,receiver){var base=_superPropBase(target,property);if(!base)return;var desc=Object.getOwnPropertyDescriptor(base,property);if(desc.get){return desc.get.call(receiver)}return desc.value}}return _get(target,property,receiver||target)}function _superPropBase(object,property){while(!Object.prototype.hasOwnProperty.call(object,property)){object=_getPrototypeOf(object);if(object===null)break}return object}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function _iterableToArray(iter){if(Symbol.iterator in Object(iter)||Object.prototype.toString.call(iter)==="[object Arguments]")return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&arguments[2]!==undefined?arguments[2]:null;var i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var n=e;for(;n!==s;){var _e=n.nextSibling;t.insertBefore(n,i),n=_e}},o=function o(t,e){var s=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var i=e;for(;i!==s;){var _e2=i.nextSibling;t.removeChild(i),i=_e2}},r={},a={},l="{{lit-".concat(String(Math.random()).slice(2),"}}"),h="\x3c!--".concat(l,"--\x3e"),d=new RegExp("".concat(l,"|").concat(h)),c="$lit$";var u=function u(t,e){var _this=this;_classCallCheck(this,u);this.parts=[],this.element=e;var s=-1,i=0;var n=[],o=function o(e){var r=e.content,a=document.createTreeWalker(r,133,null,!1);var h=0;for(;a.nextNode();){s++;var _e3=a.currentNode;if(1===_e3.nodeType){if(_e3.hasAttributes()){var _n=_e3.attributes;var _o=0;for(var _t=0;_t<_n.length;_t++){_n[_t].value.indexOf(l)>=0&&_o++}for(;_o-- >0;){var _n2=t.strings[i],_o2=g.exec(_n2)[2],_r=_o2.toLowerCase()+c,_a=_e3.getAttribute(_r).split(d);_this.parts.push({type:"attribute",index:s,name:_o2,strings:_a}),_e3.removeAttribute(_r),i+=_a.length-1}}"TEMPLATE"===_e3.tagName&&o(_e3)}else if(3===_e3.nodeType){var _t2=_e3.data;if(_t2.indexOf(l)>=0){var _o3=_e3.parentNode,_r2=_t2.split(d),_a2=_r2.length-1;for(var _t3=0;_t3<_a2;_t3++){_o3.insertBefore(""===_r2[_t3]?m():document.createTextNode(_r2[_t3]),_e3),_this.parts.push({type:"node",index:++s})}""===_r2[_a2]?(_o3.insertBefore(m(),_e3),n.push(_e3)):_e3.data=_r2[_a2],i+=_a2}}else if(8===_e3.nodeType)if(_e3.data===l){var _t4=_e3.parentNode;null!==_e3.previousSibling&&s!==h||(s++,_t4.insertBefore(m(),_e3)),h=s,_this.parts.push({type:"node",index:s}),null===_e3.nextSibling?_e3.data="":(n.push(_e3),s--),i++}else{var _t5=-1;for(;-1!==(_t5=_e3.data.indexOf(l,_t5+1));){_this.parts.push({type:"node",index:-1})}}}};o(e);for(var _i=0;_i=\/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;var v=function(){function v(t,e,s){_classCallCheck(this,v);this._parts=[],this.template=t,this.processor=e,this.options=s}_createClass(v,[{key:"update",value:function update(t){var e=0;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=this._parts[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _s=_step.value;void 0!==_s&&_s.setValue(t[e]),e++}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=this._parts[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var _t7=_step2.value;void 0!==_t7&&_t7.commit()}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return!=null){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}}},{key:"_clone",value:function _clone(){var _this2=this;var t=i?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),e=this.template.parts;var s=0,n=0;var o=function o(t){var i=document.createTreeWalker(t,133,null,!1);var r=i.nextNode();for(;s".concat(_get(_getPrototypeOf(x.prototype),"getHTML",this).call(this),"")}},{key:"getTemplateElement",value:function getTemplateElement(){var t=_get(_getPrototypeOf(x.prototype),"getTemplateElement",this).call(this),e=t.content,s=e.firstChild;return e.removeChild(s),n(e,s.firstChild),t}}]);return x}(f);var _=function _(t){return null===t||!("object"==_typeof(t)||"function"==typeof t)};var y=function(){function y(t,e,s){_classCallCheck(this,y);this.dirty=!0,this.element=t,this.name=e,this.strings=s,this.parts=[];for(var _t11=0;_t110&&arguments[0]!==undefined?arguments[0]:this.startNode;o(this.startNode.parentNode,t.nextSibling,this.endNode)}}]);return V}();var b=function(){function b(t,e,s){_classCallCheck(this,b);if(this.value=void 0,this._pendingValue=void 0,2!==s.length||""!==s[0]||""!==s[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=e,this.strings=s}_createClass(b,[{key:"setValue",value:function setValue(t){this._pendingValue=t}},{key:"commit",value:function commit(){for(;s(this._pendingValue);){var _t15=this._pendingValue;this._pendingValue=r,_t15(this)}if(this._pendingValue===r)return;var t=!!this._pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name)),this.value=t,this._pendingValue=r}}]);return b}();var w=function(_y){_inherits(w,_y);function w(t,e,s){var _this3;_classCallCheck(this,w);_this3=_possibleConstructorReturn(this,_getPrototypeOf(w).call(this,t,e,s)),_this3.single=2===s.length&&""===s[0]&&""===s[1];return _this3}_createClass(w,[{key:"_createPart",value:function _createPart(){return new T(this)}},{key:"_getValue",value:function _getValue(){return this.single?this.parts[0].value:_get(_getPrototypeOf(w.prototype),"_getValue",this).call(this)}},{key:"commit",value:function commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}]);return w}(y);var T=function(_N){_inherits(T,_N);function T(){_classCallCheck(this,T);return _possibleConstructorReturn(this,_getPrototypeOf(T).apply(this,arguments))}return T}(N);var E=!1;try{var _t16={get capture(){return E=!0,!1}};window.addEventListener("test",_t16,_t16),window.removeEventListener("test",_t16,_t16)}catch(t){}var A=function(){function A(t,e,s){var _this4=this;_classCallCheck(this,A);this.value=void 0,this._pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=s,this._boundHandleEvent=function(t){return _this4.handleEvent(t)}}_createClass(A,[{key:"setValue",value:function setValue(t){this._pendingValue=t}},{key:"commit",value:function commit(){for(;s(this._pendingValue);){var _t17=this._pendingValue;this._pendingValue=r,_t17(this)}if(this._pendingValue===r)return;var t=this._pendingValue,e=this.value,i=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),n=null!=t&&(null==e||i);i&&this.element.removeEventListener(this.eventName,this._boundHandleEvent,this._options),n&&(this._options=P(t),this.element.addEventListener(this.eventName,this._boundHandleEvent,this._options)),this.value=t,this._pendingValue=r}},{key:"handleEvent",value:function handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}]);return A}();var P=function P(t){return t&&(E?{capture:t.capture,passive:t.passive,once:t.once}:t.capture)};var S=function(){function S(){_classCallCheck(this,S)}_createClass(S,[{key:"handleAttributeExpressions",value:function handleAttributeExpressions(t,e,s,i){var n=e[0];if("."===n){return new w(t,e.slice(1),s).parts}return"@"===n?[new A(t,e.slice(1),i.eventContext)]:"?"===n?[new b(t,e.slice(1),s)]:new y(t,e,s).parts}},{key:"handleTextExpression",value:function handleTextExpression(t){return new V(t)}}]);return S}();var C=new S;function M(t){var e=L.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},L.set(t.type,e));var s=e.stringsArray.get(t.strings);if(void 0!==s)return s;var i=t.strings.join(l);return void 0===(s=e.keyString.get(i))&&(s=new u(t,t.getTemplateElement()),e.keyString.set(i,s)),e.stringsArray.set(t.strings,s),s}var L=new Map,k=new WeakMap;(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.0.0");t.html=function(t){for(var _len=arguments.length,e=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){e[_key-1]=arguments[_key]}return new f(t,e,"html",C)},t.svg=function(t){for(var _len2=arguments.length,e=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){e[_key2-1]=arguments[_key2]}return new x(t,e,"svg",C)},t.DefaultTemplateProcessor=S,t.defaultTemplateProcessor=C,t.directive=function(t){return function(){var i=t.apply(void 0,arguments);return e.set(i,!0),i}},t.isDirective=s,t.removeNodes=o,t.reparentNodes=n,t.noChange=r,t.nothing=a,t.AttributeCommitter=y,t.AttributePart=N,t.BooleanAttributePart=b,t.EventPart=A,t.isPrimitive=_,t.NodePart=V,t.PropertyCommitter=w,t.PropertyPart=T,t.parts=k,t.render=function(t,e,s){var i=k.get(e);void 0===i&&(o(e,e.firstChild),k.set(e,i=new V(Object.assign({templateFactory:M},s))),i.appendInto(e)),i.setValue(t),i.commit()},t.templateCaches=L,t.templateFactory=M,t.TemplateInstance=v,t.SVGTemplateResult=x,t.TemplateResult=f,t.createMarker=m,t.isTemplatePartActive=p,t.Template=u,Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/documentation/js/libs/prism.js b/documentation/js/libs/prism.js new file mode 100644 index 0000000..1756bcc --- /dev/null +++ b/documentation/js/libs/prism.js @@ -0,0 +1,14 @@ +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+json+markdown+scss+typescript&plugins=line-highlight+line-numbers+toolbar+copy-to-clipboard */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-([\w-]+)\b/i,t=0,n=_self.Prism={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof r?new r(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(w instanceof s)){if(m&&b!=t.length-1){h.lastIndex=k;var _=h.exec(e);if(!_)break;for(var j=_.index+(d?_[1].length:0),P=_.index+_[0].length,A=b,x=k,O=t.length;O>A&&(P>x||!t[A].type&&!t[A-1].greedy);++A)x+=t[A].length,j>=x&&(++b,k=x);if(t[b]instanceof s)continue;I=A-b,w=e.slice(k,x),_.index-=k}else{h.lastIndex=0;var _=h.exec(w),I=1}if(_){d&&(p=_[1]?_[1].length:0);var j=_.index+p,_=_[0].slice(p),P=j+_.length,N=w.slice(0,j),S=w.slice(P),C=[b,I];N&&(++b,k+=N.length,C.push(N));var E=new s(u,f?n.tokenize(_,f):_,y,_,m);if(C.push(E),S&&C.push(S),Array.prototype.splice.apply(t,C),1!=I&&n.matchGrammar(e,t,r,b,k,!0,u),i)break}else if(i)break}}}}},tokenize:function(e,t){var r=[e],a=t.rest;if(a){for(var l in a)t[l]=a[l];delete t.rest}return n.matchGrammar(e,r,t,0,0,!1),r},hooks:{all:{},add:function(e,t){var r=n.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){var r=n.hooks.all[e];if(r&&r.length)for(var a,l=0;a=r[l++];)a(t)}}},r=n.Token=function(e,t,n,r,a){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!a};if(r.stringify=function(e,t,a){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return r.stringify(n,t,e)}).join("");var l={type:e.type,content:r.stringify(e.content,t,a),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:a};if(e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o=Object.keys(l.attributes).map(function(e){return e+'="'+(l.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+l.tag+' class="'+l.classes.join(" ")+'"'+(o?" "+o:"")+">"+l.content+""},!_self.document)return _self.addEventListener?(n.disableWorkerMessageHandler||_self.addEventListener("message",function(e){var t=JSON.parse(e.data),r=t.language,a=t.code,l=t.immediateClose;_self.postMessage(n.highlight(a,n.languages[r],r)),l&&_self.close()},!1),_self.Prism):_self.Prism;var a=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return a&&(n.filename=a.src,n.manual||a.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/(^|[^\\])["']/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; +Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css,Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\s\S]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css",greedy:!0}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(?:true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,"function":/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^\/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:"function"},constant:/\b[A-Z][A-Z\d_]*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}}}),Prism.languages.javascript["template-string"].inside.interpolation.inside.rest=Prism.languages.javascript,Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript",greedy:!0}}),Prism.languages.js=Prism.languages.javascript; +Prism.languages.json={property:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/i,string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,punctuation:/[{}[\]);,]/,operator:/:/g,"boolean":/\b(?:true|false)\b/i,"null":/\bnull\b/i},Prism.languages.jsonp=Prism.languages.json; +Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.languages.markdown.url,Prism.languages.markdown.italic.inside.url=Prism.languages.markdown.url,Prism.languages.markdown.bold.inside.italic=Prism.languages.markdown.italic,Prism.languages.markdown.italic.inside.bold=Prism.languages.markdown.bold; +Prism.languages.typescript=Prism.languages.extend("javascript",{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|module|declare|constructor|namespace|abstract|require|type)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console)\b/}),Prism.languages.ts=Prism.languages.typescript; +Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()]|&|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.scss.property={pattern:/(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/i,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}},Prism.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.languages.scss; +!function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function t(e,t){return t=" "+t+" ",(" "+e.className+" ").replace(/[\n\t]/g," ").indexOf(t)>-1}function n(e,n,i){n="string"==typeof n?n:e.getAttribute("data-line");for(var o,l=n.replace(/\s+/g,"").split(","),a=+e.getAttribute("data-line-offset")||0,s=r()?parseInt:parseFloat,d=s(getComputedStyle(e).lineHeight),u=t(e,"line-numbers"),c=0;o=l[c++];){var p=o.split("-"),m=+p[0],f=+p[1]||m,h=e.querySelector('.line-highlight[data-range="'+o+'"]')||document.createElement("div");if(h.setAttribute("aria-hidden","true"),h.setAttribute("data-range",o),h.className=(i||"")+" line-highlight",u&&Prism.plugins.lineNumbers){var g=Prism.plugins.lineNumbers.getLine(e,m),y=Prism.plugins.lineNumbers.getLine(e,f);g&&(h.style.top=g.offsetTop+"px"),y&&(h.style.height=y.offsetTop-g.offsetTop+y.offsetHeight+"px")}else h.setAttribute("data-start",m),f>m&&h.setAttribute("data-end",f),h.style.top=(m-a-1)*d+"px",h.textContent=new Array(f-m+2).join(" \n");u?e.appendChild(h):(e.querySelector("code")||e).appendChild(h)}}function i(){var t=location.hash.slice(1);e(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var i=(t.match(/\.([\d,-]+)$/)||[,""])[1];if(i&&!document.getElementById(t)){var r=t.slice(0,t.lastIndexOf(".")),o=document.getElementById(r);o&&(o.hasAttribute("data-line")||o.setAttribute("data-line",""),n(o,i,"temporary "),document.querySelector(".temporary.line-highlight").scrollIntoView())}}if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var r=function(){var e;return function(){if("undefined"==typeof e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding=0,t.style.border=0,t.innerHTML=" 
                                                                                                                                                 ",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}}(),o=0;Prism.hooks.add("before-sanity-check",function(t){var n=t.element.parentNode,i=n&&n.getAttribute("data-line");if(n&&i&&/pre/i.test(n.nodeName)){var r=0;e(".line-highlight",n).forEach(function(e){r+=e.textContent.length,e.parentNode.removeChild(e)}),r&&/^( \n)+$/.test(t.code.slice(-r))&&(t.code=t.code.slice(0,-r))}}),Prism.hooks.add("complete",function l(e){var r=e.element.parentNode,a=r&&r.getAttribute("data-line");if(r&&a&&/pre/i.test(r.nodeName)){clearTimeout(o);var s=Prism.plugins.lineNumbers,d=e.plugins&&e.plugins.lineNumbers;t(r,"line-numbers")&&s&&!d?Prism.hooks.add("line-numbers",l):(n(r,a),o=setTimeout(i,1))}}),window.addEventListener("hashchange",i),window.addEventListener("resize",function(){var e=document.querySelectorAll("pre[data-line]");Array.prototype.forEach.call(e,function(e){n(e)})})}}(); +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e="line-numbers",t=/\n(?!$)/g,n=function(e){var n=r(e),s=n["white-space"];if("pre-wrap"===s||"pre-line"===s){var l=e.querySelector("code"),i=e.querySelector(".line-numbers-rows"),a=e.querySelector(".line-numbers-sizer"),o=l.textContent.split(t);a||(a=document.createElement("span"),a.className="line-numbers-sizer",l.appendChild(a)),a.style.display="block",o.forEach(function(e,t){a.textContent=e||"\n";var n=a.getBoundingClientRect().height;i.children[t].style.height=n+"px"}),a.textContent="",a.style.display="none"}},r=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null};window.addEventListener("resize",function(){Array.prototype.forEach.call(document.querySelectorAll("pre."+e),n)}),Prism.hooks.add("complete",function(e){if(e.code){var r=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(r&&/pre/i.test(r.nodeName)&&(s.test(r.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s," ")),s.test(r.className)||(r.className+=" line-numbers");var l,i=e.code.match(t),a=i?i.length+1:1,o=new Array(a+1);o=o.join(""),l=document.createElement("span"),l.setAttribute("aria-hidden","true"),l.className="line-numbers-rows",l.innerHTML=o,r.hasAttribute("data-start")&&(r.style.counterReset="linenumber "+(parseInt(r.getAttribute("data-start"),10)-1)),e.element.appendChild(l),n(r),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}),Prism.plugins.lineNumbers={getLine:function(t,n){if("PRE"===t.tagName&&t.classList.contains(e)){var r=t.querySelector(".line-numbers-rows"),s=parseInt(t.getAttribute("data-start"),10)||1,l=s+(r.children.length-1);s>n&&(n=s),n>l&&(n=l);var i=n-s;return r.children[i]}}}}}(); +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var t=[],e={},n=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(n,a){var o;o="function"==typeof a?a:function(t){var e;return"function"==typeof a.onClick?(e=document.createElement("button"),e.type="button",e.addEventListener("click",function(){a.onClick.call(this,t)})):"string"==typeof a.url?(e=document.createElement("a"),e.href=a.url):e=document.createElement("span"),e.textContent=a.text,e},t.push(e[n]=o)},o=Prism.plugins.toolbar.hook=function(a){var o=a.element.parentNode;if(o&&/pre/i.test(o.nodeName)&&!o.parentNode.classList.contains("code-toolbar")){var r=document.createElement("div");r.classList.add("code-toolbar"),o.parentNode.insertBefore(r,o),r.appendChild(o);var i=document.createElement("div");i.classList.add("toolbar"),document.body.hasAttribute("data-toolbar-order")&&(t=document.body.getAttribute("data-toolbar-order").split(",").map(function(t){return e[t]||n})),t.forEach(function(t){var e=t(a);if(e){var n=document.createElement("div");n.classList.add("toolbar-item"),n.appendChild(e),i.appendChild(n)}}),r.appendChild(i)}};a("label",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-label")){var n,a,o=e.getAttribute("data-label");try{a=document.querySelector("template#"+o)}catch(r){}return a?n=a.content:(e.hasAttribute("data-url")?(n=document.createElement("a"),n.href=e.getAttribute("data-url")):n=document.createElement("span"),n.textContent=o),n}}),Prism.hooks.add("complete",o)}}(); +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){if(!Prism.plugins.toolbar)return console.warn("Copy to Clipboard plugin loaded before Toolbar plugin."),void 0;var o=window.ClipboardJS||void 0;o||"function"!=typeof require||(o=require("clipboard"));var e=[];if(!o){var t=document.createElement("script"),n=document.querySelector("head");t.onload=function(){if(o=window.ClipboardJS)for(;e.length;)e.pop()()},t.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js",n.appendChild(t)}Prism.plugins.toolbar.registerButton("copy-to-clipboard",function(t){function n(){var e=new o(i,{text:function(){return t.code}});e.on("success",function(){i.textContent="Copied!",r()}),e.on("error",function(){i.textContent="Press Ctrl+C to copy",r()})}function r(){setTimeout(function(){i.textContent="Copy"},5e3)}var i=document.createElement("a");return i.textContent="Copy",o?n():e.push(n),i})}}(); \ No newline at end of file diff --git a/documentation/js/libs/promise.min.js b/documentation/js/libs/promise.min.js new file mode 100644 index 0000000..59d3fee --- /dev/null +++ b/documentation/js/libs/promise.min.js @@ -0,0 +1,6 @@ +/* + * Copyright 2012-2013 (c) Pierre Duquesne + * Licensed under the New BSD License. + * https://github.com/stackp/promisejs + */ +(function(a){function b(){this._callbacks=[];}b.prototype.then=function(a,c){var d;if(this._isdone)d=a.apply(c,this.result);else{d=new b();this._callbacks.push(function(){var b=a.apply(c,arguments);if(b&&typeof b.then==='function')b.then(d.done,d);});}return d;};b.prototype.done=function(){this.result=arguments;this._isdone=true;for(var a=0;a=300)&&j.status!==304);h.done(a,j.responseText,j);}};j.send(k);return h;}function h(a){return function(b,c,d){return g(a,b,c,d);};}var i={Promise:b,join:c,chain:d,ajax:g,get:h('GET'),post:h('POST'),put:h('PUT'),del:h('DELETE'),ENOXHR:1,ETIMEOUT:2,ajaxTimeout:0};if(typeof define==='function'&&define.amd)define(function(){return i;});else a.promise=i;})(this); \ No newline at end of file diff --git a/documentation/js/libs/svg-pan-zoom.min.js b/documentation/js/libs/svg-pan-zoom.min.js new file mode 100644 index 0000000..807f0e4 --- /dev/null +++ b/documentation/js/libs/svg-pan-zoom.min.js @@ -0,0 +1,3 @@ +// svg-pan-zoom v3.6.0 +// https://github.com/ariutta/svg-pan-zoom +!function t(e,o,n){function i(r,a){if(!o[r]){if(!e[r]){var l="function"==typeof require&&require;if(!a&&l)return l(r,!0);if(s)return s(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var h=o[r]={exports:{}};e[r][0].call(h.exports,function(t){var o=e[r][1][t];return i(o?o:t)},h,h.exports,t,e,o,n)}return o[r].exports}for(var s="function"==typeof require&&require,r=0;r=0;n--)this.eventListeners.hasOwnProperty(o[n])&&delete this.eventListeners[o[n]]}for(var i in this.eventListeners)(this.options.eventsListenerElement||this.svg).addEventListener(i,this.eventListeners[i],!this.options.preventMouseEventsDefault&&h);this.options.mouseWheelZoomEnabled&&(this.options.mouseWheelZoomEnabled=!1,this.enableMouseWheelZoom())},l.prototype.enableMouseWheelZoom=function(){if(!this.options.mouseWheelZoomEnabled){var t=this;this.wheelListener=function(e){return t.handleMouseWheel(e)};var e=!this.options.preventMouseEventsDefault;n.on(this.options.eventsListenerElement||this.svg,this.wheelListener,e),this.options.mouseWheelZoomEnabled=!0}},l.prototype.disableMouseWheelZoom=function(){if(this.options.mouseWheelZoomEnabled){var t=!this.options.preventMouseEventsDefault;n.off(this.options.eventsListenerElement||this.svg,this.wheelListener,t),this.options.mouseWheelZoomEnabled=!1}},l.prototype.handleMouseWheel=function(t){if(this.options.zoomEnabled&&"none"===this.state){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1);var e=t.deltaY||1,o=Date.now()-this.lastMouseWheelEventTime,n=3+Math.max(0,30-o);this.lastMouseWheelEventTime=Date.now(),"deltaMode"in t&&0===t.deltaMode&&t.wheelDelta&&(e=0===t.deltaY?0:Math.abs(t.wheelDelta)/t.deltaY),e=-.30?1:-1)*Math.log(Math.abs(e)+10)/n;var i=this.svg.getScreenCTM().inverse(),s=r.getEventPoint(t,this.svg).matrixTransform(i),a=Math.pow(1+this.options.zoomScaleSensitivity,-1*e);this.zoomAtPoint(a,s)}},l.prototype.zoomAtPoint=function(t,e,o){var n=this.viewport.getOriginalState();o?(t=Math.max(this.options.minZoom*n.zoom,Math.min(this.options.maxZoom*n.zoom,t)),t/=this.getZoom()):this.getZoom()*tthis.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},l.prototype.zoom=function(t,e){this.zoomAtPoint(t,r.getSvgCenterPoint(this.svg,this.width,this.height),e)},l.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},l.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),"SVGPoint"!==s.getType(e)){if(!("x"in e&&"y"in e))throw new Error("Given point is invalid");e=r.createSVGPoint(this.svg,e.x,e.y)}this.zoomAtPoint(t,e,o)},l.prototype.getZoom=function(){return this.viewport.getZoom()},l.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},l.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},l.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},l.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},l.prototype.reset=function(){this.resetZoom(),this.resetPan()},l.prototype.handleDblClick=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled){var e=t.target.getAttribute("class")||"";if(e.indexOf("svg-pan-zoom-control")>-1)return!1}var o;o=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var n=r.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(o,n)},l.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),s.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&s.isDblClick(t,e)?this.handleDblClick(t):(this.state="pan",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=r.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},l.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&this.options.panEnabled){var e=r.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},l.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&(this.state="none")},l.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},l.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},l.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},l.prototype.updateBBox=function(){this.viewport.simpleViewBoxCache()},l.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},l.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},l.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},l.prototype.resize=function(){var t=r.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height;var e=this.viewport;e.options.width=this.width,e.options.height=this.height,e.processCTM(),this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},l.prototype.destroy=function(){var t=this;this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,this.onUpdatedCTM=null,null!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()});for(var e in this.eventListeners)(this.options.eventsListenerElement||this.svg).removeEventListener(e,this.eventListeners[e],!this.options.preventMouseEventsDefault&&h);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),c=c.filter(function(e){return e.svg!==t.svg}),delete this.options,delete this.viewport,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},l.prototype.getPublicInstance=function(){var t=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return t.options.panEnabled=!0,t.pi},disablePan:function(){return t.options.panEnabled=!1,t.pi},isPanEnabled:function(){return!!t.options.panEnabled},pan:function(e){return t.pan(e),t.pi},panBy:function(e){return t.panBy(e),t.pi},getPan:function(){return t.getPan()},setBeforePan:function(e){return t.options.beforePan=null===e?null:s.proxy(e,t.publicInstance),t.pi},setOnPan:function(e){return t.options.onPan=null===e?null:s.proxy(e,t.publicInstance),t.pi},enableZoom:function(){return t.options.zoomEnabled=!0,t.pi},disableZoom:function(){return t.options.zoomEnabled=!1,t.pi},isZoomEnabled:function(){return!!t.options.zoomEnabled},enableControlIcons:function(){return t.options.controlIconsEnabled||(t.options.controlIconsEnabled=!0,i.enable(t)),t.pi},disableControlIcons:function(){return t.options.controlIconsEnabled&&(t.options.controlIconsEnabled=!1,i.disable(t)),t.pi},isControlIconsEnabled:function(){return!!t.options.controlIconsEnabled},enableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!0,t.pi},disableDblClickZoom:function(){return t.options.dblClickZoomEnabled=!1,t.pi},isDblClickZoomEnabled:function(){return!!t.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return t.enableMouseWheelZoom(),t.pi},disableMouseWheelZoom:function(){return t.disableMouseWheelZoom(),t.pi},isMouseWheelZoomEnabled:function(){return!!t.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(e){return t.options.zoomScaleSensitivity=e,t.pi},setMinZoom:function(e){return t.options.minZoom=e,t.pi},setMaxZoom:function(e){return t.options.maxZoom=e,t.pi},setBeforeZoom:function(e){return t.options.beforeZoom=null===e?null:s.proxy(e,t.publicInstance),t.pi},setOnZoom:function(e){return t.options.onZoom=null===e?null:s.proxy(e,t.publicInstance),t.pi},zoom:function(e){return t.publicZoom(e,!0),t.pi},zoomBy:function(e){return t.publicZoom(e,!1),t.pi},zoomAtPoint:function(e,o){return t.publicZoomAtPoint(e,o,!0),t.pi},zoomAtPointBy:function(e,o){return t.publicZoomAtPoint(e,o,!1),t.pi},zoomIn:function(){return this.zoomBy(1+t.options.zoomScaleSensitivity),t.pi},zoomOut:function(){return this.zoomBy(1/(1+t.options.zoomScaleSensitivity)),t.pi},getZoom:function(){return t.getRelativeZoom()},setOnUpdatedCTM:function(e){return t.options.onUpdatedCTM=null===e?null:s.proxy(e,t.publicInstance),t.pi},resetZoom:function(){return t.resetZoom(),t.pi},resetPan:function(){return t.resetPan(),t.pi},reset:function(){return t.reset(),t.pi},fit:function(){return t.fit(),t.pi},contain:function(){return t.contain(),t.pi},center:function(){return t.center(),t.pi},updateBBox:function(){return t.updateBBox(),t.pi},resize:function(){return t.resize(),t.pi},getSizes:function(){return{width:t.width,height:t.height,realZoom:t.getZoom(),viewBox:t.viewport.getViewBox()}},destroy:function(){return t.destroy(),t.pi}}),this.publicInstance};var c=[],p=function(t,e){var o=s.getSvg(t);if(null===o)return null;for(var n=c.length-1;n>=0;n--)if(c[n].svg===o)return c[n].instance.getPublicInstance();return c.push({svg:o,instance:new l(o,e)}),c[c.length-1].instance.getPublicInstance()};e.exports=p},{"./control-icons":2,"./shadow-viewport":3,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(t,e,o){var n=t("./utilities"),i="unknown";document.documentMode&&(i="ie"),e.exports={svgNS:"http://www.w3.org/2000/svg",xmlNS:"http://www.w3.org/XML/1998/namespace",xmlnsNS:"http://www.w3.org/2000/xmlns/",xlinkNS:"http://www.w3.org/1999/xlink",evNS:"http://www.w3.org/2001/xml-events",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error("Cannot get BoundingClientRect for SVG.")},getOrCreateViewport:function(t,e){var o=null;if(o=n.isElement(e)?e:t.querySelector(e),!o){var i=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return"defs"!==t.nodeName&&"#text"!==t.nodeName});1===i.length&&"g"===i[0].nodeName&&null===i[0].getAttribute("transform")&&(o=i[0])}if(!o){var s="viewport-"+(new Date).toISOString().replace(/\D/g,"");o=document.createElementNS(this.svgNS,"g"),o.setAttribute("id",s);var r=t.childNodes||t.children;if(r&&r.length>0)for(var a=r.length;a>0;a--)"defs"!==r[r.length-a].nodeName&&o.appendChild(r[r.length-a]);t.appendChild(o)}var l=[];return o.getAttribute("class")&&(l=o.getAttribute("class").split(" ")),~l.indexOf("svg-pan-zoom_viewport")||(l.push("svg-pan-zoom_viewport"),o.setAttribute("class",l.join(" "))),o},setupSvgAttributes:function(t){if(t.setAttribute("xmlns",this.svgNS),t.setAttributeNS(this.xmlnsNS,"xmlns:xlink",this.xlinkNS),t.setAttributeNS(this.xmlnsNS,"xmlns:ev",this.evNS),null!==t.parentNode){var e=t.getAttribute("style")||"";e.toLowerCase().indexOf("overflow")===-1&&t.setAttribute("style","overflow: hidden; "+e)}},internetExplorerRedisplayInterval:300,refreshDefsGlobal:n.throttle(function(){for(var t=document.querySelectorAll("defs"),e=t.length,o=0;oe?(clearTimeout(a),a=null,l=h,s=t.apply(n,i),a||(n=i=null)):a||o.trailing===!1||(a=setTimeout(u,c)),s}},createRequestAnimationFrame:function(t){var e=null;return"auto"!==t&&t<60&&t>1&&(e=Math.floor(1e3/t)),null===e?window.requestAnimationFrame||n(33):n(e)}}},{}]},{},[1]); \ No newline at end of file diff --git a/documentation/js/libs/tablesort.min.js b/documentation/js/libs/tablesort.min.js new file mode 100644 index 0000000..09de2ae --- /dev/null +++ b/documentation/js/libs/tablesort.min.js @@ -0,0 +1,6 @@ +/*! + * tablesort v5.1.0 (2018-09-14) + * http://tristen.ca/tablesort/demo/ + * Copyright (c) 2018 ; Licensed MIT +*/ +!function(){function a(b,c){if(!(this instanceof a))return new a(b,c);if(!b||"TABLE"!==b.tagName)throw new Error("Element must be a table");this.init(b,c||{})}var b=[],c=function(a){var b;return window.CustomEvent&&"function"==typeof window.CustomEvent?b=new CustomEvent(a):(b=document.createEvent("CustomEvent"),b.initCustomEvent(a,!1,!1,void 0)),b},d=function(a){return a.getAttribute("data-sort")||a.textContent||a.innerText||""},e=function(a,b){return a=a.trim().toLowerCase(),b=b.trim().toLowerCase(),a===b?0:a0)if(a.tHead&&a.tHead.rows.length>0){for(e=0;e0&&l.push(k),m++;if(!l)return}for(m=0;m2&&void 0!==arguments[2]&&arguments[2];for(var s in t)void 0!==i[s]&&(null===i[s]||"object"!==(0,c.default)(i[s])?n(t,i,s,o):"object"===(0,c.default)(t[s])&&e.fillIfDefined(t[s],i[s],o))},e.extend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r=0;r3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r in o)if(o.hasOwnProperty(r)&&-1===t.indexOf(r))if(o[r]&&o[r].constructor===Object)void 0===i[r]&&(i[r]={}),i[r].constructor===Object?e.deepExtend(i[r],o[r]):n(i,o,r,s);else if(Array.isArray(o[r])){i[r]=[];for(var a=0;a2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var r in i)if(i.hasOwnProperty(r)||!0===o)if(i[r]&&i[r].constructor===Object)void 0===t[r]&&(t[r]={}),t[r].constructor===Object?e.deepExtend(t[r],i[r],o):n(t,i,r,s);else if(Array.isArray(i[r])){t[r]=[];for(var a=0;a=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){var o;return-1!=t.indexOf("rgba")?t:-1!=t.indexOf("rgb")?(o=t.substr(t.indexOf("(")+1).replace(")","").split(","),"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"):(o=e.hexToRGB(t),null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")")},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var v={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,l.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=v.split(t.style.cssText),n=v.split(i),s=e.extend(o,n);t.style.cssText=v.join(s)},e.removeCssText=function(t,e){var i=v.split(t.style.cssText),o=v.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=v.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if(null!==i&&"object"===(void 0===i?"undefined":(0,c.default)(i))){for(var o=(0,h.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=function(t){return null!==t&&void 0!==t},s=function(t){return null!==t&&"object"===(void 0===t?"undefined":(0,c.default)(t))};if(!s(t))throw new Error("Parameter mergeTarget must be an object");if(!s(e))throw new Error("Parameter options must be an object");if(!n(i))throw new Error("Parameter option must have a value");if(!s(o))throw new Error("Parameter globalOptions must be an object");var r=e[i],a=s(o)&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(o),d=a?o[i]:void 0,l=d?d.enabled:void 0;if(void 0!==r){if("boolean"==typeof r)return s(t[i])||(t[i]={}),void(t[i].enabled=r);if(null===r&&!s(t[i])){if(!n(d))return;t[i]=(0,h.default)(d)}if(s(r)){var u=!0;void 0!==r.enabled?u=r.enabled:void 0!==l&&(u=d.enabled),function(t,e,i){s(t[i])||(t[i]={});var o=e[i],n=t[i];for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])}(t,e,i),t[i].enabled=u}}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){var s,r,a,h,d=0,l=0,u=t.length-1;for(n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,s=void 0;try{for(var a,h=(0,r.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;ln?1:or)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(n*=-1,i-=n);var d=e.getSVGElement("rect",r,a);d.setAttributeNS(null,"x",t-.5*o),d.setAttributeNS(null,"y",i),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",n),d.setAttributeNS(null,"class",s),h&&d.setAttributeNS(null,"style",h)}}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(19),s=o(n),r=i(6),a=o(r),h=i(8),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=!1,v=void 0,g="background: #FFeeee; color: #dd0000",y=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"validate",value:function(e,i,o){m=!1,v=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),m}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){if(void 0===o[e]&&void 0===o.__any__)return void t.getSuggestion(e,o,n);var s=e,r=!0;void 0===o[e]&&void 0!==o.__any__&&(s="__any__",r="object"===t.getType(i[e]));var a=o[s];r&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,o,s,a,n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=function(i){console.log("%c"+i+t.printLocation(r,e),g)},h=t.getType(i[e]),l=s[h];void 0!==l?"array"===t.getType(l)&&-1===l.indexOf(i[e])?(a('Invalid option detected in "'+e+'". Allowed values are:'+t.print(l)+' not "'+i[e]+'". '),m=!0):"object"===h&&"__any__"!==n&&(r=f.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(a('Invalid type received for "'+e+'". Expected: '+t.print((0,d.default)(s))+". Received ["+h+'] "'+i[e]+'"'),m=!0)}},{key:"getType",value:function(t){var e=void 0===t?"undefined":(0,a.default)(t);return"object"===e?null===t?"null":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":Array.isArray(t)?"array":t instanceof Date?"date":void 0!==t.nodeType?"dom":!0===t._isAMomentObject?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,v,[],!0),r=void 0 +;r=void 0!==n.indexMatch?" in "+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n':s.distance<=4&&n.distance>s.distance?" in "+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""):n.distance<=8?'. Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e):". Did you mean one of these: "+t.print((0,d.default)(i))+t.printLocation(o,e),console.log('%cUnknown option detected: "'+e+'"'+r,g),m=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&!0===n){var c=t.findInOptions(e,i[l],f.copyAndExtendArray(o,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,d=c.indexMatch)}else-1!==l.toLowerCase().indexOf(h)&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=f.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:"performFill",value:function(t,e){this.enableShadow(t,e),t.fill(),this.disableShadow(t,e),this.performStroke(t,e)}},{key:"_addBoundingBoxMargin",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:"_updateBoundingBox",value:function(t,e,i,o,n){void 0!==i&&this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this._updateBoundingBox(t,e,i,o,n)}},{key:"getDimensionsFromLabel",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var o=this.textSize.width,n=this.textSize.height;return 0===o&&(o=14,n=14),{width:o,height:n}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){this.labelModule.getTextSize(t,e,i);var n=2*o.size;this.width=n,this.height=n,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,o,n,s,r,a){if(this.resize(t,s,r,a),this.left=o-this.width/2,this.top=n-this.height/2,this.initContextForDraw(t,a),t[e](o,n,a.size),this.performFill(t,a),void 0!==this.options.label){this.labelModule.calculateLabelSize(t,s,r,o,n,"hanging");var h=n+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(t,o,h,s,r,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),e}(m.default);e.default=v},function(t,e,i){var o=i(78),n=i(51);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(20),n=i(39);t.exports=i(21)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(32);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){t.exports={default:i(138),__esModule:!0}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(188),s=o(n),r=i(77),a=o(r);e.default=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,h=(0,a.default)(t);!(o=(r=h.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,s.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(t,e){t.exports={}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){var o=i(84),n=i(58);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){function o(t,e,i){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0,this.z=void 0!==i?i:0}o.subtract=function(t,e){var i=new o;return i.x=t.x-e.x,i.y=t.y-e.y,i.z=t.z-e.z,i},o.add=function(t,e){var i=new o;return i.x=t.x+e.x,i.y=t.y+e.y,i.z=t.z+e.z,i},o.avg=function(t,e){return new o((t.x+e.x)/2,(t.y+e.y)/2,(t.z+e.z)/2)},o.crossProduct=function(t,e){var i=new o;return i.x=t.y*e.z-t.z*e.y,i.y=t.z*e.x-t.x*e.z,i.z=t.x*e.y-t.y*e.x,i},o.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},t.exports=o},function(t,e,i){var o,n,s;!function(i,r){n=[],o=r,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(0,function(){function t(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,n={},s={keydown:{},keyup:{}},r={};for(e=97;e<=122;e++)r[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)r[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r.delete={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;n=4*a){var c=0,p=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(c=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-c,"days"),p.add(1,"weeks");break;case"weekly":var f=l.diff(d,"days"),m=d.day();d.date(n.date()),d.month(n.month()),d.year(n.year()),l=d.clone(),d.day(m),l.day(m),l.add(f,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),p.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(c=1),d.month(n.month()),d.year(n.year()),d.subtract(1,"months"),l.month(n.month()),l.year(n.year()),l.subtract(1,"months"),l.add(c,"months"),p.add(1,"months");break;case"yearly":d.year()!=l.year()&&(c=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(c,"years"),p.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;d=e[o].start&&e[n].end<=e[o].end?e[n].remove=!0:e[n].start>=e[o].start&&e[n].start<=e[o].end?(e[o].end=e[n].end,e[n].remove=!0):e[n].end>=e[o].start&&e[n].end<=e[o].end&&(e[o].start=e[n].start,e[n].remove=!0));for(o=0;o=r&&nt.range.end){var h={start:t.range.start,end:i};return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale}return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a);return new Date(h+a+t.range.start)},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n=e&&r=e&&r<=i&&(o+=r-s)}return o},e.correctTimeForHidden=function(t,i,o,n){return n=t(n).toDate().valueOf(),n-=e.getHiddenDurationBefore(t,i,o,n)},e.getHiddenDurationBefore=function(t,e,i,o){var n=0;o=t(o).toDate().valueOf();for(var s=0;s=i.start&&a=a&&(n+=a-r)}return n},e.getAccumulatedHiddenDuration=function(t,e,i){for(var o=0,n=0,s=e.start,r=0;r=e.start&&h=i)break;o+=h-a}}return o},e.snapAwayFromHidden=function(t,i,o,n){var s=e.isHidden(i,t);return 1==s.hidden?o<0?1==n?s.startDate-(s.endDate-i)-1:s.startDate-1:1==n?s.endDate+(i-s.startDate)+1:s.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=o&&t0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=(0,h.default)(this.data)}for(var i=0;ithis.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},o.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=o},function(t,e){function i(t){if(t)return o(t)}function o(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}t.exports=i,i.prototype.on=i.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},i.prototype.once=function(t,e){function i(){o.off(t,i),e.apply(this,arguments)}var o=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var o,n=0;n=.4*v}if(this.options.showMinorLabels&&m){var k=this._repaintMinorText(c,y,t,b);k.style.width=_+"px"}f&&this.options.showMajorLabels?(c>0&&(void 0==w&&(w=c),k=this._repaintMajorText(c,s.getLabelMajor(),t,b)),g=this._repaintMajorLine(c,_,t,b)):m?g=this._repaintMinorLine(c,_,t,b):g&&(g.style.width=parseInt(g.style.width)+_+"px")}if(1e3!==x||u||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to 1000 lines."),u=!0),this.options.showMajorLabels){var S=this.body.util.toTime(0),D=s.getLabelMajor(S),M=D.length*(this.props.majorCharWidth||10)+10;(void 0==w||Mt.left&&this.shape.topt.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.leftt.left&&this.shape.boundingBox.topt.top}}],[{key:"updateGroupOptions",value:function(t,e,i){if(void 0!==i){var o=t.group;if(void 0!==e&&void 0!==e.group&&o!==e.group)throw new Error("updateGroupOptions: group values in options don't match.");if("number"==typeof o||"string"==typeof o&&""!=o){var n=i.get(o);h.selectiveNotDeepExtend(["font"],t,n),t.color=h.parseColor(t.color)}}}},{key:"parseOptions",value:function(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments[4],r=["color","fixed","shadow"];if(h.selectiveNotDeepExtend(r,e,i,o),t.checkMass(i),h.mergeOptions(e,i,"shadow",n),void 0!==i.color&&null!==i.color){var a=h.parseColor(i.color);h.fillIfDefined(e.color,a)}else!0===o&&null===i.color&&(e.color=h.bridgeObject(n.color));void 0!==i.fixed&&null!==i.fixed&&("boolean"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&"boolean"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&"boolean"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===o&&null===i.font&&(e.font=h.bridgeObject(n.font)),t.updateGroupOptions(e,i,s),void 0!==i.scaling&&h.mergeOptions(e.scaling,i.scaling,"label",n.scaling)}},{key:"checkMass",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i="";void 0!==e&&(i=" in node id: "+e),console.log("%cNegative or zero mass disallowed"+i+", setting mass to 1.",C),t.mass=1}}}]),t}();e.default=O},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(6),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(2),u=function(){function t(){(0,a.default)(this,t)}return(0,d.default)(t,null,[{key:"choosify",value:function(t,e){var i=["node","edge","label"],o=!0,n=l.topMost(e,"chosen");if("boolean"==typeof n)o=n;else if("object"===(void 0===n?"undefined":(0,s.default)(n))){if(-1===i.indexOf(t))throw new Error("choosify: subOption '"+t+"' should be one of '"+i.join("', '")+"'");var r=l.topMost(e,["chosen",t]);"boolean"!=typeof r&&"function"!=typeof r||(o=r)}return o}},{key:"pointInRect",value:function(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var o={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var n=-i.angle;e={x:Math.cos(n)*o.x-Math.sin(n)*o.y,y:Math.sin(n)*o.x+Math.cos(n)*o.y}}else e=o}var s=t.x+t.width,r=t.y+t.width;return t.lefte.x&&t.tope.y}},{key:"isValidLabel",value:function(t){return"string"==typeof t&&""!==t}}]),t}();e.default=u},function(t,e,i){i(125);for(var o=i(18),n=i(26),s=i(31),r=i(13)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),h=0;hdocument.F=Object<\/script>"),t.close(),h=t.F;o--;)delete h.prototype[s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a.prototype=o(t),i=new a,a.prototype=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(57)("keys"),n=i(40);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(18),n=o["__core-js_shared__"]||(o["__core-js_shared__"]={});t.exports=function(t){return n[t]||(n[t]={})}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){var o=i(20).f,n=i(22),s=i(13)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(135)(!0);i(79)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){e.f=i(13)},function(t,e,i){var o=i(18),n=i(7),s=i(52),r=i(61),a=i(20).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){var i=p().hours(0).minutes(0).seconds(0).milliseconds(0),o=i.clone().add(-3,"days").valueOf(),n=i.clone().add(3,"days").valueOf();this.millisecondsPerPixelCache=void 0,void 0===e?(this.start=o,this.end=n):(this.start=e.start||o,this.end=e.end||n),this.rolling=!1,this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={rtl:!1,start:null,end:null,moment:p,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10,rollingMode:{follow:!1,offset:.5}},this.options=c.extend({},this.defaultOptions),this.props={touch:{}},this.animationTimer=null,this.body.emitter.on("panstart",this._onDragStart.bind(this)),this.body.emitter.on("panmove",this._onDrag.bind(this)),this.body.emitter.on("panend",this._onDragEnd.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.body.dom.rollingModeBtn.addEventListener("click",this.startRolling.bind(this)),this.setOptions(e)}function s(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}var r=i(8),a=o(r),h=i(19),d=o(h),l=i(6),u=o(l),c=i(2),p=i(9),f=i(16),m=i(36);n.prototype=new f,n.prototype.setOptions=function(t){if(t){var e=["animation","direction","min","max","zoomMin","zoomMax","moveable","zoomable","moment","activate","hiddenDates","zoomKey","rtl","showCurrentTime","rollingMode","horizontalScroll"];c.selectiveExtend(e,this.options,t),t.rollingMode&&t.rollingMode.follow&&this.startRolling(),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},n.prototype.startRolling=function(){function t(){e.stopRolling(),e.rolling=!0;var i=e.end-e.start,o=c.convert(new Date,"Date").valueOf(),n=o-i*e.options.rollingMode.offset,s=o+i*(1-e.options.rollingMode.offset),r={animation:!1};e.setRange(n,s,r),i=1/e.conversion(e.body.domProps.center.width).scale/10,i<30&&(i=30),i>1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o,n){i||(i={}),!0!==i.byUser&&(i.byUser=!1);var s=this,r=void 0!=t?c.convert(t,"Date").valueOf():null,h=void 0!=e?c.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),this.millisecondsPerPixelCache=void 0,i.animation){var l=this.start,p=this.end,f="object"===(0,u.default)(i.animation)&&"duration"in i.animation?i.animation.duration:500,v="object"===(0,u.default)(i.animation)&&"easingFunction"in i.animation?i.animation.easingFunction:"easeInOutQuad",g=c.easingFunctions[v];if(!g)throw new Error("Unknown easing function "+(0,d.default)(v)+". Choose from: "+(0,a.default)(c.easingFunctions).join(", "));var y=(new Date).valueOf(),b=!1;return function t(){if(!s.props.touch.dragging){var e=(new Date).valueOf(),a=e-y,d=g(a/f),u=a>f,c=u||null===r?r:l+(r-l)*d,v=u||null===h?h:p+(h-p)*d;_=s._applyRange(c,v),m.updateHiddenDates(s.options.moment,s.body,s.options.hiddenDates),b=b||_;var w={start:new Date(s.start),end:new Date(s.end),byUser:i.byUser,event:i.event};if(n&&n(d,_,u),_&&s.body.emitter.emit("rangechange",w),u){if(b&&(s.body.emitter.emit("rangechanged",w),o))return o()}else s.animationTimer=setTimeout(t,20)}}()}var _=this._applyRange(r,h);if(m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),_){var w={start:new Date(this.start),end:new Date(this.end),byUser:i.byUser,event:i.event};if(this.body.emitter.emit("rangechange",w),clearTimeout(s.timeoutID),s.timeoutID=setTimeout(function(){s.body.emitter.emit("rangechanged",w)},200),o)return o()}},n.prototype.getMillisecondsPerPixel=function(){return void 0===this.millisecondsPerPixelCache&&(this.millisecondsPerPixelCache=(this.end-this.start)/this.body.dom.center.clientWidth),this.millisecondsPerPixelCache},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?c.convert(t,"Date").valueOf():this.start,n=null!=e?c.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?c.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?c.convert(this.options.min,"Date").valueOf():null;if(isNaN(o)||null===o)throw new Error('Invalid start "'+t+'"');if(isNaN(n)||null===n)throw new Error('Invalid end "'+e+'"');if(ns&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o=this.start-.5&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var h=parseFloat(this.options.zoomMax);h<0&&(h=0),n-o>h&&(this.end-this.start===h&&othis.end?(o=this.start,n=this.end):(i=n-o-h,o+=i/2,n-=i/2))}var d=this.start!=o||this.end!=n;return o>=this.start&&o<=this.end||n>=this.start&&n<=this.end||this.start>=o&&this.start<=n||this.end>=o&&this.end<=n||this.body.emitter.emit("checkRangedItems"),this.start=o,this.end=n,d},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.conversion=function(t,e,i,o){return void 0===o&&(o=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-o)}:{offset:0,scale:1}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start;o-=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);var n,r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;n=this.options.rtl?i/r*o:-i/r*o;var a=this.props.touch.start+n,h=this.props.touch.end+n,d=m.snapAwayFromHidden(this.body.hiddenDates,a,this.previousDelta-i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0);if(d!=a||l!=h)return this.deltaDifference+=i,this.props.touch.start=d,this.props.touch.end=l,void this._onDrag(t);this.previousDelta=i,this._applyRange(a,h);var u=new Date(this.start),c=new Date(this.end);this.body.emitter.emit("rangechange",{start:u,end:c,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.prototype._onDragEnd=function(t){this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end),byUser:!0,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),!(this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable)&&this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var i;i=e<0?1-e/5:1/(1+e/5);var o;if(this.rolling)o=this.start+(this.end-this.start)*this.options.rollingMode.offset;else{var n=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);o=this._pointerToDate(n)}this.zoom(i,o,e,t),t.preventDefault()}},n.prototype._onTouch=function(t){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0,c.preventDefault(t)},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){c.preventDefault(t),this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=m.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=m.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d);var l={animation:!1,byUser:!0,event:t};this.setRange(r,a,l),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e,i=t.center?t.center.x:t.clientX;e=this.options.rtl?i-c.getAbsoluteLeft(this.body.dom.centerContainer):c.getAbsoluteRight(this.body.dom.centerContainer)-i;var o=this.body.util.toTime(e);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var o=this.body.domProps.center.height;return e=this.conversion(o),t.y/e.scale+e.offset},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:c.getAbsoluteRight(e)-t.x,y:t.y-c.getAbsoluteTop(e)}:{x:t.x-c.getAbsoluteLeft(e),y:t.y-c.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0) +;var d=m.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l);var u={animation:!1,byUser:!0,event:o};this.setRange(a,h,u),this.startToFront=!1,this.endToFront=!0},n.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,o=this.end+e*t;this.start=i,this.end=o},n.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i,s={animation:!1,byUser:!0,event:null};this.setRange(o,n,s)},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){}var s=i(19),r=o(s),a=i(6),h=o(a),d=i(44),l=i(10),u=i(37),c=i(2),p=i(45),f=i(97),m=i(36),v=i(46);d(n.prototype),n.prototype._create=function(t){function e(t){this.isActive()&&this.emit("mousewheel",t);var e=0,i=0;if("detail"in t&&(i=-1*t.detail),"wheelDelta"in t&&(i=t.wheelDelta),"wheelDeltaY"in t&&(i=t.wheelDeltaY),"wheelDeltaX"in t&&(e=-1*t.wheelDeltaX),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=-1*i,i=0),"deltaY"in t&&(i=-1*t.deltaY),"deltaX"in t&&(e=t.deltaX),this.options.zoomKey&&!t[this.options.zoomKey])if(t.preventDefault(),this.options.verticalScroll&&Math.abs(i)>=Math.abs(e)){var o=this.props.scrollTop,n=o+i;this.isActive()&&(this._setScrollTop(n),this._redraw(),this.emit("scroll",t))}else if(this.options.horizontalScroll){var s=Math.abs(e)>=Math.abs(i)?e:i,r=s/120*(this.range.end-this.range.start)/20,a=this.range.start+r,h=this.range.end+r,d={animation:!1,byUser:!0,event:t};this.range.setRange(a,h,d)}}function i(t){if(s.options.verticalScroll&&(t.preventDefault(),s.isActive())){var e=-t.target.scrollTop;s._setScrollTop(e),s._redraw(),s.emit("scrollSide",t)}}function o(t){if(t.preventDefault&&t.preventDefault(),!(!t.target.className.indexOf("vis")>-1||a))return t.dataTransfer.dropEffect="move",a=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{var e=JSON.parse(t.dataTransfer.getData("text"));if(!e||!e.content)return}catch(t){return!1}return a=!1,t.center={x:t.clientX,y:t.clientY},"item"!==e.target?s.itemSet._onAddItem(t):s.itemSet._onDropObjectOnItem(t),s.emit("drop",s.getEventProperties(t)),!1}this.dom={},this.dom.container=t,this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.rollingModeBtn=document.createElement("div"),this.dom.root.className="vis-timeline",this.dom.background.className="vis-panel vis-background",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical",this.dom.backgroundHorizontal.className="vis-panel vis-background vis-horizontal",this.dom.centerContainer.className="vis-panel vis-center",this.dom.leftContainer.className="vis-panel vis-left",this.dom.rightContainer.className="vis-panel vis-right",this.dom.top.className="vis-panel vis-top",this.dom.bottom.className="vis-panel vis-bottom",this.dom.left.className="vis-content",this.dom.center.className="vis-content",this.dom.right.className="vis-content",this.dom.shadowTop.className="vis-shadow vis-top",this.dom.shadowBottom.className="vis-shadow vis-bottom",this.dom.shadowTopLeft.className="vis-shadow vis-top",this.dom.shadowBottomLeft.className="vis-shadow vis-bottom",this.dom.shadowTopRight.className="vis-shadow vis-top",this.dom.shadowBottomRight.className="vis-shadow vis-bottom",this.dom.rollingModeBtn.className="vis-rolling-mode-btn",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){!0===this.initialDrawDone&&this._redraw()}.bind(this)),this.on("rangechanged",function(){this.initialRangeChangeDone||(this.initialRangeChangeDone=!0)}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=c.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={},["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var a=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,this.initialRangeChangeDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(c.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),"object"!==(0,h.default)(this.options.orientation)&&(this.options.orientation={item:void 0,axis:void 0}),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(t.orientation)&&("item"in t.orientation&&(this.options.orientation.item=t.orientation.item),"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis))),"both"===this.options.orientation.axis){if(!this.timeAxis2){var i=this.timeAxis2=new p(this.body);i.setOptions=function(t){var e=t?c.extend({},t):{};e.orientation="top",p.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);-1!==o&&this.components.splice(o,1),this.timeAxis2.destroy(),this.timeAxis2=null}if("function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),"hiddenDates"in this.options&&m.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new f(this.dom.root)):this.activator&&(this.activator.destroy(),delete this.activator)),"showCustomTime"in t)throw new Error("Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])");this._initAutoResize()}if(this.components.forEach(function(e){return e.setOptions(t)}),"configure"in t){this.configurator||(this.configurator=this._createConfigurator()),this.configurator.setOptions(t.configure);var n=c.deepExtend({},this.options);this.components.forEach(function(t){c.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.prototype.destroy=function(){this.setItems(null),this.setGroups(null),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null,this.activator&&(this.activator.destroy(),delete this.activator);for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){return t.destroy()}),this.body=null},n.prototype.setCustomTime=function(t,e){var i=this.customTimes.filter(function(t){return e===t.options.id});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.prototype.getCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?c.convert(t,"Date").valueOf():new Date;if(this.customTimes.some(function(t){return t.options.id===e}))throw new Error("A custom time with id "+(0,r.default)(e)+" already exists");var o=new v(this.body,c.extend({},this.options,{time:i,id:e}));return this.customTimes.push(o),this.components.push(o),this._redraw(),e},n.prototype.removeCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));e.forEach(function(t){this.customTimes.splice(this.customTimes.indexOf(t),1),this.components.splice(this.components.indexOf(t),1),t.destroy()}.bind(this))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.prototype.fit=function(t,e){var i=this.getDataRange();if(null!==i.min||null!==i.max){var o=i.max-i.min,n=new Date(i.min.valueOf()-.01*o),s=new Date(i.max.valueOf()+.01*o),r=!t||void 0===t.animation||t.animation;this.range.setRange(n,s,{animation:r},e)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i,o){"function"==typeof arguments[2]&&(o=arguments[2],i={});var n,s;1==arguments.length?(s=arguments[0],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n})):2==arguments.length&&"function"==typeof arguments[1]?(s=arguments[0],o=arguments[1],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n},o)):(n=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,{animation:n},o))},n.prototype.moveTo=function(t,e,i){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.range.end-this.range.start,n=c.convert(t,"Date").valueOf(),s=n-o/2,r=n+o/2,a=!e||void 0===e.animation||e.animation;this.range.setRange(s,r,{animation:a},i)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=r/(1+t),h=(r-a)/2,d=n+h,l=s-h;this.setWindow(d,l,e,i)}},n.prototype.zoomOut=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=n-r*t/2,h=s+r*t/2;this.setWindow(a,h,e,i)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(c.addClassName(o.root,"vis-top"),c.removeClassName(o.root,"vis-bottom")):(c.removeClassName(o.root,"vis-top"),c.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=c.option.asSize(e.maxHeight,""),o.root.style.minHeight=c.option.asSize(e.minHeight,""),o.root.style.width=c.option.asSize(e.width,""),i.border.left=(o.centerContainer.offsetWidth-o.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(o.centerContainer.offsetHeight-o.centerContainer.clientHeight)/2,i.border.bottom=i.border.top,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=o.root.offsetWidth-o.root.clientWidth,0===o.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===o.root.clientHeight&&(i.borderRootWidth=i.borderRootHeight),i.center.height=o.center.offsetHeight,i.left.height=o.left.offsetHeight,i.right.height=o.right.offsetHeight,i.top.height=o.top.clientHeight||-i.border.top,i.bottom.height=o.bottom.clientHeight||-i.border.bottom;var n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=c.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=c.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.heighti.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});if(t){if(this.redrawCount<5)return void this.body.emitter.emit("_change");console.log("WARNING: infinite loop in redraw?")}else this.redrawCount=0;this.body.emitter.emit("changed")}},n.prototype._setDOM=function(){var t=this.props,e=this.dom;t.leftContainer.width=t.left.width,t.rightContainer.width=t.right.width;var i=t.root.width-t.left.width-t.right.width-t.borderRootWidth;t.center.width=i,t.centerContainer.width=i,t.top.width=i,t.bottom.width=i,e.background.style.height=t.background.height+"px",e.backgroundVertical.style.height=t.background.height+"px",e.backgroundHorizontal.style.height=t.centerContainer.height+"px",e.centerContainer.style.height=t.centerContainer.height+"px",e.leftContainer.style.height=t.leftContainer.height+"px",e.rightContainer.style.height=t.rightContainer.height+"px",e.background.style.width=t.background.width+"px",e.backgroundVertical.style.width=t.centerContainer.width+"px",e.backgroundHorizontal.style.width=t.background.width+"px",e.centerContainer.style.width=t.center.width+"px",e.top.style.width=t.top.width+"px",e.bottom.style.width=t.bottom.width+"px",e.background.style.left="0",e.background.style.top="0",e.backgroundVertical.style.left=t.left.width+t.border.left+"px",e.backgroundVertical.style.top="0",e.backgroundHorizontal.style.left="0",e.backgroundHorizontal.style.top=t.top.height+"px",e.centerContainer.style.left=t.left.width+"px",e.centerContainer.style.top=t.top.height+"px",e.leftContainer.style.left="0",e.leftContainer.style.top=t.top.height+"px",e.rightContainer.style.left=t.left.width+t.center.width+"px",e.rightContainer.style.top=t.top.height+"px",e.top.style.left=t.left.width+"px",e.top.style.top="0",e.bottom.style.left=t.left.width+"px",e.bottom.style.top=t.top.height+t.centerContainer.height+"px",e.center.style.left="0",e.left.style.left="0",e.right.style.left="0"},n.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},n.prototype.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},n.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},n.prototype._toTime=function(t){return m.toTime(this,t,this.props.center.width)},n.prototype._toGlobalTime=function(t){return m.toTime(this,t,this.props.root.width)},n.prototype._toScreen=function(t){return m.toScreen(this,t,this.props.center.width)},n.prototype._toGlobalScreen=function(t){return m.toScreen(this,t,this.props.root.width)},n.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},n.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){if(1!=t.options.autoResize)return void t._stopAutoResize();t.dom.root&&(t.dom.root.offsetWidth==t.props.lastWidth&&t.dom.root.offsetHeight==t.props.lastHeight||(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,t.props.scrollbarWidth=c.getScrollBarWidth(),t.body.emitter.emit("_change")))},c.addEventListener(window,"resize",this._onResize),t.dom.root&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight),this.watchTimer=setInterval(this._onResize,1e3)},n.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),this._onResize&&(c.removeEventListener(window,"resize",this._onResize),this._onResize=null)},n.prototype._onTouch=function(t){this.touch.allowDragging=!0,this.touch.initialScrollTop=this.props.scrollTop},n.prototype._onPinch=function(t){this.touch.allowDragging=!1},n.prototype._onDrag=function(t){if(t&&this.touch.allowDragging){var e=t.deltaY,i=this._getScrollTop(),o=this._setScrollTop(this.touch.initialScrollTop+e);this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),o!=i&&this.emit("verticalDrag")}},n.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},n.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("top"!=this.options.orientation.item&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop0&&this.current.milliseconds()0&&this.current.seconds()0&&this.current.minutes()0&&this.current.hours()0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){31104e9>t&&(this.scale="year",this.step=1e3),15552e9>t&&(this.scale="year",this.step=500),31104e8>t&&(this.scale="year",this.step=100),15552e8>t&&(this.scale="year",this.step=50),31104e7>t&&(this.scale="year",this.step=10),15552e7>t&&(this.scale="year",this.step=5),31104e6>t&&(this.scale="year",this.step=1),7776e6>t&&(this.scale="month",this.step=3),2592e6>t&&(this.scale="month",this.step=1),432e6>t&&(this.scale="day",this.step=5),1728e5>t&&(this.scale="day",this.step=2),864e5>t&&(this.scale="day",this.step=1),432e5>t&&(this.scale="weekday",this.step=1),144e5>t&&(this.scale="hour",this.step=4),36e5>t&&(this.scale="hour",this.step=1),9e5>t&&(this.scale="minute",this.step=15),6e5>t&&(this.scale="minute",this.step=10),3e5>t&&(this.scale="minute",this.step=5),6e4>t&&(this.scale="minute",this.step=1),15e3>t&&(this.scale="second",this.step=15),1e4>t&&(this.scale="second",this.step=10),5e3>t&&(this.scale="second",this.step=5),1e3>t&&(this.scale="second",this.step=1),200>t&&(this.scale="millisecond",this.step=200),100>t&&(this.scale="millisecond",this.step=100),50>t&&(this.scale="millisecond",this.step=50),10>t&&(this.scale="millisecond",this.step=10),5>t&&(this.scale="millisecond",this.step=5),1>t&&(this.scale="millisecond",this.step=1)}},o.snap=function(t,e,i){var o=n(t);if("year"==e){var s=o.year()+Math.round(o.month()/12);o.year(Math.round(s/i)*i),o.month(0),o.date(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("month"==e)o.date()>15?(o.date(1),o.add(1,"month")):o.date(1),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("week"==e)o.weekday()>2?(o.weekday(0),o.add(1,"week")):o.weekday(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("day"==e){switch(i){case 5:case 2:o.hours(24*Math.round(o.hours()/24));break;default:o.hours(12*Math.round(o.hours()/12))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("weekday"==e){switch(i){case 5:case 2:o.hours(12*Math.round(o.hours()/12));break;default:o.hours(6*Math.round(o.hours()/6))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("hour"==e){switch(i){case 4:o.minutes(60*Math.round(o.minutes()/60));break;default:o.minutes(30*Math.round(o.minutes()/30))}o.seconds(0),o.milliseconds(0)}else if("minute"==e){switch(i){case 15:case 10:o.minutes(5*Math.round(o.minutes()/5)),o.seconds(0);break;case 5:o.seconds(60*Math.round(o.seconds()/60));break;default:o.seconds(30*Math.round(o.seconds()/30))}o.milliseconds(0)}else if("second"==e)switch(i){case 15:case 10:o.seconds(5*Math.round(o.seconds()/5)),o.milliseconds(0);break;case 5:o.milliseconds(1e3*Math.round(o.milliseconds()/1e3));break;default:o.milliseconds(500*Math.round(o.milliseconds()/500))}else if("millisecond"==e){var r=i>5?i/2:1;o.milliseconds(Math.round(o.milliseconds()/r)*r)}return o},o.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.scale){case"year":case"month":case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.scale){case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}var t=this.moment(this.current);switch(this.scale){case"millisecond":return 0==t.milliseconds();case"second":return 0==t.seconds();case"minute":return 0==t.hours()&&0==t.minutes();case"hour":return 0==t.hours();case"weekday":case"day":case"week":return 1==t.date();case"month":return 0==t.month();case"year":default:return!1}},o.prototype.getLabelMinor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];switch(this.scale){case"week":if(this.isMajor()&&0!==t.weekday())return"";default:return e&&e.length>0?this.moment(t).format(e):""}},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);var e=this.format.majorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getClassName=function(){function t(t){return t/a%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(n().add(1,"day"),"day")?" vis-tomorrow":t.isSame(n().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"week")?" vis-current-week":""}function o(t){return t.isSame(new Date,"month")?" vis-current-month":""}var n=this.moment,s=this.moment(this.current),r=s.locale?s.locale("en"):s.lang("en"),a=this.step,h=[];switch(this.scale){case"millisecond":h.push(e(r)),h.push(t(r.milliseconds()));break;case"second":h.push(e(r)),h.push(t(r.seconds()));break;case"minute":h.push(e(r)),h.push(t(r.minutes()));break;case"hour":h.push("vis-h"+r.hours()+(4==this.step?"-h"+(r.hours()+4):"")),h.push(e(r)),h.push(t(r.hours()));break;case"weekday":h.push("vis-"+r.format("dddd").toLowerCase()),h.push(e(r)),h.push(i(r)),h.push(t(r.date()));break;case"day":h.push("vis-day"+r.date()),h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(e(r)),h.push(o(r)),h.push(this.step<=2?e(r):""),h.push(this.step<=2?"vis-"+r.format("dddd").toLowerCase():""), +h.push(t(r.date()-1));break;case"week":h.push("vis-week"+r.format("w")),h.push(i(r)),h.push(t(r.week()));break;case"month":h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(o(r)),h.push(t(r.month()));break;case"year":h.push("vis-year"+r.year()),h.push(function(t){return t.isSame(new Date,"year")?" vis-current-year":""}(r)),h.push(t(r.year()))}return h.filter(String).join(" ")},t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={rtl:!1,showCurrentTime:!0,moment:r,locales:a,locale:"en"},this.options=n.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var n=i(2),s=i(16),r=i(9),a=i(98);o.prototype=new s,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-current-time",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},o.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},o.prototype.setOptions=function(t){t&&n.selectiveExtend(["rtl","showCurrentTime","moment","locale","locales"],this.options,t)},o.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=this.options.moment((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),o=this.options.locales[this.options.locale];o||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),o=this.options.locales.en);var n=o.current+" "+o.time+": "+e.format("dddd, MMMM Do YYYY, H:mm:ss");n=n.charAt(0).toUpperCase()+n.substring(1),this.options.rtl?this.bar.style.right=i+"px":this.bar.style.left=i+"px",this.bar.title=n}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},o.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,o=1/i/10;o<30&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.groupId=t,this.subgroups={},this.subgroupStack={},this.subgroupStackAll=!1,this.doInnerStack=!1,this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.isVisible=null,this.stackDirty=!0,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),e&&e.subgroupStack)if("boolean"==typeof e.subgroupStack)this.doInnerStack=e.subgroupStack,this.subgroupStackAll=e.subgroupStack;else for(var o in e.subgroupStack)this.subgroupStack[o]=e.subgroupStack[o],this.doInnerStack=this.doInnerStack||e.subgroupStack[o];this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],this.orderedItems={byStart:[],byEnd:[]},this.checkRangedItems=!1;var n=this;this.itemSet.body.emitter.on("checkRangedItems",function(){n.checkRangedItems=!0}),this._create(),this.setData(e)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(100);o.prototype._create=function(){var t=document.createElement("div");this.itemSet.options.groupEditable.order?t.className="vis-label draggable":t.className="vis-label",this.dom.label=t;var e=document.createElement("div");e.className="vis-inner",t.appendChild(e),this.dom.inner=e;var i=document.createElement("div");i.className="vis-group",i["timeline-group"]=this,this.dom.foreground=i,this.dom.background=document.createElement("div"),this.dom.background.className="vis-group",this.dom.axis=document.createElement("div"),this.dom.axis.className="vis-group",this.dom.marker=document.createElement("div"),this.dom.marker.style.visibility="hidden",this.dom.marker.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=t&&t.content,e instanceof Element){for(this.dom.inner.appendChild(e);this.dom.inner.firstChild;)this.dom.inner.removeChild(this.dom.inner.firstChild);this.dom.inner.appendChild(e)}else e instanceof Object?i(t,this.dom.inner):this.dom.inner.innerHTML=void 0!==e&&null!==e?e:this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?r.removeClassName(this.dom.inner,"vis-hidden"):r.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),r.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(r.removeClassName(this.dom.label,o),r.addClassName(this.dom.label,"expanded")):(r.removeClassName(this.dom.label,"expanded"),r.addClassName(this.dom.label,o))}else this.nestedGroups&&(this.nestedGroups=null,o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed",r.removeClassName(this.dom.label,o),r.removeClassName(this.dom.label,"expanded"),r.removeClassName(this.dom.label,"vis-nesting-group"));t&&t.nestedInGroup&&(r.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null;n!=this.className&&(this.className&&(r.removeClassName(this.dom.label,this.className),r.removeClassName(this.dom.foreground,this.className),r.removeClassName(this.dom.background,this.className),r.removeClassName(this.dom.axis,this.className)),r.addClassName(this.dom.label,n),r.addClassName(this.dom.foreground,n),r.addClassName(this.dom.background,n),r.addClassName(this.dom.axis,n),this.className=n),this.style&&(r.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(r.addCssText(this.dom.label,t.style),this.style=t.style)},o.prototype.getLabelWidth=function(){return this.props.label.width},o.prototype._didMarkerHeightChange=function(){var t=this.dom.marker.clientHeight;if(t!=this.lastMarkerHeight){this.lastMarkerHeight=t;var e={},i=0;r.forEach(this.items,function(t,o){if(t.dirty=!0,t.displayed){e[o]=t.redraw(!0),i=e[o].length}});if(i>0)for(var o=0;o0)for(var u=0;u0){var e=this;this.resetSubgroups(),r.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},o.prototype._isGroupVisible=function(t,e){return this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(r.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,r.forEach(i,function(t){t.top-=s})}e=n+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},o.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},o.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var o=this.dom.axis;o.parentNode&&o.parentNode.removeChild(o)},o.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),this.stackDirty=!0,void 0!==t.data.subgroup&&(this._addToSubgroup(t),this.orderSubgroups()),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end||t.data.start,visible:!1,index:this.subgroupIndex,items:[],stack:this.subgroupStackAll||this.subgroupStack[e]||!1},this.subgroupIndex++),new Date(t.data.start)new Date(this.subgroups[e].end)&&(this.subgroups[e].end=i),this.subgroups[e].items.push(t)},o.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.end||t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.start,n=i-1;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)new Date(n)&&(n=e)}),t.subgroups[e].start=o,t.subgroups[e].end=new Date(n-1)}},o.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t,e=[];if("string"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push({subgroup:t,sortField:this.subgroups[t].items[0].data[this.subgroupOrderer]});e.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push(this.subgroups[t].items[0].data);e.sort(this.subgroupOrderer)}if(e.length>0)for(var i=0;i=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},o.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},o.prototype.order=function(){for(var t=r.toArray(this.items),e=[],i=[],o=0;o0)for(var l=0;lh}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;lh})}var p={},f=0;for(l=0;l0)for(var v=0;v=0&&(r=e[s],!n(r));s--)void 0===o[r.id]&&(o[r.id]=!0,i.push(r));for(s=t+1;st.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.visibleFrame=document.createElement("div"),this.dom.visibleFrame.className="vis-item-visible-frame",this.dom.box.appendChild(this.dom.visibleFrame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className=this.baseClassName+e,this.dom.content.style.maxWidth="none"}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.frame).overflow,{content:{width:this.dom.content.offsetWidth},box:{height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=t.box.height,this.dom.content.style.maxWidth="",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDeleteButton(this.dom.box),this._repaintDragCenter(),this._repaintDragLeft(),this._repaintDragRight()},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.displayed=!1}},o.prototype.repositionX=function(t){var e,i,o=this.parent.width,n=this.conversion.toScreen(this.data.start),s=this.conversion.toScreen(this.data.end),r=void 0===this.data.align?this.options.align:this.data.align;!1===this.data.limitSize||void 0!==t&&!0!==t||(n<-o&&(n=-o),s>2*o&&(s=2*o));var a=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=a+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=a,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=a+"px",r){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(a-i,0)+"px":this.dom.content.style.left=Math.max(a-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((a-i)/2,0)+"px":this.dom.content.style.left=Math.max((a-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+e+"px)")}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype._repaintDragLeft=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="vis-drag-left",t.dragLeftItem=this,this.dom.box.appendChild(t),this.dom.dragLeft=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragLeft||(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},o.prototype._repaintDragRight=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="vis-drag-right",t.dragRightItem=this,this.dom.box.appendChild(t),this.dom.dragRight=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragRight||(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(179).default,f=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},c.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new p(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===(void 0===t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),!1===this.options.filter&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):!0!==e&&-1===e.indexOf(n)||(o=!0),!1!==o&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(!0===this.options.showButton){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),n=1;n2&&void 0!==arguments[2]&&arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,o.innerHTML=!0===i?""+t+":":t+":",o}},{key:"_makeDropdown",value:function(t,e,i){var o=document.createElement("select");o.className="vis-configuration vis-config-select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;ss&&1!==s&&(a.max=Math.ceil(1.2*e),d=a.max,h="range increased"),a.value=e}else a.value=o;var l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;var u=this;a.onchange=function(){l.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};var c=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,c,a,l);""!==h&&this.popupHistory[p]!==d&&(this.popupHistory[p]=d,this._setupPopup(h,p))}},{key:"_setupPopup",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=!1,n=this.options.filter,s=!1;for(var r in t)if(t.hasOwnProperty(r)){o=!0;var a=t[r],h=c.copyAndExtendArray(e,r);if("function"==typeof n&&!1===(o=n(r,e))&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==o){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(-1!==e.indexOf("physics")&&this.moduleOptions.physics.solver!==r&&(l=!1),!0===l)if(void 0!==a.enabled){var u=c.copyAndExtendArray(h,"enabled"),p=this._getValue(u);if(!0===p){var f=this._makeLabel(r,h,!0);this._makeItem(h,f),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,p,h)}else{var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}return s}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i;t="true"===t||t,t="false"!==t&&t;for(var n=0;nvar options = "+(0,s.default)(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;ethis.imageObj.height?i=this.imageObj.width/this.imageObj.height:o=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*o}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(t,e,i,o){this.initContextForDraw(t,o),t.circle(e,i,o.size),this.performFill(t,o)}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale),this.imageObj.drawImageAtPosition(t,i,this.left,this.top,this.width,this.height),this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,o,n){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(t,o,n);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,s,o,n,"hanging")}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(6),a=o(r),h=i(29),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(117).default,v=i(48).default,g=i(215).default,y=i(217).default,b=i(218).default,_=i(219).default,w=function(){function t(e,i,o,n){if((0,u.default)(this,t),void 0===i)throw new Error("No body provided");this.options=f.bridgeObject(o),this.globalOptions=o,this.defaultOptions=n,this.body=i,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new m(this.body,this.options,!0),this.setOptions(e)}return(0,p.default)(t,[{key:"setOptions",value:function(e){if(e){t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=parseFloat(e.value));var i=[e,this.options,this.defaultOptions];this.chooser=v.choosify("edge",i),this.updateLabelModule(e);var o=this.updateEdgeType();return this._setInteractionWidths(),this.connect(),void 0===e.hidden&&void 0===e.physics||(o=!0),o}}},{key:"getFormattingValues",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,o=this.options.color.inherit,n={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,arrowStrikethrough:this.options.arrowStrikethrough,color:o?void 0:this.options.color.color,inheritsColor:o,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var s=this.options.selectionWidth;"function"==typeof s?n.width=s(n.width):"number"==typeof s&&(n.width+=s),n.width=Math.max(n.width,.3/this.body.view.scale),n.color=this.options.color.highlight,n.shadow=this.options.shadow.enabled}else if(this.hover){var r=this.options.hoverWidth;"function"==typeof r?n.width=r(n.width):"number"==typeof r&&(n.width+=r),n.width=Math.max(n.width,.3/this.body.view.scale),n.color=this.options.color.hover,n.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(n,this.options.id,this.selected,this.hover),void 0!==n.color&&(n.inheritsColor=!1),!1===n.shadow&&(n.shadowColor===this.options.shadow.color&&n.shadowSize===this.options.shadow.size&&n.shadowX===this.options.shadow.x&&n.shadowY===this.options.shadow.y||(n.shadow=!0)));else n.shadow=this.options.shadow.enabled,n.width=Math.max(n.width,.3/this.body.view.scale);return n}},{key:"updateLabelModule",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof y&&!0===t.enabled&&"dynamic"===t.type||this.edgeType instanceof g&&!0===t.enabled&&"cubicBezier"===t.type||this.edgeType instanceof b&&!0===t.enabled&&"dynamic"!==t.type&&"cubicBezier"!==t.type||this.edgeType instanceof _&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?"dynamic"===t.type?(e=!0,this.edgeType=new y(this.options,this.body,this.labelModule)):"cubicBezier"===t.type?this.edgeType=new g(this.options,this.body,this.labelModule):this.edgeType=new b(this.options,this.body,this.labelModule):this.edgeType=new _(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),n=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*s}this.options.width=this.options.scaling.min+o*n}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),o={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(o.from=this.edgeType.getArrowData(t,"from",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=o.from.core)),e.toArrow&&(o.to=this.edgeType.getArrowData(t,"to",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=o.to.core)),e.middleArrow&&(o.middle=this.edgeType.getArrowData(t,"middle",i,this.selected,this.hover,e)),this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawArrows(t,o,e),this.drawLabel(t,i)}}},{key:"drawArrows",value:function(t,e,i){i.fromArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.from),i.middleArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.middle),i.toArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.to)}},{key:"drawLabel",value:function(t,e){if(void 0!==this.options.label){var i=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),i.id!=o.id){this.labelModule.pointToSelf=!1;var n=this.edgeType.getPoint(.5,e);t.save();var s=this._getRotation(t);0!=s.angle&&(t.translate(s.x,s.y),t.rotate(s.angle)),this.labelModule.draw(t,n.x,n.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var r,a,h=this.options.selfReferenceSize;i.shape.width>i.shape.height?(r=i.x+.5*i.shape.width,a=i.y-h):(r=i.x+h,a=i.y-.5*i.shape.height),n=this._pointOnCircle(r,a,h,.125),this.labelModule.draw(t,n.x,n.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();v.pointInRect(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var o={left:t.x,top:t.y};return this.isOverlappingWith(o)&&e.push({edgeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,o=this.to.x,n=this.to.y,s=t.left,r=t.top;return this.edgeType.getDistanceToEdge(e,i,o,n,s,r)<10}return!1}},{key:"_getRotation",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var o={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return o;if("horizontal"===this.options.font.align)return o;var n=this.from.y-this.to.y,s=this.from.x-this.to.x,r=Math.atan2(n,s);return(r<-1&&s<0||r>0&&s<0)&&(r+=Math.PI),o.angle=r,o}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=["arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width","font","chosen","widthConstraint"];if(f.selectiveDeepExtend(r,t,e,i),v.isValidLabel(e.label)?t.label=e.label:t.label=void 0,f.mergeOptions(t,e,"smooth",o),f.mergeOptions(t,e,"shadow",o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=(0,d.default)(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),f.mergeOptions(t.scaling,e.scaling,"label",o.scaling)):!0===i&&null===e.scaling&&(t.scaling=(0,d.default)(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var h=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=h.indexOf("to"),t.arrows.middle.enabled=-1!=h.indexOf("middle"),t.arrows.from.enabled=-1!=h.indexOf("from")}else{if("object"!==(0,a.default)(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(e.arrows));f.mergeOptions(t.arrows,e.arrows,"to",o.arrows),f.mergeOptions(t.arrows,e.arrows,"middle",o.arrows),f.mergeOptions(t.arrows,e.arrows,"from",o.arrows)}else!0===i&&null===e.arrows&&(t.arrows=(0,d.default)(o.arrows));if(void 0!==e.color&&null!==e.color){var l=e.color,u=t.color;if(n)f.deepExtend(u,o.color,!1,i);else for(var c in u)u.hasOwnProperty(c)&&delete u[c];if(f.isString(u))u.color=u,u.highlight=u,u.hover=u,u.inherit=!1,void 0===l.opacity&&(u.opacity=1);else{var p=!1;void 0!==l.color&&(u.color=l.color,p=!0),void 0!==l.highlight&&(u.highlight=l.highlight,p=!0),void 0!==l.hover&&(u.hover=l.hover,p=!0),void 0!==l.inherit&&(u.inherit=l.inherit),void 0!==l.opacity&&(u.opacity=Math.min(1,Math.max(0,l.opacity))),!0===p?u.inherit=!1:void 0===u.inherit&&(u.inherit="from")}}else!0===i&&null===e.color&&(t.color=f.bridgeObject(o.color));!0===i&&null===e.font&&(t.font=f.bridgeObject(o.font))}}]),t}();e.default=w},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(118),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_findBorderPositionBezier",value:function(t,e){var i,o,n,s,r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),h=0,d=0,l=1,u=this.to,c=!1;for(t.id===this.from.id&&(u=this.from,c=!0);d<=l&&h<10;){var p=.5*(d+l);if(i=this.getPoint(p,a),o=Math.atan2(u.y-i.y,u.x-i.x),n=u.distanceToBorder(e,o),s=Math.sqrt(Math.pow(i.x-u.x,2)+Math.pow(i.y-u.y,2)),r=n-s,Math.abs(r)<.2)break;r<0?!1===c?d=p:l=p:!1===c?l=p:d=p,h++}return i.t=p,i}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r){var a=1e9,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=t,f=e;for(d=1;d<10;d++)l=.1*d,u=Math.pow(1-l,2)*t+2*l*(1-l)*r.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*r.y+Math.pow(l,2)*o,d>0&&(h=this._getDistanceToLine(p,f,u,c,n,s),a=h1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.shape.boundingBox.left&&(s=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.x&&(s=e.x),re.y&&(o=e.y),nh;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(22),n=i(41),s=i(56)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(50),n=i(13)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){var o=i(17),n=i(7),s=i(28);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){var o=i(84),n=i(58).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(42),n=i(39),s=i(25),r=i(53),a=i(22),h=i(81),d=Object.getOwnPropertyDescriptor;e.f=i(21)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e,i){t.exports={default:i(162),__esModule:!0}},function(t,e,i){function o(t,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=o},function(t,e,i){function o(t,e){if(void 0===t)throw new Error("No container element defined");if(this.container=t,this.visible=!e||void 0==e.visible||e.visible,this.visible){this.frame=document.createElement("DIV"),this.frame.style.width="100%",this.frame.style.position="relative",this.container.appendChild(this.frame),this.frame.prev=document.createElement("INPUT"),this.frame.prev.type="BUTTON",this.frame.prev.value="Prev",this.frame.appendChild(this.frame.prev),this.frame.play=document.createElement("INPUT"),this.frame.play.type="BUTTON",this.frame.play.value="Play",this.frame.appendChild(this.frame.play),this.frame.next=document.createElement("INPUT"),this.frame.next.type="BUTTON",this.frame.next.value="Next",this.frame.appendChild(this.frame.next),this.frame.bar=document.createElement("INPUT"),this.frame.bar.type="BUTTON",this.frame.bar.style.position="absolute",this.frame.bar.style.border="1px solid red",this.frame.bar.style.width="100px",this.frame.bar.style.height="6px",this.frame.bar.style.borderRadius="2px",this.frame.bar.style.MozBorderRadius="2px",this.frame.bar.style.border="1px solid #7F7F7F",this.frame.bar.style.backgroundColor="#E5E5E5",this.frame.appendChild(this.frame.bar),this.frame.slide=document.createElement("INPUT"),this.frame.slide.type="BUTTON",this.frame.slide.style.margin="0px",this.frame.slide.value=" ",this.frame.slide.style.position="relative",this.frame.slide.style.left="-100px",this.frame.appendChild(this.frame.slide);var i=this;this.frame.slide.onmousedown=function(t){i._onMouseDown(t)},this.frame.prev.onclick=function(t){i.prev(t)},this.frame.play.onclick=function(t){i.togglePlay(t)},this.frame.next.onclick=function(t){i.next(t)}}this.onChangeCallback=void 0,this.values=[],this.index=void 0,this.playTimeout=void 0,this.playInterval=1e3,this.playLoop=!0}var n=i(2);o.prototype.prev=function(){var t=this.getIndex();t>0&&(t--,this.setIndex(t))},o.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},o.prototype.setIndex=function(t){if(!(tthis.values.length-1&&(o=this.values.length-1),o},o.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10;return t/(this.values.length-1)*e+3},o.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,o=this.leftToIndex(i);this.setIndex(o),n.preventDefault()},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",n.removeEventListener(document,"mousemove",this.onmousemove),n.removeEventListener(document,"mouseup",this.onmouseup),n.preventDefault()},t.exports=o},function(t,e,i){function o(t,e,i,o){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,o)}o.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.prototype.setRange=function(t,e,i,o){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(i))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t||0,this._end=e||0,this.setStep(i,o)},o.prototype.setStep=function(t,e){void 0===t||t<=0||(void 0!==e&&(this.prettyStep=e),!0===this.prettyStep?this._step=o.calculatePrettyStep(t):this._step=t)},o.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),o=2*Math.pow(10,Math.round(e(t/2))),n=5*Math.pow(10,Math.round(e(t/5))),s=i;return Math.abs(o-t)<=Math.abs(s-t)&&(s=o),Math.abs(n-t)<=Math.abs(s-t)&&(s=n),s<=0&&(s=1),s},o.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},o.prototype.getStep=function(){return this._step},o.prototype.start=function(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()this._end},t.exports=o},function(t,e,i){function o(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function n(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e){return void 0===t||""===t?e:t+n(e)}function r(t,e,i,o){for(var n,r,a=0;ar&&(t=o(t)*r),i(e)>r&&(e=o(e)*r),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},o.prototype.getOffset=function(){return this.cameraOffset},o.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},o.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),void 0===t&&void 0===e||this.calculateCameraOrientation()},o.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},o.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.setOffset(this.cameraOffset.x,this.cameraOffset.y),this.calculateCameraOrientation())}, +o.prototype.getArmLength=function(){return this.armLength},o.prototype.getCameraLocation=function(){return this.cameraLocation},o.prototype.getCameraRotation=function(){return this.cameraRotation},o.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal;var t=this.cameraRotation.x,e=this.cameraRotation.z,i=this.cameraOffset.x,o=this.cameraOffset.y,n=Math.sin,s=Math.cos;this.cameraLocation.x=this.cameraLocation.x+i*s(e)+o*-n(e)*s(t),this.cameraLocation.y=this.cameraLocation.y+i*n(e)+o*s(e)*s(t),this.cameraLocation.z=this.cameraLocation.z+o*n(t)},t.exports=o},function(t,e,i){function o(t,e,i){this.dataGroup=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=t.getDistinctValues(this.column),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var n=i(12);o.prototype.isLoaded=function(){return this.loaded},o.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},o.prototype.getLabel=function(){return this.graph.filterLabel},o.prototype.getColumn=function(){return this.column},o.prototype.getSelectedValue=function(){if(void 0!==this.index)return this.values[this.index]},o.prototype.getValues=function(){return this.values},o.prototype.getValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");return this.values[t]},o.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var o=new n(this.dataGroup.getDataSet(),{filter:function(t){return t[i.column]==i.value}}).get();e=this.dataGroup._getDataPoints(o),this.dataPoints[t]=e}return e},o.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},o.prototype.selectValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");this.index=t,this.value=this.values[t]},o.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0){var n=i.groupsData.getDataSet();n.get().forEach(function(t){if(t.nestedGroups){0!=t.showNested&&(t.showNested=!0);var e=[];t.nestedGroups.forEach(function(i){var o=n.get(i);o&&(o.nestedInGroup=t.id,0==t.showNested&&(o.visible=!1),e=e.concat(o))}),n.update(e,o)}})}},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.popup=null,this.touchParams={},this.groupTouchParams={},this._create(),this.setOptions(e)}var s=i(29),r=o(s),a=i(6),h=o(a),d=i(10),l=i(2),u=i(11),c=i(12),p=i(66),f=i(16),m=i(68),v=i(69),g=i(101),y=i(102),b=i(70),_=i(103),w=i(104).default,x="__ungrouped__",k="__background__";n.prototype=new f,n.types={background:_,box:g,range:b,point:y},n.prototype._create=function(){var t=document.createElement("div");t.className="vis-itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="vis-background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="vis-foreground",t.appendChild(i),this.dom.foreground=i;var o=document.createElement("div");o.className="vis-axis",this.dom.axis=o;var n=document.createElement("div");n.className="vis-labelset",this.dom.labelSet=n,this._updateUngrouped();var s=new v(k,null,this);s.show(),this.groups[k]=s,this.hammer=new d(this.body.dom.centerContainer),this.hammer.on("hammer.input",function(t){t.isFirst&&this._onTouch(t)}.bind(this)),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_HORIZONTAL}),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("press",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.options.rtl?this.groupHammer=new d(this.body.dom.rightContainer):this.groupHammer=new d(this.body.dom.leftContainer),this.groupHammer.on("tap",this._onGroupClick.bind(this)),this.groupHammer.on("panstart",this._onGroupDragStart.bind(this)),this.groupHammer.on("panmove",this._onGroupDrag.bind(this)),this.groupHammer.on("panend",this._onGroupDragEnd.bind(this)),this.groupHammer.get("pan").set({threshold:5,direction:d.DIRECTION_VERTICAL}),this.body.dom.centerContainer.addEventListener("mouseover",this._onMouseOver.bind(this)),this.body.dom.centerContainer.addEventListener("mouseout",this._onMouseOut.bind(this)),this.body.dom.centerContainer.addEventListener("mousemove",this._onMouseMove.bind(this)),this.body.dom.centerContainer.addEventListener("contextmenu",this._onDragEnd.bind(this)),this.body.dom.centerContainer.addEventListener("mousewheel",this._onMouseWheel.bind(this)),this.show()},n.prototype.setOptions=function(t){if(t){var e=["type","rtl","align","order","stack","stackSubgroups","selectable","multiselect","multiselectPerGroup","groupOrder","dataAttributes","template","groupTemplate","visibleFrameTemplate","hide","snap","groupOrderSwap","showTooltips","tooltip","tooltipOnItemUpdateTime"];l.selectiveExtend(e,this.options,t),"itemsAlwaysDraggable"in t&&("boolean"==typeof t.itemsAlwaysDraggable?(this.options.itemsAlwaysDraggable.item=t.itemsAlwaysDraggable,this.options.itemsAlwaysDraggable.range=!1):"object"===(0,h.default)(t.itemsAlwaysDraggable)&&(l.selectiveExtend(["item","range"],this.options.itemsAlwaysDraggable,t.itemsAlwaysDraggable),this.options.itemsAlwaysDraggable.item||(this.options.itemsAlwaysDraggable.range=!1))),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.item="top"===t.orientation?"top":"bottom":"object"===(0,h.default)(t.orientation)&&"item"in t.orientation&&(this.options.orientation.item=t.orientation.item)),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"===(0,h.default)(t.margin)&&(l.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"===(0,h.default)(t.margin.item)&&l.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable,this.options.editable.overrideItems=!1):"object"===(0,h.default)(t.editable)&&l.selectiveExtend(["updateTime","updateGroup","add","remove","overrideItems"],this.options.editable,t.editable)),"groupEditable"in t&&("boolean"==typeof t.groupEditable?(this.options.groupEditable.order=t.groupEditable,this.options.groupEditable.add=t.groupEditable,this.options.groupEditable.remove=t.groupEditable):"object"===(0,h.default)(t.groupEditable)&&l.selectiveExtend(["order","add","remove"],this.options.groupEditable,t.groupEditable));["onDropObjectOnItem","onAdd","onUpdate","onRemove","onMove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup"].forEach(function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this)),this.markDirty()}},n.prototype.markDirty=function(t){this.groupIds=[],t&&t.refreshItems&&l.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()})},n.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},n.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},n.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||(this.options.rtl?this.body.dom.right.appendChild(this.dom.labelSet):this.body.dom.left.appendChild(this.dom.labelSet))},n.prototype.setSelection=function(t){var e,i,o,n;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;et&&o.push(h.id):h.lefte&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;i0){for(var w={},x=0;x<_;x++)l.forEach(b,function(t,e){w[e]=t[x]()});l.forEach(this.groups,function(t,e){if(e!==k){var i=w[e];s=i||s,g+=t.height}}),g=Math.max(g,y)}return g=Math.max(g,y),r.style.height=i(g),this.props.width=r.offsetWidth,this.props.height=g,this.dom.axis.style.top=i("top"==n?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.options.rtl?this.dom.axis.style.right="0":this.dom.axis.style.left="0",this.initialItemSetDrawn=!0,s=this._isResized()||s},n.prototype._firstGroup=function(){var t="top"==this.options.orientation.item?0:this.groupIds.length-1,e=this.groupIds[t];return this.groups[e]||this.groups[x]||null},n.prototype._updateUngrouped=function(){var t,e,i=this.groups[x];if(this.groupsData){if(i){i.hide(),delete this.groups[x];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)||t.hide()}}}else if(!i){i=new m(null,null,this),this.groups[x]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},n.prototype.getLabelSet=function(){return this.dom.labelSet},n.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof u||t instanceof c))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(l.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;l.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}this.body.emitter.emit("_change",{queue:!0})},n.prototype.getItems=function(){return this.itemsData},n.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(l.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof u||t instanceof c))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var o=this.groupsData;this.groupsData instanceof c&&(o=this.groupsData.getDataSet()),o.get().forEach(function(t){t.nestedGroups&&t.nestedGroups.forEach(function(e){var i=o.get(e);i.nestedInGroup=t.id,0==t.showNested&&(i.visible=!1),o.update(i)})});var n=this.id;l.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype.getGroups=function(){return this.groupsData},n.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},n.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},n.prototype._getGroupId=function(t){return"background"==this._getType(t)&&void 0==t.group?k:this.groupsData?t.group:x},n.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i,o=e.itemsData.get(t,e.itemOptions),s=e.items[t],r=o?e._getType(o):null,a=n.types[r];if(s&&(a&&s instanceof a?e._updateItem(s,o):(i=s.selected,e._removeItem(s),s=null)),!s&&o){if(!a)throw"rangeoverflow"==r?new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: .vis-item.vis-range .vis-item-content {overflow: visible;}'):new TypeError('Unknown item type "'+r+'"');s=new a(o,e.conversion,e.options),s.id=t,e._addItem(s),i&&(this.selection.push(t),s.select())}}.bind(this)),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onAdd=n.prototype._onUpdate,n.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var o=i.items[t];o&&(e++,i._removeItem(o))}),e&&(this._order(),this.body.emitter.emit("_change",{queue:!0}))},n.prototype._order=function(){l.forEach(this.groups,function(t){t.order()})},n.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},n.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),o=e.groups[t];if(o)o.setData(i);else{if(t==x||t==k)throw new Error("Illegal group id. "+t+" is a reserved id.");var n=(0,r.default)(e.options);l.extend(n,{height:null}),o=new m(t,i,e),e.groups[t]=o;for(var s in e.items)if(e.items.hasOwnProperty(s)){var a=e.items[s];a.data.group==t&&o.add(a)}o.order(),o.show()}}),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder});t=this._orderNestedGroups(t);var e=!l.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},n.prototype._orderNestedGroups=function(t){var e=[];return t.forEach(function(t){var i=this.groupsData.get(t);if(i.nestedInGroup||e.push(t),i.nestedGroups){var o=this.groupsData.get({filter:function(e){return e.nestedInGroup==t},order:this.options.groupOrder}),n=o.map(function(t){return t.id});e=e.concat(n)}},this),e},n.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i?i&&i.data&&i.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1,i&&i.add(t)},n.prototype._updateItem=function(t,e){t.setData(e);var i=this._getGroupId(t.data),o=this.groups[i];o?o&&o.data&&o.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1},n.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},n.prototype._constructByEndArray=function(t){for(var e=[],i=0;in)return}}if(i&&i!=this.groupTouchParams.group){var a=e.get(i.groupId),h=e.get(this.groupTouchParams.group.groupId);h&&a&&(this.options.groupOrderSwap(h,a,e),e.update(h),e.update(a));var d=e.getIds({order:this.options.groupOrder});if(!l.equalArray(d,this.groupTouchParams.originalOrder))for(var u=this.groupTouchParams.originalOrder,p=this.groupTouchParams.group.groupId,f=Math.min(u.length,d.length),m=0,v=0,g=0;m=f)break;if(d[m+v]==p)v=1;else if(u[m+g]==p)g=1;else{var y=d.indexOf(u[m+g]),b=e.get(d[m+v]),_=e.get(u[m+g]);this.options.groupOrderSwap(b,_,e),e.update(b),e.update(_);var w=d[m+v];d[m+v]=u[m+g],d[y]=w,m++}}}}},n.prototype._onGroupDragEnd=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this,i=e.groupTouchParams.group.groupId,o=e.groupsData.getDataSet(),n=l.extend({},o.get(i));e.options.onMoveGroup(n,function(t){if(t)t[o._fieldId]=i,o.update(t);else{var n=o.getIds({order:e.options.groupOrder});if(!l.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),u=o.get(s[a]);e.options.groupOrderSwap(d,u,o),o.update(d),o.update(u);var c=n[a];n[a]=s[a],n[h]=c,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.prototype._onSelectItem=function(t){if(this.options.selectable){var e=t.srcEvent&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey),i=t.srcEvent&&t.srcEvent.shiftKey;if(e||i)return void this._onMultiSelectItem(t);var o=this.getSelection(),n=this.itemFromTarget(t),s=n?[n.id]:[];this.setSelection(s);var r=this.getSelection();(r.length>0||o.length>0)&&this.body.emitter.emit("select",{items:r,event:t})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){if(e!==this.itemFromRelatedTarget(t)){var i=e.getTitle();if(this.options.showTooltips&&i){null==this.popup&&(this.popup=new w(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(i);var o=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(o)+o.offsetLeft,t.clientY-l.getAbsoluteTop(o)+o.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){e!==this.itemFromRelatedTarget(t)&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){if(this.itemFromTarget(t)&&this.options.showTooltips&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var e=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(e)+e.offsetLeft,t.clientY-l.getAbsoluteTop(e)+e.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onDropObjectOnItem=function(t){var e=this.itemFromTarget(t),i=JSON.parse(t.dataTransfer.getData("text"));this.options.onDropObjectOnItem(i,e)},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e,i,o=this,n=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e);var s,r,a=this.body.util.toTime(i),h=this.body.util.getScale(),d=this.body.util.getStep();"drop"==t.type?(r=JSON.parse(t.dataTransfer.getData("text")),r.content=r.content?r.content:"new item",r.start=r.start?r.start:n?n(a,h,d):a,r.type=r.type||"box",r[this.itemsData._fieldId]=r.id||l.randomUUID(),"range"!=r.type||r.end||(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s)):(r={start:n?n(a,h,d):a,content:"new item"},r[this.itemsData._fieldId]=l.randomUUID(),"range"===this.options.type&&(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s));var u=this.groupFromTarget(t);u&&(r.group=u.groupId),r=this._cloneItemData(r),this.options.onAdd(r,function(e){e&&(o.itemsData.getDataSet().add(e),"drop"==t.type&&o.setSelection([e.id]))})}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){ +var i=this.options.multiselect?this.getSelection():[];if((t.srcEvent&&t.srcEvent.shiftKey||!1)&&this.options.multiselect){var o=this.itemsData.get(e.id).group,s=void 0;this.options.multiselectPerGroup&&i.length>0&&(s=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=s&&s!=o||i.push(e.id);var r=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||s==o){i=[];for(var a in this.items)if(this.items.hasOwnProperty(a)){var h=this.items[a],d=h.data.start,l=void 0!==h.data.end?h.data.end:d;!(d>=r.min&&l<=r.max)||this.options.multiselectPerGroup&&s!=this.itemsData.get(h.id).group||h instanceof _||i.push(h.id)}}}else{var u=i.indexOf(e.id);-1==u?i.push(e.id):i.splice(u,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){var e=t.center?t.center.y:t.clientY,i=this.groupIds;i.length<=0&&this.groupsData&&(i=this.groupsData.getIds({order:this.options.groupOrder}));for(var o=0;oa&&ea)return s}else if(0===o&&es&&(s=r.top+r.height)}while(a)}}o.height=s-o.top+.5*i.item.vertical},e.nostack=function(t,i,o,n){for(var s=0;so[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;ao[h].index&&(o[r].top+=o[h].height);for(var d=t[r],l=0;le.right&&t.top-i.vertical+.001e.top:t.left-i.horizontal+.001e.left&&t.top-i.vertical+.001e.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.tope.top||e.start<=t.start&&e.end>=t.start&&e.topt.top}},function(t,e,i){function o(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.options.align,i=this.width*t.getMillisecondsPerPixel();return"right"==e?this.data.start.getTime()>t.start&&this.data.start.getTime()-it.start&&this.data.start.getTime()t.start&&this.data.start.getTime()-i/2t.start&&this.data.startt.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.background;if(!t)throw new Error("Cannot redraw item: parent has no background container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var t=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"");this.dom.box.className=this.baseClassName+t}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.content).overflow,{content:{width:this.dom.content.offsetWidth}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=0,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=r.prototype.show,o.prototype.hide=r.prototype.hide,o.prototype.repositionX=r.prototype.repositionX,o.prototype.repositionY=function(t){var e,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup;this.dom.box.style.height=this.parent.subgroups[o].height+"px",this.dom.box.style.top="top"==i?this.parent.top+this.parent.subgroups[o].top+"px":this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i){(0,s.default)(this,t),this.container=e,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(t,[{key:"setPosition",value:function(t,e){this.x=parseInt(t),this.y=parseInt(e)}},{key:"setText",value:function(t){t instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(t)):this.frame.innerHTML=t}},{key:"show",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,o=this.frame.parentNode.clientHeight,n=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,h=!0;this.y-en-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),rn&&(s=n-i-this.padding),s0){var r={};for(this._getRelevantData(s,r,o,n),this._applySampling(s,r),e=0;e0)switch(t.options.style){case"line":d.hasOwnProperty(s[e])||(d[s[e]]=m.calcPath(r[s[e]],t)),m.draw(d[s[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||v.draw(r[s[e]],t,this.framework)}}}return a.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;at[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,t[a].y=0==o?t[a].orginalY+r.y:t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var n,s,a,h;if(t.length>0)for(s=0;s0)for(var o=0;o0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l0){for(s=0;s0&&(n=this.groups[t[s]],!0===r.stack&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));f.getStackedYRange(a,i,t,"__barStackLeft","left"),f.getStackedYRange(h,i,t,"__barStackRight","right")}},o.prototype._updateYAxis=function(t,e){var i,o,n=!1,s=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var u=0;ui?i:a,d=di?i:h,l=l=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),!0===t.master&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var r=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(r=this.props.titleCharHeight);var h=!0===this.options.icons?Math.max(this.options.iconWidth,r)+this.options.labelOffsetX+15:r+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-h&&!0===this.options.visible?(this.width=this.maxLabelSize+h,this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+h),this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var s=a.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>h.magnitudefactor*h.minorSteps[h.minorStepIdx]*.5?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}o.prototype.setCharHeight=function(t){this.majorCharHeight=t},o.prototype.setHeight=function(t){this.containerHeight=t},o.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r=e){n=!0,this.minorStepIdx=r;break}}if(!0===n)break}},o.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])==0},o.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},o.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},o.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},o.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},o.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdxo+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&ue.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];r.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){i={svg:document.createElementNS("http://www.w3.org/2000/svg","svg"),svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":h.drawIcon(this,o,n,t,e,i);break;case"points":case"point":d.drawIcon(this,o,n,t,e,i);break;case"bar":a.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;ot[o].y?t[o].y:e,i=i0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t0?(o=t0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupIde[s].screen_y?e[s].screen_y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0){return 1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o,n=e;if(i)for(o=t.length-2;o>0;o--)n+=t[o][0]+","+t[o][1]+" ";else for(o=1;o0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+c*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+c*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+p*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+p*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i");this.dom.textArea.innerHTML=r,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,s.default)(this.groups);t.sort(function(t,e){return t=0;i--){var a=s[i];a.nodes||(a.nodes=[]),-1===a.nodes.indexOf(n)&&a.nodes.push(n)}e.attr&&(n.attr=h(n.attr,e.attr))}function u(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=h({},t.edge);e.attr=h(i,e.attr)}}function c(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=h({},t.edge)),s.attr=h(s.attr||{},n),s}function p(){for(F=I.NULL,L="";" "===z||"\t"===z||"\n"===z||"\r"===z;)s();do{var t=!1;if("#"===z){for(var e=A-1;" "===R.charAt(e)||"\t"===R.charAt(e);)e--;if("\n"===R.charAt(e)||""===R.charAt(e)){for(;""!=z&&"\n"!=z;)s();t=!0}}if("/"===z&&"/"===r()){for(;""!=z&&"\n"!=z;)s();t=!0}if("/"===z&&"*"===r()){for(;""!=z;){if("*"===z&&"/"===r()){s(),s();break}s()}t=!0}for(;" "===z||"\t"===z||"\n"===z||"\r"===z;)s()}while(t);if(""===z)return void(F=I.DELIMITER);var i=z+r();if(N[i])return F=I.DELIMITER,L=i,s(),void s();if(N[z])return F=I.DELIMITER,L=z,void s();if(a(z)||"-"===z){for(L+=z,s();a(z);)L+=z,s();return"false"===L?L=!1:"true"===L?L=!0:isNaN(Number(L))||(L=Number(L)),void(F=I.IDENTIFIER)}if('"'===z){for(s();""!=z&&('"'!=z||'"'===z&&'"'===r());)'"'===z?(L+=z,s()):"\\"===z&&"n"===r()?(L+="\n",s()):L+=z,s();if('"'!=z)throw x('End of string " expected');return s(),void(F=I.IDENTIFIER)}for(F=I.UNKNOWN;""!=z;)L+=z,s();throw new SyntaxError('Syntax error in part "'+k(L,30)+'"')}function f(){var t={};if(n(),p(),"strict"===L&&(t.strict=!0,p()),"graph"!==L&&"digraph"!==L||(t.type=L,p()),F===I.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)v(t),";"===L&&p()}function v(t){var e=g(t);if(e)return void _(t,e);if(!y(t)){if(F!=I.IDENTIFIER)throw x("Identifier expected");var i=L;if(p(),"="===L){if(p(),F!=I.IDENTIFIER)throw x("Identifier expected");t[i]=L,p()}else b(t,i)}}function g(t){var e=null;if("subgraph"===L&&(e={},e.type="subgraph",p(),F===I.IDENTIFIER&&(e.id=L,p())),"{"===L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function y(t){return"node"===L?(p(),t.node=w(),"node"):"edge"===L?(p(),t.edge=w(),"edge"):"graph"===L?(p(),t.graph=w(),"graph"):null}function b(t,e){var i={id:e},o=w();o&&(i.attr=o),l(t,i),_(t,e)}function _(t,e){for(;"->"===L||"--"===L;){var i,o=L;p();var n=g(t);if(n)i=n;else{if(F!=I.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,l(t,{id:i}),p()}u(t,c(t,e,i,o,w())),e=i}}function w(){for(var t=null,e={dashed:!0,solid:!1,dotted:[1,5]};"["===L;){for(p(),t={};""!==L&&"]"!=L;){if(F!=I.IDENTIFIER)throw x("Attribute name expected");var i=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),F!=I.IDENTIFIER)throw x("Attribute value expected");var o=L;"style"===i&&(o=e[o]),d(t,i,o),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+k(L,30)+'" (char '+A+")")}function k(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function D(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r":!0,"--":!0},R="",A=0,z="",L="",F=I.NULL,B=/[a-zA-Z_0-9.:#]/;e.parseDOT=o,e.DOTToGraph=C},function(t,e,i){function o(t,e){var i=[],o=[],n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};void 0!==e&&(void 0!==e.fixed&&(n.nodes.fixed=e.fixed),void 0!==e.parseColor&&(n.nodes.parseColor=e.parseColor),void 0!==e.inheritColor&&(n.edges.inheritColor=e.inheritColor));for(var s=t.edges,r=t.nodes,a=0;a2&&void 0!==arguments[2]&&arguments[2];(0,d.default)(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=o}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),p.isValidLabel(t.label)?this.labelDirty=!0:t.label="",void 0!==t.font&&null!==t.font)if("string"==typeof t.font)this.baseSize=this.fontOptions.size;else if("object"===(0,a.default)(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:"initFontOptions",value:function(e){var i=this;if(c.forEach(m,function(t){i.fontOptions[t]={}}),t.parseFontString(this.fontOptions,e))return void(this.fontOptions.vadjust=0);c.forEach(e,function(t,e){void 0!==t&&null!==t&&"object"!==(void 0===t?"undefined":(0,a.default)(t))&&(i.fontOptions[e]=t)})}},{key:"constrain",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=c.topMost(t,"widthConstraint");if("number"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if("object"===(void 0===i?"undefined":(0,a.default)(i))){var o=c.topMost(t,["widthConstraint","maximum"]);"number"==typeof o&&(e.maxWdt=Number(o));var n=c.topMost(t,["widthConstraint","minimum"]);"number"==typeof n&&(e.minWdt=Number(n))}var s=c.topMost(t,"heightConstraint");if("number"==typeof s)e.minHgt=Number(s);else if("object"===(void 0===s?"undefined":(0,a.default)(s))){var r=c.topMost(t,["heightConstraint","minimum"]);"number"==typeof r&&(e.minHgt=Number(r));var h=c.topMost(t,["heightConstraint","valign"]);"string"==typeof h&&("top"!==h&&"bottom"!==h||(e.valign=h))}return e}},{key:"update",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),c.deepExtend(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=p.choosify("label",e)}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"addFontOptionsToPile",value:function(t,e){for(var i=0;i5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r=this.elementOptions.scaling.label.maxVisible&&(r=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,o,n,e,i,s),this._drawBackground(t),this._drawText(t,e,this.size.yLine,s,r))}}},{key:"_drawBackground",value:function(t){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:"_drawText",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",n=arguments[4],r=this._setAlignment(t,e,i,o),a=(0,s.default)(r,2);e=a[0],i=a[1],t.textAlign="left",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var h=0;h0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin="round"),t.fillStyle=m,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=d.height}}}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=4):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t,e,i){var o=t||"#000000",n=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=c.overrideOpacity(o,s),n=c.overrideOpacity(n,s)}return[o,n]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":t=i,e=.5*-this.size.height;break;case"top":t=i,e=-(this.size.height+2);break;case"bottom":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=n-.5*this.size.height,this.size.yLine=n+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(t,e,i,o){var n=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},s={color:n(this.fontOptions,o,"color"),size:n(this.fontOptions,o,"size"),face:n(this.fontOptions,o,"face"),mod:n(this.fontOptions,o,"mod"),vadjust:n(this.fontOptions,o,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&("normal"===o&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?s.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(s,this.elementOptions.id,e,i));var r="";return void 0!==s.mod&&""!==s.mod&&(r+=s.mod+" "),r+=s.size+"px "+s.face,t.font=r.replace(/"/g,""),s.font=t.font,s.height=s.size,s}},{key:"differentState",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:"_processLabelText",value:function(t,e,i,o){return new f(t,this,e,i).process(o)}},{key:"_processLabel",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var o=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&o.width0&&o.heighto.shape.height?(e=o.x+.5*o.shape.width,i=o.y-n):(e=o.x+n,i=o.y-.5*o.shape.height),[e,i,n]}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){for(var o=i.x,n=i.y,s=i.low,r=i.high,a=i.direction,h=0,d=this.options.selfReferenceSize,l=void 0,u=void 0,c=void 0,p=void 0,f=void 0,m=.5*(s+r);s<=r&&h<10&&(m=.5*(s+r),l=this._pointOnCircle(o,n,d,m),u=Math.atan2(t.y-l.y,t.x-l.x),c=t.distanceToBorder(e,u),p=Math.sqrt(Math.pow(l.x-t.x,2)+Math.pow(l.y-t.y,2)),f=c-p,!(Math.abs(f)<.05));)f>0?a>0?s=m:r=m:a>0?r=m:s=m,h++;return l.t=m,l}},{key:"getLineWidth",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this.body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this.body.view.scale):Math.max(this.options.width,.3/this.body.view.scale)}},{key:"getColor",value:function(t,e,i,o){if(!1!==e.inheritsColor){if("both"===e.inheritsColor&&this.from.id!==this.to.id){var n=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),s=void 0,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,!1===this.from.selected&&!1===this.to.selected?(s=l.overrideOpacity(this.from.options.color.border,e.opacity),r=l.overrideOpacity(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?r=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(s=this.from.options.color.border),n.addColorStop(0,s),n.addColorStop(1,r),n}return"to"===e.inheritsColor?l.overrideOpacity(this.to.options.color.border,e.opacity):l.overrideOpacity(this.from.options.color.border,e.opacity)}return l.overrideOpacity(e.color,e.opacity)}},{key:"_circle", +value:function(t,e,i,o,n){this.enableShadow(t,e),t.beginPath(),t.arc(i,o,n,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,o,n,r,a,h){var d=0;if(this.from!=this.to)d=this._getDistanceToEdge(t,e,i,o,n,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],p=u[1],f=u[2],m=c-n,v=p-r;d=Math.abs(Math.sqrt(m*m+v*v)-f)}return d}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,h=r*r+a*a,d=((n-t)*r+(s-e)*a)/h;d>1?d=1:d<0&&(d=0);var l=t+d*r,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"getArrowData",value:function(t,e,i,o,n,r){var a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=r.width;if("from"===e?(d=this.from,l=this.to,u=.1,c=r.fromArrowScale,p=r.fromArrowType):"to"===e?(d=this.to,l=this.from,u=-.1,c=r.toArrowScale,p=r.toArrowType):(d=this.to,l=this.from,c=r.middleArrowScale,p=r.middleArrowType),d!=l)if("middle"!==e)if(!0===this.options.smooth.enabled){h=this.findBorderPosition(d,t,{via:i});var m=this.getPoint(Math.max(0,Math.min(1,h.t+u)),i);a=Math.atan2(h.y-m.y,h.x-m.x)}else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.findBorderPosition(d,t);else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.getPoint(.5,i);else{var v=this._getCircleData(t),g=(0,s.default)(v,3),y=g[0],b=g[1],_=g[2];"from"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.25,high:.6,direction:-1}),a=-2*h.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.6,high:1,direction:1}),a=-2*h.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(h=this._pointOnCircle(y,b,_,.175),a=3.9269908169872414)}"middle"===e&&c<0&&(f*=-1);var w=15*c+3*f;return{point:h,core:{x:h.x-.9*w*Math.cos(a),y:h.y-.9*w*Math.sin(a)},angle:a,length:w,type:p}}},{key:"drawArrowHead",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,u.draw(t,n),this.enableShadow(t,e),t.fill(),this.disableShadow(t,e)}},{key:"enableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(4),a=o(r),h=i(5),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"transform",value:function(t,e){t instanceof Array||(t=[t]);for(var i=e.point.x,o=e.point.y,n=e.angle,s=e.length,r=0;r0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;s0&&this._getForceContributions(n.root,t)}}},{key:"_getForceContributions",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=void 0,o=void 0,n=void 0;i=t.centerOfMass.x-e.x,o=t.centerOfMass.y-e.y,n=Math.sqrt(i*i+o*o),n*t.calcSize>this.thetaInversed?this._calculateForces(n,i,o,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(n,i,o,e,t)}}},{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1,e=t),this.overlapAvoidanceFactor<1&&o.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=this.options.gravitationalConstant*n.mass*o.options.mass/Math.pow(t,3),r=e*s,a=i*s;this.physicsBody.forces[o.id].x+=r,this.physicsBody.forces[o.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i=void 0,o=e.length,n=t[e[0]].x,s=t[e[0]].y,r=t[e[0]].x,a=t[e[0]].y,h=1;h0&&(lr&&(r=l),ua&&(a=u))}var c=Math.abs(r-n)-Math.abs(a-s);c>0?(s-=.5*c,a+=.5*c):(n+=.5*c,r-=.5*c);var p=Math.max(1e-5,Math.abs(r-n)),f=.5*p,m=.5*(n+r),v=.5*(s+a),g={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:m-f,maxX:m+f,minY:v-f,maxY:v+f},size:p,calcSize:1/p,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(g.root);for(var y=0;y0&&this._placeInTree(g.root,i);return g}},{key:"_updateBranchMass",value:function(t,e){var i=t.centerOfMass,o=t.mass+e.options.mass,n=1/o;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=n,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=n,t.mass=o;var s=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?o.maxY>e.y?"NW":"SW":o.maxY>e.y?"NE":"SE",this._placeInRegion(t,e,n)}},{key:"_placeInRegion",value:function(t,e,i){var o=t.children[i];switch(o.childrenCount){case 0:o.children.data=e,o.childrenCount=1,this._updateBranchMass(o,e);break;case 1:o.children.data.x===e.x&&o.children.data.y===e.y?(e.x+=this.seededRandom(),e.y+=this.seededRandom()):(this._splitBranch(o),this._placeInTree(o,e));break;case 4:this._placeInTree(o,e)}}},{key:"_splitBranch",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)}},{key:"_insertRegion",value:function(t,e){var i=void 0,o=void 0,n=void 0,s=void 0,r=.5*t.size;switch(e){case"NW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY,s=t.range.minY+r;break;case"NE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY,s=t.range.minY+r;break;case"SW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY+r,s=t.range.maxY;break;case"SE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY+r,s=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:o,minY:n,maxY:s},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value:function(t,e,i){void 0===i&&(i="#FF0000"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t=void 0,e=void 0,i=void 0,o=void 0,n=this.body.nodes,s=this.physicsBody.physicsNodeIndices,r=this.physicsBody.forces,a=0;a=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(54),n=i(39),s=i(59),r={};i(26)(r,i(13)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(20),n=i(27),s=i(33);t.exports=i(21)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(25),n=i(132),s=i(133);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if((a=h[l++])!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(55),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e,i){var o=i(55),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(18).document;t.exports=o&&o.documentElement},function(t,e,i){var o=i(55),n=i(51);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):r-56320+(s-55296<<10)+65536)}}},function(t,e,i){var o=i(27),n=i(137);t.exports=i(7).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(86),n=i(13)("iterator"),s=i(31);t.exports=i(7).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){i(139);var o=i(7).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(17);o(o.S,"Object",{create:i(54)})},function(t,e,i){i(141),t.exports=i(7).Object.keys},function(t,e,i){var o=i(41),n=i(33);i(87)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){t.exports={default:i(143),__esModule:!0}},function(t,e,i){i(60),i(49),t.exports=i(61).f("iterator")},function(t,e,i){t.exports={default:i(145),__esModule:!0}},function(t,e,i){i(146),i(151),i(152),i(153),t.exports=i(7).Symbol},function(t,e,i){var o=i(18),n=i(22),s=i(21),r=i(17),a=i(83),h=i(147).KEY,d=i(28),l=i(57),u=i(59),c=i(40),p=i(13),f=i(61),m=i(62),v=i(148),g=i(149),y=i(27),b=i(25),_=i(53),w=i(39),x=i(54),k=i(150),S=i(89),D=i(20),M=i(33),C=S.f,O=D.f,E=k.f,T=o.Symbol,P=o.JSON,I=P&&P.stringify,N=p("_hidden"),R=p("toPrimitive"),A={}.propertyIsEnumerable,z=l("symbol-registry"),L=l("symbols"),F=l("op-symbols"),B=Object.prototype,j="function"==typeof T,H=o.QObject,W=!H||!H.prototype||!H.prototype.findChild,Y=s&&d(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=C(B,e);o&&delete B[e],O(t,e,i),o&&t!==B&&O(B,e,o)}:O,G=function(t){var e=L[t]=x(T.prototype);return e._k=t,e},V=j&&"symbol"==typeof T.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof T},U=function(t,e,i){return t===B&&U(F,e,i),y(t),e=_(e,!0),y(i),n(L,e)?(i.enumerable?(n(t,N)&&t[N][e]&&(t[N][e]=!1),i=x(i,{enumerable:w(0,!1)})):(n(t,N)||O(t,N,w(1,{})),t[N][e]=!0),Y(t,e,i)):O(t,e,i)},q=function(t,e){y(t);for(var i,o=v(e=b(e)),n=0,s=o.length;s>n;)U(t,i=o[n++],e[i]);return t},X=function(t,e){return void 0===e?x(t):q(x(t),e)},Z=function(t){var e=A.call(this,t=_(t,!0));return!(this===B&&n(L,t)&&!n(F,t))&&(!(e||!n(this,t)||!n(L,t)||n(this,N)&&this[N][t])||e)},K=function(t,e){if(t=b(t),e=_(e,!0),t!==B||!n(L,e)||n(F,e)){var i=C(t,e);return!i||!n(L,e)||n(t,N)&&t[N][e]||(i.enumerable=!0),i}},J=function(t){for(var e,i=E(b(t)),o=[],s=0;i.length>s;)n(L,e=i[s++])||e==N||e==h||o.push(e);return o},$=function(t){for(var e,i=t===B,o=E(i?F:b(t)),s=[],r=0;o.length>r;)!n(L,e=o[r++])||i&&!n(B,e)||s.push(L[e]);return s};j||(T=function(){if(this instanceof T)throw TypeError("Symbol is not a constructor!");var t=c(arguments.length>0?arguments[0]:void 0),e=function(i){this===B&&e.call(F,i),n(this,N)&&n(this[N],t)&&(this[N][t]=!1),Y(this,t,w(1,i))};return s&&W&&Y(B,t,{configurable:!0,set:e}),G(t)},a(T.prototype,"toString",function(){return this._k}),S.f=K,D.f=U,i(88).f=k.f=J,i(42).f=Z,i(63).f=$,s&&!i(52)&&a(B,"propertyIsEnumerable",Z,!0),f.f=function(t){return G(p(t))}),r(r.G+r.W+r.F*!j,{Symbol:T});for(var Q="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Q.length>tt;)p(Q[tt++]);for(var et=M(p.store),it=0;et.length>it;)m(et[it++]);r(r.S+r.F*!j,"Symbol",{for:function(t){return n(z,t+="")?z[t]:z[t]=T(t)},keyFor:function(t){if(!V(t))throw TypeError(t+" is not a symbol!");for(var e in z)if(z[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),r(r.S+r.F*!j,"Object",{create:X,defineProperty:U,defineProperties:q,getOwnPropertyDescriptor:K,getOwnPropertyNames:J,getOwnPropertySymbols:$}),P&&r(r.S+r.F*(!j||d(function(){var t=T();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!V(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&g(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!V(e))return e}),o[1]=e,I.apply(P,o)}}}),T.prototype[R]||i(26)(T.prototype,R,T.prototype.valueOf),u(T,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(40)("meta"),n=i(32),s=i(22),r=i(20).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(28)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},c=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},p=function(t){return d&&f.NEED&&h(t)&&!s(t,o)&&l(t),t},f=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:c,onFreeze:p}},function(t,e,i){var o=i(33),n=i(63),s=i(42);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e,i){var o=i(50);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(25),n=i(88).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e){},function(t,e,i){i(62)("asyncIterator")},function(t,e,i){i(62)("observable")},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(0,function(){function e(){return Co.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function n(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}function s(t){return void 0===t}function r(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i0)for(i=0;i0?"future":"past"];return D(i)?i(e):i.replace(/%s/i,e)}function A(t,e){var i=t.toLowerCase();Lo[i]=Lo[i+"s"]=Lo[e]=t}function z(t){return"string"==typeof t?Lo[t]||Lo[t.toLowerCase()]:void 0}function L(t){var e,i,o={};for(i in t)d(t,i)&&(e=z(i))&&(o[e]=t[i]);return o}function F(t,e){Fo[t]=e}function B(t){var e=[];for(var i in t)e.push({unit:i,priority:Fo[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,e,i){var o=""+Math.abs(t),n=e-o.length;return(t>=0?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function H(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Wo[t]=n),e&&(Wo[e[0]]=function(){return j(n.apply(this,arguments),e[1],e[2])}),i&&(Wo[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function Y(t){var e,i,o=t.match(Bo);for(e=0,i=o.length;e=0&&jo.test(t);)t=t.replace(jo,i),jo.lastIndex=0,o-=1;return t}function U(t,e,i){an[t]=D(e)?e:function(t,o){return t&&i?i:e}}function q(t,e){return d(an,t)?an[t](e._strict,e._locale):new RegExp(X(t))}function X(t){return Z(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function Z(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function K(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),r(e)&&(o=function(t,i){i[e]=_(t)}),i=0;i=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i;return-(7+_t(t,0,o).getUTCDay()-e)%7+o-1}function xt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=wt(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=Q(s)+d):d>Q(t)?(s=t+1,r=d-Q(t)):(s=t,r=d),{year:s,dayOfYear:r}}function kt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+St(n,e,i)):r>St(t.year(),e,i)?(o=r-St(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function St(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(Q(t)-o+n)/7}function Dt(t){return kt(t,this._week.dow,this._week.doy).week}function Mt(){return this._week.dow}function Ct(){return this._week.doy}function Ot(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Et(t){var e=kt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Tt(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function It(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Nt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Rt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function At(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=u([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=yn.call(this._weekdaysParse,r),-1!==n?n:null):"ddd"===e?(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null):(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"dddd"===e?-1!==(n=yn.call(this._weekdaysParse,r))?n:-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"ddd"===e?-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):-1!==(n=yn.call(this._minWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null)}function zt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return At.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=u([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Lt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Tt(t,this.localeData()),this.add(t-e,"d")):e}function Ft(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Bt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function jt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=En),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ht(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Tn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Yt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=u([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=Z(a[e]),h[e]=Z(h[e]),d[e]=Z(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Gt(){return this.hours()%12||12}function Vt(){return this.hours()||24}function Ut(t,e){H(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function qt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Zt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,i,o,n,s=0;s0;){if(o=$t(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&w(n,i,!0)>=e-1)break;e--}s++}return null}function $t(e){var i=null;if(!zn[e]&&void 0!==t&&t&&t.exports)try{i=In._abbr;!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return zn[e]}function Qt(t,e){var i;return t&&(i=s(e)?ie(t):te(t,e))&&(In=i),In._abbr}function te(t,e){if(null!==e){var i=An;if(e.abbr=t,null!=zn[t])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=zn[t]._config;else if(null!=e.parentLocale){if(null==zn[e.parentLocale])return Ln[e.parentLocale]||(Ln[e.parentLocale]=[]),Ln[e.parentLocale].push({name:t,config:e}),null;i=zn[e.parentLocale]._config}return zn[t]=new O(C(i,e)),Ln[t]&&Ln[t].forEach(function(t){te(t.name,t.config)}),Qt(t),zn[t]}return delete zn[t],null}function ee(t,e){if(null!=e){var i,o=An;null!=zn[t]&&(o=zn[t]._config),e=C(o,e),i=new O(e),i.parentLocale=zn[t],zn[t]=i,Qt(t)}else null!=zn[t]&&(null!=zn[t].parentLocale?zn[t]=zn[t].parentLocale:null!=zn[t]&&delete zn[t]);return zn[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return In;if(!i(t)){if(e=$t(t))return e;t=[t]}return Jt(t)}function oe(){return Io(zn)}function ne(t){var e,i=t._a;return i&&-2===p(t).overflow&&(e=i[ln]<0||i[ln]>11?ln:i[un]<1||i[un]>ht(i[dn],i[ln])?un:i[cn]<0||i[cn]>24||24===i[cn]&&(0!==i[pn]||0!==i[fn]||0!==i[mn])?cn:i[pn]<0||i[pn]>59?pn:i[fn]<0||i[fn]>59?fn:i[mn]<0||i[mn]>999?mn:-1,p(t)._overflowDayOfYear&&(eun)&&(e=un),p(t)._overflowWeeks&&-1===e&&(e=vn),p(t)._overflowWeekday&&-1===e&&(e=gn),p(t).overflow=e),t}function se(t,e,i){return null!=t?t:null!=e?e:i}function re(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function ae(t){var e,i,o,n,s=[];if(!t._d){for(o=re(t),t._w&&null==t._a[un]&&null==t._a[ln]&&he(t),null!=t._dayOfYear&&(n=se(t._a[dn],o[dn]),(t._dayOfYear>Q(n)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[ln]=i.getUTCMonth(),t._a[un]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[cn]&&0===t._a[pn]&&0===t._a[fn]&&0===t._a[mn]&&(t._nextDay=!0,t._a[cn]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[cn]=24),t._w&&void 0!==t._w.d&&t._w.d!==t._d.getDay()&&(p(t).weekdayMismatch=!0)}}function he(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=se(e.GG,t._a[dn],kt(De(),1,4).year),o=se(e.W,1),((n=se(e.E,1))<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=kt(De(),s,r);i=se(e.gg,t._a[dn],d.year),o=se(e.w,d.week),null!=e.d?((n=e.d)<0||n>6)&&(h=!0):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>St(i,s,r)?p(t)._overflowWeeks=!0:null!=h?p(t)._overflowWeekday=!0:(a=xt(i,o,n,s,r),t._a[dn]=a.year,t._dayOfYear=a.dayOfYear)}function de(t){var e,i,o,n,s,r,a=t._i,h=Fn.exec(a)||Bn.exec(a);if(h){for(p(t).iso=!0,e=0,i=Hn.length;e0&&p(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),Wo[s]?(o?p(t).empty=!1:p(t).unusedTokens.push(s),$(s,o,t)):t._strict&&!o&&p(t).unusedTokens.push(s);p(t).charsLeftOver=h-d,a.length>0&&p(t).unusedInput.push(a),t._a[cn]<=12&&!0===p(t).bigHour&&t._a[cn]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[cn]=ye(t._locale,t._a[cn],t._meridiem),ae(t),ne(t)}function ye(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function be(t){var e,i,o,n,s;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ue(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=xe(t),t._a){var e=t._isUTC?u(t._a):De(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function qe(){return!!this.isValid()&&!this._isUTC}function Xe(){return!!this.isValid()&&this._isUTC}function Ze(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ke(t,e){var i,o,n,s=t,a=null;return Ne(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:r(t)?(s={},e?s[e]=t:s.milliseconds=t):(a=Jn.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:_(a[un])*i,h:_(a[cn])*i,m:_(a[pn])*i,s:_(a[fn])*i,ms:_(Re(1e3*a[mn]))*i}):(a=$n.exec(t))?(i="-"===a[1]?-1:(a[1],1),s={y:Je(a[2],i),M:Je(a[3],i),w:Je(a[4],i),d:Je(a[5],i),h:Je(a[6],i),m:Je(a[7],i),s:Je(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Qe(De(s.from),De(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ie(s),Ne(t)&&d(t,"_locale")&&(o._locale=t._locale),o}function Je(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function $e(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function Qe(t,e){var i;return t.isValid()&&e.isValid()?(e=Le(e,t),t.isBefore(e)?i=$e(t,e):(i=$e(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ti(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(S(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ke(i,o),ei(this,n,t),this}}function ei(t,i,o,n){var s=i._milliseconds,r=Re(i._days),a=Re(i._months);t.isValid()&&(n=null==n||n,a&&pt(t,ot(t,"Month")+a*o),r&&nt(t,"Date",ot(t,"Date")+r*o),s&&t._d.setTime(t._d.valueOf()+s*o),n&&e.updateOffset(t,r||a))}function ii(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function oi(t,i){var o=t||De(),n=Le(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(D(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,De(o)))}function ni(){return new g(this)}function si(t,e){var i=y(t)?t:De(t);return!(!this.isValid()||!i.isValid())&&(e=z(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()9999?G(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):D(Date.prototype.toISOString)?this.toDate().toISOString():G(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function mi(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=e+'[")]';return this.format(i+o+"-MM-DD[T]HH:mm:ss.SSS"+n)}function vi(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=G(this,t);return this.localeData().postformat(i)}function gi(t,e){return this.isValid()&&(y(t)&&t.isValid()||De(t).isValid())?Ke({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function yi(t){return this.from(De(),t)}function bi(t,e){return this.isValid()&&(y(t)&&t.isValid()||De(t).isValid())?Ke({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _i(t){return this.to(De(),t)}function wi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function xi(){return this._locale}function ki(t){switch(t=z(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Si(t){return void 0===(t=z(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function Di(){return this._d.valueOf()-6e4*(this._offset||0)}function Mi(){return Math.floor(this.valueOf()/1e3)}function Ci(){return new Date(this.valueOf())}function Oi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Ei(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Ti(){return this.isValid()?this.toISOString():null}function Pi(){return f(this)}function Ii(){return l({},p(this))}function Ni(){return p(this).overflow}function Ri(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ai(t,e){H(0,[t,t.length],0,e)}function zi(t){return ji.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Li(t){return ji.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Fi(){return St(this.year(),1,4)}function Bi(){var t=this.localeData()._week;return St(this.year(),t.dow,t.doy)}function ji(t,e,i,o,n){var s;return null==t?kt(this,o,n).year:(s=St(t,o,n),e>s&&(e=s),Hi.call(this,t,e,i,o,n))}function Hi(t,e,i,o,n){var s=xt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Wi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Yi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Gi(t,e){e[mn]=_(1e3*("0."+t))}function Vi(){return this._isUTC?"UTC":""}function Ui(){return this._isUTC?"Coordinated Universal Time":""}function qi(t){return De(1e3*t)}function Xi(){return De.apply(null,arguments).parseZone()}function Zi(t){return t}function Ki(t,e,i,o){var n=ie(),s=u().set(o,e);return n[i](s,t)}function Ji(t,e,i){if(r(t)&&(e=t,t=void 0),t=t||"",null!=e)return Ki(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Ki(t,o,i,"month");return n}function $i(t,e,i,o){"boolean"==typeof t?(r(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,r(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Ki(e,(i+s)%7,o,"day");var a,h=[];for(a=0;a<7;a++)h[a]=Ki(e,(a+s)%7,o,"day");return h}function Qi(t,e){return Ji(t,e,"months")}function to(t,e){return Ji(t,e,"monthsShort")}function eo(t,e,i){return $i(t,e,i,"weekdays")}function io(t,e,i){return $i(t,e,i,"weekdaysShort")}function oo(t,e,i){return $i(t,e,i,"weekdaysMin")}function no(){var t=this._data;return this._milliseconds=ds(this._milliseconds),this._days=ds(this._days),this._months=ds(this._months),t.milliseconds=ds(t.milliseconds),t.seconds=ds(t.seconds),t.minutes=ds(t.minutes),t.hours=ds(t.hours),t.months=ds(t.months),t.years=ds(t.years),this}function so(t,e,i,o){var n=Ke(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function ro(t,e){return so(this,t,e,1)}function ao(t,e){return so(this,t,e,-1)}function ho(t){return t<0?Math.floor(t):Math.ceil(t)}function lo(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,h=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*ho(co(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=b(s/1e3),h.seconds=t%60,e=b(t/60),h.minutes=e%60,i=b(e/60),h.hours=i%24,r+=b(i/24),n=b(uo(r)),a+=n, +r-=ho(co(n)),o=b(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function uo(t){return 4800*t/146097}function co(t){return 146097*t/4800}function po(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if("month"===(t=z(t))||"year"===t)return e=this._days+o/864e5,i=this._months+uo(e),"month"===t?i:i/12;switch(e=this._days+Math.round(co(this._months)),t){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+t)}}function fo(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12):NaN}function mo(t){return function(){return this.as(t)}}function vo(){return Ke(this)}function go(t){return t=z(t),this.isValid()?this[t+"s"]():NaN}function yo(t){return function(){return this.isValid()?this._data[t]:NaN}}function bo(){return b(this.days()/7)}function _o(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function wo(t,e,i){var o=Ke(t).abs(),n=Ds(o.as("s")),s=Ds(o.as("m")),r=Ds(o.as("h")),a=Ds(o.as("d")),h=Ds(o.as("M")),d=Ds(o.as("y")),l=n<=Ms.ss&&["s",n]||n0,l[4]=i,_o.apply(null,l)}function xo(t){return void 0===t?Ds:"function"==typeof t&&(Ds=t,!0)}function ko(t,e){return void 0!==Ms[t]&&(void 0===e?Ms[t]:(Ms[t]=e,"s"===t&&(Ms.ss=e-1),!0))}function So(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=wo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function Do(t){return(t>0)-(t<0)||+t}function Mo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Cs(this._milliseconds)/1e3,n=Cs(this._days),s=Cs(this._months);t=b(o/60),e=b(t/60),o%=60,t%=60,i=b(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o?o.toFixed(3).replace(/\.?0+$/,""):"",c=this.asSeconds();if(!c)return"P0D";var p=c<0?"-":"",f=Do(this._months)!==Do(c)?"-":"",m=Do(this._days)!==Do(c)?"-":"",v=Do(this._milliseconds)!==Do(c)?"-":"";return p+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(h?m+h+"D":"")+(d||l||u?"T":"")+(d?v+d+"H":"")+(l?v+l+"M":"")+(u?v+u+"S":"")}var Co,Oo;Oo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o68?1900:2e3)};var yn,bn=it("FullYear",!0);yn=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;ethis?this:t:m()}),Xn=function(){return Date.now?Date.now():+new Date},Zn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ae("Z",":"),Ae("ZZ",""),U("Z",nn),U("ZZ",nn),K(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=ze(nn,t)});var Kn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Jn=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,$n=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Ke.fn=Ie.prototype,Ke.invalid=Pe;var Qn=ti(1,"add"),ts=ti(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var es=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ai("gggg","weekYear"),Ai("ggggg","weekYear"),Ai("GGGG","isoWeekYear"),Ai("GGGGG","isoWeekYear"),A("weekYear","gg"),A("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),U("G",en),U("g",en),U("GG",Xo,Go),U("gg",Xo,Go),U("GGGG",$o,Uo),U("gggg",$o,Uo),U("GGGGG",Qo,qo),U("ggggg",Qo,qo),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=_(t)}),J(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),H("Q",0,"Qo","quarter"),A("quarter","Q"),F("quarter",7),U("Q",Yo),K("Q",function(t,e){e[ln]=3*(_(t)-1)}),H("D",["DD",2],"Do","date"),A("date","D"),F("date",9),U("D",Xo),U("DD",Xo,Go),U("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),K(["D","DD"],un),K("Do",function(t,e){e[un]=_(t.match(Xo)[0],10)});var is=it("Date",!0);H("DDD",["DDDD",3],"DDDo","dayOfYear"),A("dayOfYear","DDD"),F("dayOfYear",4),U("DDD",Jo),U("DDDD",Vo),K(["DDD","DDDD"],function(t,e,i){i._dayOfYear=_(t)}),H("m",["mm",2],0,"minute"),A("minute","m"),F("minute",14),U("m",Xo),U("mm",Xo,Go),K(["m","mm"],pn);var os=it("Minutes",!1);H("s",["ss",2],0,"second"),A("second","s"),F("second",15),U("s",Xo),U("ss",Xo,Go),K(["s","ss"],fn);var ns=it("Seconds",!1);H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),A("millisecond","ms"),F("millisecond",16),U("S",Jo,Yo),U("SS",Jo,Go),U("SSS",Jo,Vo);var ss;for(ss="SSSS";ss.length<=9;ss+="S")U(ss,tn);for(ss="S";ss.length<=9;ss+="S")K(ss,Gi);var rs=it("Milliseconds",!1);H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var as=g.prototype;as.add=Qn,as.calendar=oi,as.clone=ni,as.diff=ui,as.endOf=Si,as.format=vi,as.from=gi,as.fromNow=yi,as.to=bi,as.toNow=_i,as.get=st,as.invalidAt=Ni,as.isAfter=si,as.isBefore=ri,as.isBetween=ai,as.isSame=hi,as.isSameOrAfter=di,as.isSameOrBefore=li,as.isValid=Pi,as.lang=es,as.locale=wi,as.localeData=xi,as.max=qn,as.min=Un,as.parsingFlags=Ii,as.set=rt,as.startOf=ki,as.subtract=ts,as.toArray=Oi,as.toObject=Ei,as.toDate=Ci,as.toISOString=fi,as.inspect=mi,as.toJSON=Ti,as.toString=pi,as.unix=Mi,as.valueOf=Di,as.creationData=Ri,as.year=bn,as.isLeapYear=et,as.weekYear=zi,as.isoWeekYear=Li,as.quarter=as.quarters=Wi,as.month=ft,as.daysInMonth=mt,as.week=as.weeks=Ot,as.isoWeek=as.isoWeeks=Et,as.weeksInYear=Bi,as.isoWeeksInYear=Fi,as.date=is,as.day=as.days=Lt,as.weekday=Ft,as.isoWeekday=Bt,as.dayOfYear=Yi,as.hour=as.hours=Rn,as.minute=as.minutes=os,as.second=as.seconds=ns,as.millisecond=as.milliseconds=rs,as.utcOffset=Be,as.utc=He,as.local=We,as.parseZone=Ye,as.hasAlignedHourOffset=Ge,as.isDST=Ve,as.isLocal=qe,as.isUtcOffset=Xe,as.isUtc=Ze,as.isUTC=Ze,as.zoneAbbr=Vi,as.zoneName=Ui,as.dates=k("dates accessor is deprecated. Use date instead.",is),as.months=k("months accessor is deprecated. Use month instead",ft),as.years=k("years accessor is deprecated. Use year instead",bn),as.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",je),as.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ue);var hs=O.prototype;hs.calendar=E,hs.longDateFormat=T,hs.invalidDate=P,hs.ordinal=I,hs.preparse=Zi,hs.postformat=Zi,hs.relativeTime=N,hs.pastFuture=R,hs.set=M,hs.months=dt,hs.monthsShort=lt,hs.monthsParse=ct,hs.monthsRegex=gt,hs.monthsShortRegex=vt,hs.week=Dt,hs.firstDayOfYear=Ct,hs.firstDayOfWeek=Mt,hs.weekdays=It,hs.weekdaysMin=Rt,hs.weekdaysShort=Nt,hs.weekdaysParse=zt,hs.weekdaysRegex=jt,hs.weekdaysShortRegex=Ht,hs.weekdaysMinRegex=Wt,hs.isPM=Xt,hs.meridiem=Zt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=k("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=k("moment.langData is deprecated. Use moment.localeData instead.",ie);var ds=Math.abs,ls=mo("ms"),us=mo("s"),cs=mo("m"),ps=mo("h"),fs=mo("d"),ms=mo("w"),vs=mo("M"),gs=mo("y"),ys=yo("milliseconds"),bs=yo("seconds"),_s=yo("minutes"),ws=yo("hours"),xs=yo("days"),ks=yo("months"),Ss=yo("years"),Ds=Math.round,Ms={ss:44,s:45,m:45,h:22,d:26,M:11},Cs=Math.abs,Os=Ie.prototype;return Os.isValid=Te,Os.abs=no,Os.add=ro,Os.subtract=ao,Os.as=po,Os.asMilliseconds=ls,Os.asSeconds=us,Os.asMinutes=cs,Os.asHours=ps,Os.asDays=fs,Os.asWeeks=ms,Os.asMonths=vs,Os.asYears=gs,Os.valueOf=fo,Os._bubble=lo,Os.clone=vo,Os.get=go,Os.milliseconds=ys,Os.seconds=bs,Os.minutes=_s,Os.hours=ws,Os.days=xs,Os.weeks=bo,Os.months=ks,Os.years=Ss,Os.humanize=So,Os.toISOString=Mo,Os.toString=Mo,Os.toJSON=Mo,Os.locale=wi,Os.localeData=xi,Os.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Mo),Os.lang=es,H("X",0,0,"unix"),H("x",0,0,"valueOf"),U("x",en),U("X",sn),K("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),K("x",function(t,e,i){i._d=new Date(_(t))}),e.version="2.19.1",function(t){Co=t}(De),e.fn=as,e.min=Ce,e.max=Oe,e.now=Xn,e.utc=u,e.unix=qi,e.months=Qi,e.isDate=a,e.locale=Qt,e.invalid=m,e.duration=Ke,e.isMoment=y,e.weekdays=eo,e.parseZone=Xi,e.localeData=ie,e.isDuration=Ne,e.monthsShort=to,e.weekdaysMin=oo,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=io,e.normalizeUnits=z,e.relativeTimeRounding=xo,e.relativeTimeThreshold=ko,e.calendarFormat=ii,e.prototype=as,e})}).call(e,i(155)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){function i(t){throw new Error("Cannot find module '"+t+"'.")}i.keys=function(){return[]},i.resolve=i,t.exports=i,i.id=156},function(t,e,i){(function(e){function i(t,e,i){var o=e&&i||0,n=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){n<16&&(e[o+n++]=u[t])});n<16;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:g+1,d=a-v+(h-g)/1e4;if(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||a>v)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=a,g=h,m=r,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;s[n++]=l>>>24&255,s[n++]=l>>>16&255,s[n++]=l>>>8&255,s[n++]=255&l;var u=a/4294967296*1e4&268435455;s[n++]=u>>>8&255,s[n++]=255&u,s[n++]=u>>>24&15|16,s[n++]=u>>>16&255,s[n++]=r>>>8|128,s[n++]=255&r;for(var c=t.node||f,p=0;p<6;p++)s[n+p]=c[p];return e||o(s)}function s(t,e,i){var n=e&&i||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var s=t.random||(t.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e)for(var a=0;a<16;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:void 0!==e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);r=function(){return crypto.getRandomValues(h),h}}if(!r){var d=new Array(16);r=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},c=0;c<256;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var p=r(),f=[1|p[0],p[1],p[2],p[3],p[4],p[5]],m=16383&(p[6]<<8|p[7]),v=0,g=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,i(158))},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Graph3d=i(161),e.graph3d={Camera:i(95),Filter:i(96),Point2d:i(91),Point3d:i(34),Slider:i(92),StepNumber:i(93)},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){var o=i(7),n=o.JSON||(o.JSON={stringify:JSON.stringify});t.exports=function(t){return n.stringify.apply(n,arguments)}},function(t,e,i){function o(t,e,i){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.dataGroup=new _,this.dataPoints=null,this.create(),f.setDefaults(o.DEFAULTS,this),this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.setOptions(i),this.setData(e)}function n(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function s(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(90),a=function(t){return t&&t.__esModule?t:{default:t}}(r),h=i(44),d=i(2),l=i(34),u=i(91),c=i(92),p=i(93),f=i(94),m=i(15).default,v=i(15),g=v.printStyle,y=i(172),b=y.allOptions,_=i(173);o.STYLE=f.STYLE;o.DEFAULTS={width:"400px",height:"400px",filterLabel:"time",legendLabel:"value",xLabel:"x",yLabel:"y",zLabel:"z",xValueLabel:function(t){return t},yValueLabel:function(t){return t},zValueLabel:function(t){return t},showXAxis:!0,showYAxis:!0,showZAxis:!0,showGrid:!0,showPerspective:!0,showShadow:!1,keepAspectRatio:!0,verticalRatio:.5,dotSizeRatio:.02,dotSizeMinFraction:.5,dotSizeMaxFraction:2.5,showAnimationControls:void 0,animationInterval:1e3,animationPreload:!1,animationAutoStart:void 0,axisColor:"#4D4D4D",gridColor:"#D3D3D3",xCenter:"55%",yCenter:"50%",style:o.STYLE.DOT,tooltip:!1,tooltipStyle:{content:{padding:"10px",border:"1px solid #4d4d4d",color:"#1a1a1a",background:"rgba(255,255,255,0.7)",borderRadius:"2px",boxShadow:"5px 5px 10px rgba(128,128,128,0.5)"},line:{height:"40px",width:"0",borderLeft:"1px solid #4d4d4d"},dot:{height:"0",width:"0",border:"5px solid #4d4d4d",borderRadius:"5px"}},dataColor:{fill:"#7DC1FF",stroke:"#3267D2",strokeWidth:1},cameraPosition:{horizontal:1,vertical:.5,distance:1.7},showLegend:void 0,backgroundColor:void 0,xBarWidth:void 0,yBarWidth:void 0,valueMin:void 0,valueMax:void 0,xMin:void 0,xMax:void 0,xStep:void 0,yMin:void 0,yMax:void 0,yStep:void 0,zMin:void 0,zMax:void 0,zStep:void 0},h(o.prototype),o.prototype._setScale=function(){this.scale=new l(1/this.xRange.range(),1/this.yRange.range(),1/this.zRange.range()),this.keepAspectRatio&&(this.scale.x0&&(r[n-1].pointNext=r[n]);return r},o.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),this.frame.filter=document.createElement("div"),this.frame.filter.style.position="absolute",this.frame.filter.style.bottom="0px",this.frame.filter.style.left="0px",this.frame.filter.style.width="100%",this.frame.appendChild(this.frame.filter);var e=this,i=function(t){e._onMouseDown(t)},o=function(t){e._onTouchStart(t)},n=function(t){e._onWheel(t)},s=function(t){e._onTooltip(t)},r=function(t){e._onClick(t)};d.addEventListener(this.frame.canvas,"mousedown",i),d.addEventListener(this.frame.canvas,"touchstart",o),d.addEventListener(this.frame.canvas,"mousewheel",n),d.addEventListener(this.frame.canvas,"mousemove",s),d.addEventListener(this.frame.canvas,"click",r),this.containerElement.appendChild(this.frame)},o.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},o.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},o.prototype.animationStart=function(){if(this.animationAutoStart&&this.dataGroup.dataFilter){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()}},o.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},o.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},o.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},o.prototype._readData=function(t){this.dataPoints=this.dataGroup.initializeData(this,t,this.style),this._initializeRanges(),this._redrawFilter()},o.prototype.setData=function(t){void 0!==t&&null!==t&&(this._readData(t),this.redraw(),this.animationStart())},o.prototype.setOptions=function(t){if(void 0!==t){!0===m.validate(t,b)&&console.log("%cErrors have been found in the supplied options object.",g),this.animationStop(),f.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.setData(this.dataGroup.getDataTable()),this.animationStart()}},o.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case o.STYLE.BAR:t=o.prototype._redrawBarGraphPoint;break;case o.STYLE.BARCOLOR:t=o.prototype._redrawBarColorGraphPoint;break;case o.STYLE.BARSIZE:t=o.prototype._redrawBarSizeGraphPoint;break;case o.STYLE.DOT:t=o.prototype._redrawDotGraphPoint;break;case o.STYLE.DOTLINE:t=o.prototype._redrawDotLineGraphPoint;break;case o.STYLE.DOTCOLOR:t=o.prototype._redrawDotColorGraphPoint;break;case o.STYLE.DOTSIZE:t=o.prototype._redrawDotSizeGraphPoint;break;case o.STYLE.SURFACE:t=o.prototype._redrawSurfaceGraphPoint;break;case o.STYLE.GRID:t=o.prototype._redrawGridGraphPoint;break;case o.STYLE.LINE:t=o.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},o.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},o.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},o.prototype._redrawClear=function(){var t=this.frame.canvas;t.getContext("2d").clearRect(0,0,t.width,t.height)},o.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},o.prototype._getLegendWidth=function(){var t;if(this.style===o.STYLE.DOTSIZE){t=this._dotSize()*this.dotSizeMaxFraction}else t=this.style===o.STYLE.BARSIZE?this.xBarWidth:20;return t},o.prototype._redrawLegend=function(){if(!0===this.showLegend&&this.style!==o.STYLE.LINE&&this.style!==o.STYLE.BARSIZE){var t=this.style===o.STYLE.BARSIZE||this.style===o.STYLE.DOTSIZE,e=this.style===o.STYLE.DOTSIZE||this.style===o.STYLE.DOTCOLOR||this.style===o.STYLE.BARCOLOR,i=Math.max(.25*this.frame.clientHeight,100),n=this.margin,s=this._getLegendWidth(),r=this.frame.clientWidth-this.margin,a=r-s,h=n+i,d=this._getContext();if(d.lineWidth=1,d.font="14px arial",!1===t){var l,c=i;for(l=0;l0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelY=function(t,e,i,o,n){void 0===n&&(n=0);var s=this._convert3Dto2D(e);Math.cos(2*o)<0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelZ=function(t,e,i,o){void 0===o&&(o=0);var n=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(i,n.x-o,n.y)},o.prototype._line3d=function(t,e,i,o){var n=this._convert3Dto2D(e),s=this._convert3Dto2D(i);this._line(t,n,s,o)},o.prototype._redrawAxis=function(){var t,e,i,o,n,s,r,a,h,d,c,f=this._getContext();f.font=24/this.camera.getArmLength()+"px arial";var m,v=.025/this.scale.x,g=.025/this.scale.y,y=5/this.camera.getArmLength(),b=this.camera.getArmRotation().horizontal,_=new u(Math.cos(b),Math.sin(b)),w=this.xRange,x=this.yRange,k=this.zRange;for(f.lineWidth=1,o=void 0===this.defaultXStep,i=new p(w.min,w.max,this.xStep,o),i.start(!0);!i.end();){var S=i.getCurrent();if(this.showGrid?(t=new l(S,x.min,k.min),e=new l(S,x.max,k.min),this._line3d(f,t,e,this.gridColor)):this.showXAxis&&(t=new l(S,x.min,k.min),e=new l(S,x.min+v,k.min),this._line3d(f,t,e,this.axisColor),t=new l(S,x.max,k.min),e=new l(S,x.max-v,k.min),this._line3d(f,t,e,this.axisColor)),this.showXAxis){r=_.x>0?x.min:x.max,m=new l(S,r,k.min);var D=" "+this.xValueLabel(S)+" ";this.drawAxisLabelX(f,m,D,b,y)}i.next()}for(f.lineWidth=1,o=void 0===this.defaultYStep,i=new p(x.min,x.max,this.yStep,o),i.start(!0);!i.end();){var M=i.getCurrent();if(this.showGrid?(t=new l(w.min,M,k.min),e=new l(w.max,M,k.min),this._line3d(f,t,e,this.gridColor)):this.showYAxis&&(t=new l(w.min,M,k.min),e=new l(w.min+g,M,k.min),this._line3d(f,t,e,this.axisColor),t=new l(w.max,M,k.min),e=new l(w.max-g,M,k.min),this._line3d(f,t,e,this.axisColor)),this.showYAxis){s=_.y>0?w.min:w.max,m=new l(s,M,k.min);var C=" "+this.yValueLabel(M)+" ";this.drawAxisLabelY(f,m,C,b,y)}i.next()}if(this.showZAxis){for(f.lineWidth=1,o=void 0===this.defaultZStep,i=new p(k.min,k.max,this.zStep,o),i.start(!0),s=_.x>0?w.min:w.max,r=_.y<0?x.min:x.max;!i.end();){var O=i.getCurrent(),E=new l(s,r,O),T=this._convert3Dto2D(E);e=new u(T.x-y,T.y),this._line(f,T,e,this.axisColor);var P=this.zValueLabel(O)+" ";this.drawAxisLabelZ(f,E,P,5),i.next()}f.lineWidth=1,t=new l(s,r,k.min),e=new l(s,r,k.max),this._line3d(f,t,e,this.axisColor)}if(this.showXAxis){var I,N;f.lineWidth=1,I=new l(w.min,x.min,k.min),N=new l(w.max,x.min,k.min),this._line3d(f,I,N,this.axisColor),I=new l(w.min,x.max,k.min),N=new l(w.max,x.max,k.min),this._line3d(f,I,N,this.axisColor)}this.showYAxis&&(f.lineWidth=1,t=new l(w.min,x.min,k.min),e=new l(w.min,x.max,k.min),this._line3d(f,t,e,this.axisColor),t=new l(w.max,x.min,k.min),e=new l(w.max,x.max,k.min),this._line3d(f,t,e,this.axisColor));var R=this.xLabel;R.length>0&&this.showXAxis&&(c=.1/this.scale.y,s=(w.max+3*w.min)/4,r=_.x>0?x.min-c:x.max+c,n=new l(s,r,k.min),this.drawAxisLabelX(f,n,R,b));var A=this.yLabel;A.length>0&&this.showYAxis&&(d=.1/this.scale.x,s=_.y>0?w.min-d:w.max+d,r=(x.max+3*x.min)/4,n=new l(s,r,k.min),this.drawAxisLabelY(f,n,A,b));var z=this.zLabel;z.length>0&&this.showZAxis&&(h=30,s=_.x>0?w.min:w.max,r=_.y<0?x.min:x.max,a=(k.max+3*k.min)/4,n=new l(s,r,a),this.drawAxisLabelZ(f,n,z,h))},o.prototype._hsv2rgb=function(t,e,i){var o,n,s,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:o=r,n=h,s=0;break;case 1:o=h,n=r,s=0;break;case 2:o=0,n=r,s=h;break;case 3:o=0,n=h,s=r;break;case 4:o=h,n=0,s=r;break;case 5:o=r,n=0,s=h;break;default:o=0,n=0,s=0}return"RGB("+parseInt(255*o)+","+parseInt(255*n)+","+parseInt(255*s)+")"},o.prototype._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-this.eye.z/this.camera.getArmLength()*this.dataColor.strokeWidth:this.dataColor.strokeWidth},o.prototype._redrawBar=function(t,e,i,o,n,s){var r,a=this,h=e.point,d=this.zRange.min,u=[{point:new l(h.x-i,h.y-o,h.z)},{point:new l(h.x+i,h.y-o,h.z)},{point:new l(h.x+i,h.y+o,h.z)},{point:new l(h.x-i,h.y+o,h.z)}],c=[{point:new l(h.x-i,h.y-o,d)},{point:new l(h.x+i,h.y-o,d)},{point:new l(h.x+i,h.y+o,d)},{point:new l(h.x-i,h.y+o,d)}];u.forEach(function(t){t.screen=a._convert3Dto2D(t.point)}),c.forEach(function(t){t.screen=a._convert3Dto2D(t.point)});var p=[{corners:u,center:l.avg(c[0].point,c[2].point)},{corners:[u[0],u[1],c[1],c[0]],center:l.avg(c[1].point,c[0].point)},{corners:[u[1],u[2],c[2],c[1]],center:l.avg(c[2].point,c[1].point)},{corners:[u[2],u[3],c[3],c[2]],center:l.avg(c[3].point,c[2].point)},{corners:[u[3],u[0],c[0],c[3]],center:l.avg(c[0].point,c[3].point)}];e.surfaces=p;for(var f=0;f0}if(a){var p,f=(e.point.z+i.point.z+o.point.z+n.point.z)/4,m=240*(1-(f-this.zRange.min)*this.scale.z/this.verticalRatio);this.showShadow?(p=Math.min(1+u.x/c/2,1),s=this._hsv2rgb(m,1,p),r=s):(p=1,s=this._hsv2rgb(m,1,p),r=this.axisColor)}else s="gray",r=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var v=[e,i,n,o];this._polygon(t,v,s,r)}},o.prototype._drawGridLine=function(t,e,i){if(void 0!==e&&void 0!==i){var o=(e.point.z+i.point.z)/2,n=240*(1-(o-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(n,1,1),this._line(t,e.screen,i.screen)}},o.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},o.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},o.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t0?1:t<0?-1:0}var o=e[0],n=e[1],s=e[2],r=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),a=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x)),h=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},o.prototype._dataPointFromXY=function(t,e){var i,n=null,s=null,r=null,a=new u(t,e);if(this.style===o.STYLE.BAR||this.style===o.STYLE.BARCOLOR||this.style===o.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var h=n.surfaces;if(h)for(var d=h.length-1;d>=0;d--){var l=h[d],c=l.corners,p=[c[0].screen,c[1].screen,c[2].screen],f=[c[2].screen,c[3].screen,c[0].screen];if(this._insideTriangle(a,p)||this._insideTriangle(a,f))return n}}else for(i=0;i"+this.xLabel+":"+t.point.x+""+this.yLabel+":"+t.point.y+""+this.zLabel+":"+t.point.z+"",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(o);var n=e.offsetWidth,s=e.offsetHeight,r=i.offsetHeight,h=o.offsetWidth,d=o.offsetHeight,l=t.screen.x-n/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-n),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=l+"px",e.style.top=t.screen.y-r-s+"px",o.style.left=t.screen.x-h/2+"px",o.style.top=t.screen.y-d/2+"px"},o.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},o.prototype.setCameraPosition=function(t){f.setCameraPosition(t,this),this.redraw()},o.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=o},function(t,e,i){i(163),t.exports=i(7).Object.assign},function(t,e,i){var o=i(17);o(o.S+o.F,"Object",{assign:i(164)})},function(t,e,i){var o=i(33),n=i(63),s=i(42),r=i(41),a=i(78),h=Object.assign;t.exports=!h||i(28)(function(){var t={},e={},i=Symbol(),o="abcdefghijklmnopqrst";return t[i]=7,o.split("").forEach(function(t){e[t]=t}),7!=h({},t)[i]||Object.keys(h({},e)).join("")!=o})?function(t,e){for(var i=r(t),h=arguments.length,d=1,l=n.f,u=s.f;h>d;)for(var c,p=a(arguments[d++]),f=l?o(p).concat(l(p)):o(p),m=f.length,v=0;m>v;)u.call(p,c=f[v++])&&(i[c]=p[c]);return i}:h},function(t,e,i){t.exports={default:i(166),__esModule:!0}},function(t,e,i){i(167),t.exports=i(7).Math.sign},function(t,e,i){var o=i(17);o(o.S,"Math",{sign:i(168)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,i){t.exports={default:i(170),__esModule:!0}},function(t,e,i){i(171);var o=i(7).Object;t.exports=function(t,e,i){return o.defineProperty(t,e,i)}},function(t,e,i){var o=i(17);o(o.S+o.F*!i(21),"Object",{defineProperty:i(20).f})},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r={fill:{string:o},stroke:{string:o},strokeWidth:{number:s},__type__:{string:o,object:"object",undefined:"undefined"}},a={animationAutoStart:{boolean:n,undefined:"undefined"},animationInterval:{number:s},animationPreload:{boolean:n},axisColor:{string:o},backgroundColor:r,xBarWidth:{number:s,undefined:"undefined"},yBarWidth:{number:s,undefined:"undefined"},cameraPosition:{distance:{number:s},horizontal:{number:s},vertical:{number:s},__type__:{object:"object"}},xCenter:{string:o},yCenter:{string:o},dataColor:r,dotSizeMinFraction:{number:s},dotSizeMaxFraction:{number:s},dotSizeRatio:{number:s},filterLabel:{string:o},gridColor:{string:o},onclick:{function:"function"},keepAspectRatio:{boolean:n},xLabel:{string:o},yLabel:{string:o},zLabel:{string:o},legendLabel:{string:o},xMin:{number:s,undefined:"undefined"},yMin:{number:s,undefined:"undefined"},zMin:{number:s,undefined:"undefined"},xMax:{number:s,undefined:"undefined"},yMax:{number:s,undefined:"undefined"},zMax:{number:s,undefined:"undefined"},showAnimationControls:{boolean:n,undefined:"undefined"},showGrid:{boolean:n},showLegend:{boolean:n,undefined:"undefined"},showPerspective:{boolean:n},showShadow:{boolean:n},showXAxis:{boolean:n},showYAxis:{boolean:n},showZAxis:{boolean:n},xStep:{number:s,undefined:"undefined"},yStep:{number:s,undefined:"undefined"},zStep:{number:s,undefined:"undefined"},style:{number:s,string:["bar","bar-color","bar-size","dot","dot-line","dot-color","dot-size","line","grid","surface"]},tooltip:{boolean:n,function:"function"},tooltipStyle:{content:{color:{string:o},background:{string:o},border:{string:o},borderRadius:{string:o},boxShadow:{string:o},padding:{string:o},__type__:{object:"object"}},line:{borderLeft:{string:o},height:{string:o},width:{string:o},__type__:{object:"object"}},dot:{border:{string:o},borderRadius:{string:o},height:{string:o},width:{string:o},__type__:{object:"object"}},__type__:{object:"object"}},xValueLabel:{function:"function"},yValueLabel:{function:"function"},zValueLabel:{function:"function"},valueMax:{number:s,undefined:"undefined"},valueMin:{number:s,undefined:"undefined"},verticalRatio:{number:s},height:{string:o},width:{string:o},__type__:{object:"object"}};e.allOptions=a},function(t,e,i){function o(){this.dataTable=null}var n=i(11),s=i(12),r=i(174),a=i(96),h=i(94),d=i(34);o.prototype.initializeData=function(t,e,i){if(void 0!==e){Array.isArray(e)&&(e=new n(e));var o;if(!(e instanceof n||e instanceof s))throw new Error("Array, DataSet, or DataView expected");if(o=e.get(),0!=o.length){this.style=i,this.dataSet&&this.dataSet.off("*",this._onChange),this.dataSet=e,this.dataTable=o;var r=this;this._onChange=function(){t.setData(r.dataSet)},this.dataSet.on("*",this._onChange),this.colX="x",this.colY="y",this.colZ="z";var h=t.hasBars(i);if(h&&(void 0!==t.defaultXBarWidth?this.xBarWidth=t.defaultXBarWidth:this.xBarWidth=this.getSmallestDifference(o,this.colX)||1,void 0!==t.defaultYBarWidth?this.yBarWidth=t.defaultYBarWidth:this.yBarWidth=this.getSmallestDifference(o,this.colY)||1),this._initializeRange(o,this.colX,t,h),this._initializeRange(o,this.colY,t,h),this._initializeRange(o,this.colZ,t,!1),o[0].hasOwnProperty("style")){this.colValue="style";var d=this.getColumnRange(o,this.colValue);this._setRangeDefaults(d,t.defaultValueMin,t.defaultValueMax),this.valueRange=d}this.getDataTable()[0].hasOwnProperty("filter")&&void 0===this.dataFilter&&(this.dataFilter=new a(this,"filter",t),this.dataFilter.setOnLoadCallback(function(){t.redraw()}));return this.dataFilter?this.dataFilter._getDataPoints():this._getDataPoints(this.getDataTable())}}},o.prototype._collectRangeSettings=function(t,e){if(-1==["x","y","z"].indexOf(t))throw new Error("Column '"+t+"' invalid");var i=t.toUpperCase();return{barWidth:this[t+"BarWidth"],min:e["default"+i+"Min"],max:e["default"+i+"Max"],step:e["default"+i+"Step"],range_label:t+"Range",step_label:t+"Step"}},o.prototype._initializeRange=function(t,e,i,o){var n=this._collectRangeSettings(e,i),s=this.getColumnRange(t,e);o&&"z"!=e&&s.expand(n.barWidth/2),this._setRangeDefaults(s,n.min,n.max),this[n.range_label]=s,this[n.step_label]=void 0!==n.step?n.step:s.range()/5},o.prototype.getDistinctValues=function(t,e){void 0===e&&(e=this.dataTable);for(var i=[],o=0;os)&&(o=s)}return o},o.prototype.getColumnRange=function(t,e){for(var i=new r,o=0;o0&&(e[i-1].pointNext=e[i]);return e},o.prototype._checkValueField=function(t){if(this.style===h.STYLE.BARCOLOR||this.style===h.STYLE.BARSIZE||this.style===h.STYLE.DOTCOLOR||this.style===h.STYLE.DOTSIZE){if(void 0===this.colValue)throw new Error("Expected data to have field 'style' for graph style '"+this.style+"'");if(void 0===t[0][this.colValue])throw new Error("Expected data to have field '"+this.colValue+"' for graph style '"+this.style+"'")}},t.exports=o},function(t,e,i){function o(){this.min=void 0,this.max=void 0}o.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.maxi)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=i}},o.prototype.range=function(){return this.max-this.min},o.prototype.center=function(){return(this.min+this.max)/2},t.exports=o},function(t,e,i){var o,n,s;!function(i){n=[],o=i,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);-1!==e&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;!function(n,s,r,a){function h(t,e,i){return setTimeout(p(t,i),e)}function d(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&ft(o,i)}function p(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==gt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function g(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function S(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=R(o);e.timeStamp=_t(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=L(a,h),P(i,e),e.offsetDirection=z(e.deltaX,e.deltaY);var d=A(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=bt(d.x)>bt(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?B(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Et&&s.eventType!==Pt||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=It&&(h>Ot||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=A(h,d,l);o=u.x,n=u.y,i=bt(u.x)>bt(u.y)?u.x:u.y,s=z(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;i=bt(e)?t<0?Rt:At:e<0?zt:Lt}function L(t,e,i){i||(i=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function F(t,e,i){i||(i=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function B(t,e){return F(e[1],e[0],Wt)+F(t[1],t[0],Wt)}function j(t,e){return L(e[0],e[1],Wt)/L(t[0],t[1],Wt)}function H(){this.evEl=Gt,this.evWin=Vt,this.pressed=!1,C.apply(this,arguments)}function W(){this.evEl=Xt,this.evWin=Zt,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=Jt,this.evWin=$t,this.started=!1,C.apply(this,arguments)}function G(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Pt|It)&&(i=k(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=te,this.targetIds={},C.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Et|Tt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Et)for(n=0;n-1&&o.splice(t,1)};setTimeout(n,ee)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o=fe&&e(i.options.event+tt(o))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;te.threshold&&n&e.direction},attrTest:function(t){return ot.prototype.attrTest.call(this,t)&&(this.state&ce||!(this.state&ce)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=et(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(st,ot,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ce)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(rt,Q,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distancee.time;if(this._input=t,!o||!i||t.eventType&(Pt|It)&&!n)this.reset();else if(t.eventType&Et)this.reset(),this._timer=h(function(){this.state=me,this.tryEmit()},e.time,this);else if(t.eventType&Pt)return me;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===me&&(t&&t.eventType&Pt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=_t(),this.manager.emit(this.options.event,this._input)))}}),c(at,ot,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ce)}}),c(ht,ot,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ft|Bt,pointers:1},getTouchAction:function(){return nt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Ft|Bt)?e=t.overallVelocity:i&Ft?e=t.overallVelocityX:i&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&bt(e)>this.options.velocity&&t.eventType&Pt},emit:function(t){var e=et(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(dt,Q,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distanced+i?s+=h()+u-i+t.itemSet.options.margin.item.vertical:r=!1,s=Math.min(s,o-i),{shouldScroll:r,scrollOffset:s,itemTop:l}}var a=i(9),h=i(2),d=i(11),l=i(12),u=i(64),c=i(65),p=i(45),f=i(67),m=i(46),v=i(99),g=i(15).printStyle,y=i(105).allOptions,b=i(105).configureOptions,_=i(71).default,w=i(15).default;o.prototype=new c,o.prototype._createConfigurator=function(){return new _(this,this.dom.container,b)},o.prototype.redraw=function(){this.itemSet&&this.itemSet.markDirty({refreshItems:!0}),this._redraw()},o.prototype.setOptions=function(t){if(!0===w.validate(t,y)&&console.log("%cErrors have been found in the supplied options object.",g),c.prototype.setOptions.call(this,t),"type"in t&&t.type!==this.options.type){this.options.type=t.type;var e=this.itemsData;if(e){var i=this.getSelection();this.setItems(null),this.setItems(e),this.setSelection(i)}}},o.prototype.setItems=function(t){var e;e=t?t instanceof d||t instanceof l?t:new d(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e)},o.prototype.setGroups=function(t){var e;if(t){var i=function(t){return!1!==t.visible};e=t instanceof d||t instanceof l?new l(t,{filter:i}):new d(t.filter(i))}else e=null;this.groupsData=e,this.itemSet.setGroups(e)},o.prototype.setData=function(t){t&&t.groups&&this.setGroups(t.groups),t&&t.items&&this.setItems(t.items)},o.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},o.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},o.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],o=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),n=null,s=null;if(o.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===n||es)&&(s=i)}),null!==n&&null!==s){var a=this,h=this.itemSet.items[i[0]],d=-1*this._getScrollTop(),l=null,u=function(t,e,i){var o=r(a,h);if(l||(l=o),l.itemTop!=o.itemTop||l.shouldScroll){l.itemTop!=o.itemTop&&o.shouldScroll&&(l=o,d=-1*a._getScrollTop());var n=d,s=l.scrollOffset,u=i?s:n+(s-n)*t;a._setScrollTop(-u),e||a._redraw()}},c=function(){var t=r(a,h);t.shouldScroll&&t.itemTop!=l.itemTop&&(a._setScrollTop(-t.scrollOffset),a._redraw())},p=function(){c(),setTimeout(c,100)},f=(n+s)/2,m=Math.max(this.range.end-this.range.start,1.1*(s-n)),v=!e||void 0===e.animation||e.animation;v||(l={shouldScroll:!1,scrollOffset:-1,itemTop:-1}),this.range.setRange(f-m/2,f+m/2,{animation:v},p,u)}}},o.prototype.fit=function(t,e){var i,o=!t||void 0===t.animation||t.animation,n=this.itemsData&&this.itemsData.getDataSet();1===n.length&&void 0===n.get()[0].end?(i=this.getDataRange(),this.moveTo(i.min.valueOf(),{animation:o},e)):(i=this.getItemRange(),this.range.setRange(i.min,i.max,{animation:o},e))},o.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,r=null;if(null!=e&&null!=i){var a=i-e;a<=0&&(a=10);var d=a/this.props.center.width,l={},u=0;h.forEach(this.itemSet.items,function(t,e){if(t.groupShowing){l[e]=t.redraw(!0),u=l[e].length}});if(u>0)for(var c=0;ci&&(i=h,r=t)}.bind(this)),o&&r){var p=o.getWidthLeft()+10,f=r.getWidthRight()+10,m=this.props.center.width-p-f;m>0&&(this.options.rtl?(e=n(o)-f*a/m,i=s(r)+p*a/m):(e=n(o)-p*a/m,i=s(r)+f*a/m))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},o.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=h.convert(i.start,"Date").valueOf(),n=h.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||oe)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e,i=t.center?t.center.x:t.clientX,o=t.center?t.center.y:t.clientY;e=this.options.rtl?h.getAbsoluteRight(this.dom.centerContainer)-i:i-h.getAbsoluteLeft(this.dom.centerContainer);var n=o-h.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=m.customTimeFromTarget(t),d=this.itemSet.options.snap||null,l=this.body.util.getScale(),u=this.body.util.getStep(),c=this._toTime(e),p=d?d(c,l,u):c,f=h.getTarget(t),v=null;return null!=s?v="item":null!=a?v="custom-time":h.hasParent(f,this.timeAxis.dom.foreground)?v="axis":this.timeAxis2&&h.hasParent(f,this.timeAxis2.dom.foreground)?v="axis":h.hasParent(f,this.itemSet.dom.labelSet)?v="group-label":h.hasParent(f,this.currentTime.bar)?v="current-time":h.hasParent(f,this.dom.center)&&(v="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:v,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:e,y:n,time:c,snappedTime:p}},o.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(10),u=i(37),c=i(2),p=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),!0===c.isString(t)){if(!0===c.isValidRGB(t)){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(!0===c.isValidRGBA(t)){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===c.isValidHex(t)){var a=c.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=c.extend({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=c.extend({},t)),this.color=t;var e=c.RGBToHSV(t.r,t.g,t.b),i=2*Math.PI,o=this.r*e.s,n=this.centerCoordinates.x+o*Math.sin(i*e.h),s=this.centerCoordinates.y+o*Math.cos(i*e.h);this.colorPickerSelector.style.left=n-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=c.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=c.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=c.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d") +;this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/this.r,d=void 0;for(s=0;s<360;s++)for(r=0;rr?r:t,e=null==e?r:e0&&l.push(u.screenToValue(n)),!p.hidden&&this.itemsData.length>0&&l.push(p.screenToValue(n)),{event:t,what:d,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:r,value:l}},o.prototype._createConfigurator=function(){return new g(this,this.dom.container,v)},t.exports=o},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Network=i(182),e.network={Images:i(116),dotparser:i(114),gephiParser:i(115),allOptions:i(122)},e.network.convertDot=function(t){return e.network.dotparser.DOTToGraph(t)},e.network.convertGephi=function(t,i){return e.network.gephiParser.parseGephi(t,i)},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){function o(t,e,i){var n=this;if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:d,clickToUse:!1},s.extend(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this),once:this.once.bind(this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}}},this.bindEventListeners(),this.images=new l(function(){return n.body.emitter.emit("_requestRedraw")}),this.groups=new u,this.canvas=new g(this.body),this.selectionHandler=new _(this.body,this.canvas),this.interactionHandler=new b(this.body,this.canvas,this.selectionHandler),this.view=new y(this.body,this.canvas),this.renderer=new v(this.body,this.canvas),this.physics=new f(this.body),this.layoutEngine=new w(this.body),this.clustering=new m(this.body),this.manipulation=new x(this.body,this.canvas,this.selectionHandler),this.nodesHandler=new c(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new p(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new T(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}i(183);var n=i(44),s=i(2),r=i(114),a=i(115),h=i(97),d=i(184),l=i(116).default,u=i(186).default,c=i(187).default,p=i(214).default,f=i(220).default,m=i(227).default,v=i(229).default,g=i(230).default,y=i(231).default,b=i(232).default,_=i(234).default,w=i(235).default,x=i(237).default,k=i(71).default,S=i(15).default,D=i(15),M=D.printStyle,C=i(122),O=C.allOptions,E=C.configureOptions,T=i(238).default;n(o.prototype),o.prototype.setOptions=function(t){var e=this;if(void 0!==t){!0===S.validate(t,O)&&console.log("%cErrors have been found in the supplied options object.",M);var i=["locale","locales","clickToUse"];if(s.selectiveDeepExtend(i,this.options,t),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit("refreshNodes"),"configure"in t&&(this.configurator||(this.configurator=new k(this,this.body.container,E,this.canvas.pixelRatio)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var o={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};s.deepExtend(o.nodes,this.nodesHandler.options),s.deepExtend(o.edges,this.edgesHandler.options),s.deepExtend(o.layout,this.layoutEngine.options),s.deepExtend(o.interaction,this.selectionHandler.options),s.deepExtend(o.interaction,this.renderer.options),s.deepExtend(o.interaction,this.interactionHandler.options),s.deepExtend(o.manipulation,this.manipulation.options),s.deepExtend(o.physics,this.physics.options),s.deepExtend(o.global,this.canvas.options),s.deepExtend(o.global,this.options),this.configurator.setModuleOptions(o)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new h(this.canvas.frame),this.activator.on("change",function(){e.body.emitter.emit("activate")})):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},o.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(var i in t)t.hasOwnProperty(i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],s=t[n.fromId],r=t[n.toId],a=void 0!==s&&void 0!==r,h=!this.clustering._isClusteredEdge(o)&&!1===n.options.hidden&&a&&!1===s.options.hidden&&!1===r.options.hidden;h&&this.body.edgeIndices.push(n.id)}},o.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.edgesHandler._updateState(),t.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit("startSimulation"),t.body.emitter.emit("_requestRedraw")})},o.prototype.setData=function(t){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.log("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");var e=r.DOTToGraph(t.dot);return void this.setData(e)}if(t&&t.gephi){console.log("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");var i=a.parseGephi(t.gephi);return void this.setData(i)}this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},o.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(var t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&delete this.body.nodes[t];for(var e in this.body.edges)this.body.edges.hasOwnProperty(e)&&delete this.body.edges[e];s.recursiveDOMDelete(this.body.container)},o.prototype._updateValueRange=function(t){var e,i=void 0,o=void 0,n=0;for(e in t)if(t.hasOwnProperty(e)){var s=t[e].getValue();void 0!==s&&(i=void 0===i?s:Math.min(s,i),o=void 0===o?s:Math.max(s,o),n+=s)}if(void 0!==i&&void 0!==o)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,o,n)},o.prototype.isActive=function(){return!this.activator||this.activator.active},o.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},o.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},o.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},o.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},o.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},o.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},o.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},o.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},o.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},o.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},o.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},o.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},o.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},o.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},o.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},o.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},o.prototype.editNodeMode=function(){return console.log("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},o.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},o.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},o.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},o.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},o.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},o.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},o.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},o.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},o.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},o.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},o.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},o.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},o.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},o.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},o.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler,arguments)},o.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler,arguments)},o.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},o.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},o.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},o.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},o.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.redraw()},o.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},o.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},o.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},o.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},o.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},o.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},o.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},o.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t},t.exports=o},function(t,e,i){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(t,e,i){this.beginPath(),this.arc(t,e,i,0,2*Math.PI,!1),this.closePath()},CanvasRenderingContext2D.prototype.square=function(t,e,i){this.beginPath(),this.rect(t-i,e-i,2*i,2*i),this.closePath()},CanvasRenderingContext2D.prototype.triangle=function(t,e,i){this.beginPath(),i*=1.15,e+=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e-(r-s)),this.lineTo(t+n,e+s),this.lineTo(t-n,e+s),this.lineTo(t,e-(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(t,e,i){this.beginPath(),i*=1.15,e-=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e+(r-s)),this.lineTo(t+n,e-s),this.lineTo(t-n,e-s),this.lineTo(t,e+(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(t,e,i){this.beginPath(),i*=.82,e+=.1*i;for(var o=0;o<10;o++){var n=o%2==0?1.3*i:.5*i;this.lineTo(t+n*Math.sin(2*o*Math.PI/10),e-n*Math.cos(2*o*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.diamond=function(t,e,i){this.beginPath(),this.lineTo(t,e+i),this.lineTo(t+i,e),this.lineTo(t,e-i),this.lineTo(t-i,e),this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,o,n){var s=Math.PI/180;i-2*n<0&&(n=i/2),o-2*n<0&&(n=o/2),this.beginPath(),this.moveTo(t+n,e),this.lineTo(t+i-n,e),this.arc(t+i-n,e+n,n,270*s,360*s,!1),this.lineTo(t+i,e+o-n),this.arc(t+i-n,e+o-n,n,0,90*s,!1),this.lineTo(t+n,e+o),this.arc(t+n,e+o-n,n,90*s,180*s,!1),this.lineTo(t,e+n),this.arc(t+n,e+n,n,180*s,270*s,!1),this.closePath()},CanvasRenderingContext2D.prototype.ellipse_vis=function(t,e,i,o){var n=i/2*.5522848,s=o/2*.5522848,r=t+i,a=e+o,h=t+i/2,d=e+o/2;this.beginPath(),this.moveTo(t,d),this.bezierCurveTo(t,d-s,h-n,e,h,e),this.bezierCurveTo(h+n,e,r,d-s,r,d),this.bezierCurveTo(r,d+s,h+n,a,h,a),this.bezierCurveTo(h-n,a,t,d+s,t,d),this.closePath()},CanvasRenderingContext2D.prototype.database=function(t,e,i,o){var n=i,s=o*(1/3),r=n/2*.5522848,a=s/2*.5522848,h=t+n,d=e+s,l=t+n/2,u=e+s/2,c=e+(o-s/2),p=e+o;this.beginPath(),this.moveTo(h,u),this.bezierCurveTo(h,u+a,l+r,d,l,d),this.bezierCurveTo(l-r,d,t,u+a,t,u),this.bezierCurveTo(t,u-a,l-r,e,l,e),this.bezierCurveTo(l+r,e,h,u-a,h,u),this.lineTo(h,c),this.bezierCurveTo(h,c+a,l+r,p,l,p),this.bezierCurveTo(l-r,p,t,c+a,t,c),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,o,n){this.beginPath(),this.moveTo(t,e);for(var s=n.length,r=i-t,a=o-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,u=!0,c=0,p=n[0];d>=.1;)p=n[l++%s],p>d&&(p=d),c=Math.sqrt(p*p/(1+h*h)),c=r<0?-c:c,t+=c,e+=h*c,!0===u?this.lineTo(t,e):this.moveTo(t,e),d-=p,u=!u},CanvasRenderingContext2D.prototype.hexagon=function(t,e,i){this.beginPath();var o=2*Math.PI/6;this.moveTo(t+i,e);for(var n=1;n<6;n++)this.lineTo(t+i*Math.cos(o*n),e+i*Math.sin(o*n));this.closePath()})},function(t,e,i){e.en={edit:"Edit",del:"Delete selected",back:"Back",addNode:"Add Node",addEdge:"Add Edge",editNode:"Edit Node",editEdge:"Edit Edge",addDescription:"Click in an empty space to place a new node.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",createEdgeError:"Cannot link edges to a cluster.",deleteClusterError:"Clusters cannot be deleted.",editClusterError:"Clusters cannot be edited."},e.en_EN=e.en,e.en_US=e.en,e.de={edit:"Editieren",del:"Lösche Auswahl",back:"Zurück",addNode:"Knoten hinzufügen",addEdge:"Kante hinzufügen",editNode:"Knoten editieren",editEdge:"Kante editieren",addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",deleteClusterError:"Cluster können nicht gelöscht werden.",editClusterError:"Cluster können nicht editiert werden."},e.de_DE=e.de,e.es={edit:"Editar",del:"Eliminar selección",back:"Átras",addNode:"Añadir nodo",addEdge:"Añadir arista",editNode:"Editar nodo",editEdge:"Editar arista",addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",createEdgeError:"No se puede conectar una arista a un grupo.",deleteClusterError:"No es posible eliminar grupos.",editClusterError:"No es posible editar grupos."},e.es_ES=e.es,e.it={edit:"Modifica",del:"Cancella la selezione",back:"Indietro",addNode:"Aggiungi un nodo",addEdge:"Aggiungi un vertice",editNode:"Modifica il nodo",editEdge:"Modifica il vertice",addDescription:"Clicca per aggiungere un nuovo nodo",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",createEdgeError:"Non si possono collegare vertici ad un cluster",deleteClusterError:"I cluster non possono essere cancellati",editClusterError:"I clusters non possono essere modificati."},e.it_IT=e.it,e.nl={edit:"Wijzigen",del:"Selectie verwijderen",back:"Terug",addNode:"Node toevoegen",addEdge:"Link toevoegen",editNode:"Node wijzigen",editEdge:"Link wijzigen",addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",createEdgeError:"Kan geen link maken naar een cluster.",deleteClusterError:"Clusters kunnen niet worden verwijderd.",editClusterError:"Clusters kunnen niet worden aangepast."},e.nl_NL=e.nl,e.nl_BE=e.nl,e["pt-br"]={edit:"Editar",del:"Remover selecionado",back:"Voltar",addNode:"Adicionar nó",addEdge:"Adicionar aresta",editNode:"Editar nó",editEdge:"Editar aresta",addDescription:"Clique em um espaço em branco para adicionar um novo nó",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",createEdgeError:"Não foi possível linkar arestas a um cluster.",deleteClusterError:"Clusters não puderam ser removidos.",editClusterError:"Clusters não puderam ser editados."},e["pt-BR"]=e["pt-br"],e.pt_BR=e["pt-br"],e.pt_br=e["pt-br"],e.ru={edit:"Редактировать",del:"Удалить выбранное",back:"Назад",addNode:"Добавить узел",addEdge:"Добавить ребро",editNode:"Редактировать узел",editEdge:"Редактировать ребро",addDescription:"Кликните в свободное место, чтобы добавить новый узел.",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",createEdgeError:"Невозможно соединить ребра в кластер.",deleteClusterError:"Кластеры не могут быть удалены",editClusterError:"Кластеры недоступны для редактирования."},e.ru_RU=e.ru,e.cn={edit:"编辑",del:"åˆ é™¤é€‰å®š",back:"返回",addNode:"æ·»åŠ èŠ‚ç‚¹",addEdge:"æ·»åŠ è¿žæŽ¥çº¿",editNode:"编辑节点",editEdge:"编辑连接线",addDescription:"单击空白处放置新节点。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",createEdgeError:"æ— æ³•å°†è¿žæŽ¥çº¿è¿žæŽ¥åˆ°ç¾¤é›†ã€‚",deleteClusterError:"æ— æ³•åˆ é™¤ç¾¤é›†ã€‚",editClusterError:"æ— æ³•ç¼–è¾‘ç¾¤é›†ã€‚"},e.zh_CN=e.cn},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(){(0,s.default)(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return(0,a.default)(t,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),o=Math.floor(e/4),n=Math.floor(e/8),s=Math.floor(e/16),r=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),d=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,r,i],[r,0,a,o],[r,o,h,n],[5*h,o,d,s]],this._fillMipMap()}}},{key:"initialized",value:function(){return void 0!==this.coordinates}},{key:"_fillMipMap",value:function(){var t=this.canvas.getContext("2d"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i2){e*=.5;for(var r=0;e>2&&r=this.NUM_ITERATIONS&&(r=this.NUM_ITERATIONS-1);var a=this.coordinates[r];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,o,n,s)}else t.drawImage(this.image,i,o,n,s)}}]),t}();e.default=h},function(t,e,i){ +function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=function(){function t(){(0,s.default)(this,t),this.clear(),this.defaultIndex=0,this.groupsArray=[],this.groupIndex=0,this.defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},h.extend(this.options,this.defaultOptions)}return(0,a.default)(t,[{key:"setOptions",value:function(t){var e=["useDefaultGroups"];if(void 0!==t)for(var i in t)if(t.hasOwnProperty(i)&&-1===e.indexOf(i)){var o=t[i];this.add(i,o)}}},{key:"clear",value:function(){this.groups={},this.groupsArray=[]}},{key:"get",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.groups[t];if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this.groupsArray.length>0){var o=this.groupIndex%this.groupsArray.length;this.groupIndex++,i={},i.color=this.groups[this.groupsArray[o]],this.groups[t]=i}else{var n=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,i={},i.color=this.defaultGroups[n],this.groups[t]=i}return i}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e.default=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(11),l=i(12),u=i(47).default,c=function(){function t(e,i,o,n){var r=this;if((0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.layoutEngine=n,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items,e.data,e.oldData)},remove:function(t,e){r.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"monospace",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative";this.options=h.bridgeObject(this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){h.forEach(t.nodesListeners,function(e,i){t.body.data.nodes&&t.body.data.nodes.off(i,e)}),delete t.body.functions.createNode,delete t.nodesListeners.add,delete t.nodesListeners.update,delete t.nodesListeners.remove,delete t.nodesListeners})}},{key:"setOptions",value:function(t){if(void 0!==t){if(u.parseOptions(this.options,t),void 0!==t.shape)for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&this.body.nodes[e].updateShape();if(void 0!==t.font)for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i].needsRefresh());if(void 0!==t.size)for(var o in this.body.nodes)this.body.nodes.hasOwnProperty(o)&&this.body.nodes[o].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(t instanceof d||t instanceof l)this.body.data.nodes=t;else if(Array.isArray(t))this.body.data.nodes=new d,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new d}if(i&&h.forEach(this.nodesListeners,function(t,e){i.off(e,t)}),this.body.nodes={},this.body.data.nodes){var o=this;h.forEach(this.nodesListeners,function(t,e){o.body.data.nodes.on(e,t)});var n=this.body.data.nodes.getIds();this.add(n,!0)}!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:u)(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];h.forEach(this.body.nodes,function(i,o){var n=t.body.data.nodes.get(o);void 0!==n&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(n))})}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(!0===Array.isArray(t)){for(var i=0;i0)for(var r=0;r0)for(var p=0;p0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position/.test(t.substr(i.position,3))?i.mono||i.ital||!//.test(t.substr(i.position,3))?!i.mono&&//.test(t.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(t.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(t.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(t.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(o):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(o)?/</.test(t.substr(i.position,4))?(i.add("<"),i.position+=3):/&/.test(t.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(o),i.position++}return i.emitBlock(),e}},{key:"splitMarkdownBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(t){for(var e="",i=0;i1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t=t.replace(/^( +)/g,"$1\r"),t=t.replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r");for(var o=t.split("\r");o.length>0;){var n=this.getLongestFit(o);if(0===n){var s=o[0],r=this.getLongestFitWord(s);this.lines.newLine(s.slice(0,r),e),o[0]=s.slice(r)}else{var a=n;" "===o[n-1]?n--:" "===o[a]&&a++;var h=o.slice(0,n).join("");n==o.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),o=o.slice(a)}}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(90),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=function(){function t(e){(0,a.default)(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return(0,d.default)(t,[{key:"_add",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var o=e;void 0!==e&&""!==e||(o=" ");var n=this.measureText(o,i),r=(0,s.default)({},n.values);r.text=e,r.width=n.width,r.mod=i,void 0!==e&&""!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:"curWidth",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:"append",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e)}},{key:"newLine",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e),this.current++}},{key:"determineLineHeights",value:function(){for(var t=0;tt&&(t=o.width),e+=o.height}this.width=t,this.height=e}},{key:"removeEmptyBlocks",value:function(){for(var t=[],e=0;e1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i);this.width=o.width+this.margin.right+this.margin.left,this.height=o.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,s),t.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this._updateBoundingBox(t,e,i,o,n);var s=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(s)}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(m.default);e.default=v},function(t,e,i){i(195),t.exports=i(7).Object.getPrototypeOf},function(t,e,i){var o=i(41),n=i(85);i(87)("getPrototypeOf",function(){return function(t){return n(o(t))}})},function(t,e,i){t.exports={default:i(197),__esModule:!0}},function(t,e,i){i(198),t.exports=i(7).Object.setPrototypeOf},function(t,e,i){var o=i(17);o(o.S,"Object",{setPrototypeOf:i(199).set})},function(t,e,i){var o=i(32),n=i(27),s=function(t,e){if(n(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,o){try{o=i(80)(Function.call,i(89).f(Object.prototype,"__proto__").set,2),o(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return s(t,i),e?t.__proto__=i:o(t,i),t}}({},!1):void 0),check:s}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i),n=Math.max(o.width+this.margin.right+this.margin.left,o.height+this.margin.top+this.margin.bottom);this.options.size=n/2,this.width=n,this.height=n,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),t.save(),t.clip(),this._drawImageAtPosition(t,s),t.restore(),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i),n=o.width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,s),t.database(e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"diamond",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"circle",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),this.options.size}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i);this.height=2*o.height,this.width=o.width+o.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,s),t.ellipse_vis(this.left,this.top,this.width,this.height),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,e,i,o,n)}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){if(this.resize(t,o,n),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,n,s),void 0!==this.options.label){this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+5,o)}this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(t,e,i,o,n,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+r+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,s),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){if(this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,!0===this.options.shapeProperties.useBorderWithImage){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,h=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,h),t.beginPath(),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),t.fill(),this.performStroke(t,s),t.closePath()}this._drawImageAtPosition(t,s),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this._updateBoundingBox(t,e),void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)} +}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"square",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"hexagon",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"star",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n),this.disableShadow(t,s),this.updateBoundingBox(e,i,t,o,n)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangle",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangleDown",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(11),l=i(12),u=i(74).default,c=function(){function t(e,i,o){var n=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.body.functions.createEdge=this.create.bind(this),this.edgesListeners={add:function(t,e){n.add(e.items)},update:function(t,e){n.update(e.items)},remove:function(t,e){n.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},selectionWidth:1.5,selfReferenceSize:20,shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},h.deepExtend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_forceDisableDynamicCurves",function(e){var i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===e&&(e="continuous");var o=!1;for(var n in t.body.edges)if(t.body.edges.hasOwnProperty(n)){var s=t.body.edges[n],r=t.body.data.edges._data[n];if(void 0!==r){var a=r.smooth;void 0!==a&&!0===a.enabled&&"dynamic"===a.type&&(void 0===e?s.setOptions({smooth:!1}):s.setOptions({smooth:{type:e}}),o=!0)}}!0===i&&!0===o&&t.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){t.reconnectEdges()}),this.body.emitter.on("refreshEdges",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){h.forEach(t.edgesListeners,function(e,i){t.body.data.edges&&t.body.data.edges.off(i,e)}),delete t.body.functions.createEdge,delete t.edgesListeners.add,delete t.edgesListeners.update,delete t.edgesListeners.remove,delete t.edgesListeners})}},{key:"setOptions",value:function(t){if(void 0!==t){u.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)this.body.edges.hasOwnProperty(i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var o in this.body.edges)this.body.edges.hasOwnProperty(o)&&this.body.edges[o].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.data.edges;if(t instanceof d||t instanceof l)this.body.data.edges=t;else if(Array.isArray(t))this.body.data.edges=new d,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new d}if(o&&h.forEach(this.edgesListeners,function(t,e){o.off(e,t)}),this.body.edges={},this.body.data.edges){h.forEach(this.edgesListeners,function(t,i){e.body.data.edges.on(i,t)});var n=this.body.data.edges.getIds();this.add(n,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===i&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,o=this.body.data.edges,n=0;n1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;h.forEach(t,function(t){var e=i[t];void 0!==e&&e.remove()}),e&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var t=this;h.forEach(this.body.edges,function(e,i){var o=t.body.data.edges._data[i];void 0!==o&&e.setOptions(o)})}},{key:"create",value:function(t){return new u(t,this.body,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var o=i[t];o.from=null,o.to=null,o.connect()}}},{key:"getConnectedNodes",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var t=this,e=[];h.forEach(this.body.edges,function(i,o){var n=t.body.nodes[i.toId],s=t.body.nodes[i.fromId];void 0!==n&&!0===n.isCluster||void 0!==s&&!0===s.isCluster||void 0!==n&&void 0!==s||e.push(o)}),this.remove(e,!1)}},{key:"_addMissingEdges",value:function(){var t=this.body.edges,e=this.body.data.edges,i=[];e.forEach(function(e,o){void 0===t[o]&&i.push(o)}),this.add(i,!0)}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(3),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(4),p=o(c),f=i(5),m=o(f),v=i(216),g=o(v),y=function(t){function e(t,i,o){return(0,d.default)(this,e),(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o))}return(0,m.default)(e,t),(0,u.default)(e,[{key:"_line",value:function(t,e,i){var o=i[0],n=i[1];this._bezierCurve(t,e,o,n)}},{key:"_getViaCoordinates",value:function(){var t=this.from.x-this.to.x,e=this.from.y-this.to.y,i=void 0,o=void 0,n=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(t)>Math.abs(e)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),h=(0,s.default)(a,2),d=h[0],l=h[1];return this._getDistanceToBezierEdge(t,e,i,o,n,r,d,l)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(e,2),o=i[0],n=i[1],r=t,a=[];return a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3),{x:a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,y:a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y}}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(75),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r,a){var h=1e9,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=t,m=e,v=[0,0,0,0];for(l=1;l<10;l++)u=.1*l,v[0]=Math.pow(1-u,3),v[1]=3*u*Math.pow(1-u,2),v[2]=3*Math.pow(u,2)*(1-u),v[3]=Math.pow(u,3),c=v[0]*t+v[1]*r.x+v[2]*a.x+v[3]*i,p=v[0]*e+v[1]*r.y+v[2]*a.y+v[3]*o,l>0&&(d=this._getDistanceToLine(f,m,c,p,n,s),h=d1&&void 0!==arguments[1]?arguments[1]:this.via,i=t,o=void 0,n=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),h=a[0],d=a[1],l=a[2],u=2*Math.PI*(1-i);o=h+l*Math.sin(u),n=d+l-l*(1-Math.cos(u))}else o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToBezierEdge(t,e,i,o,n,s,this.via)}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(75),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t=void 0,e=void 0,i=this.options.smooth.roundness,o=this.options.smooth.type,n=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===o||"diagonalCross"===o){var r=void 0,a=void 0;r=a=n<=s?i*s:i*n,this.from.x>this.to.x&&(r=-r),this.from.y>=this.to.y&&(a=-a),t=this.from.x+r,e=this.from.y+a,"discrete"===o&&(n<=s?t=nthis.to.x&&(_=-_),this.from.y>=this.to.y&&(w=-w),t=this.from.x+_,e=this.from.y+w,n<=s?t=this.from.x<=this.to.x?this.to.xt?this.to.x:t:e=this.from.y>=this.to.y?this.to.y>e?this.to.y:e:this.to.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,n,s,r)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(118),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);var n=Math.atan2(i.y-o.y,i.x-o.x),s=i.x-o.x,r=i.y-o.y,a=Math.sqrt(s*s+r*r),h=t.distanceToBorder(e,n),d=(a-h)/a,l={};return l.x=(1-d)*o.x+d*i.x,l.y=(1-d)*o.y+d*i.y,l}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToLine(t,e,i,o,n,s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(120).default,u=i(221).default,c=i(222).default,p=i(223).default,f=i(224).default,m=i(121).default,v=i(225).default,g=i(226).default,y=i(2),b=i(119).default,_=function(){function t(e){(0,a.default)(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},y.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,d.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",function(){t.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){t.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){t.stopSimulation(),t.ready=!1}),this.body.emitter.on("disablePhysics",function(){t.physicsEnabled=!1,t.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()}),this.body.emitter.on("startSimulation",function(){!0===t.ready&&t.startSimulation()}),this.body.emitter.on("stopSimulation",function(){t.stopSimulation()}),this.body.emitter.on("destroy",function(){t.stopSimulation(!1),t.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){t.updatePhysicsData()})}},{key:"setOptions",value:function(t){void 0!==t&&(!1===t?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):!0===t?(this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation()):(this.physicsEnabled=!0,y.selectiveNotDeepExtend(["stabilization"],this.options,t),y.mergeOptions(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new v(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new g(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new u(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new c(this.body,this.physicsBody,t),this.edgesSolver=new f(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new l(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Date.now();this.physicsTick(),(Date.now()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,o=0;oo&&(t=t>0?o:-o),t}},{key:"_performStep",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t],o=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:o.x,vy:o.y},!1===e.options.fixed.x?(o.x=this.calculateComponentVelocity(o.x,i.x,e.options.mass),e.x+=o.x*this.timestep):(i.x=0,o.x=0),!1===e.options.fixed.y?(o.y=this.calculateComponentVelocity(o.y,i.y,e.options.mass),e.y+=o.y*this.timestep):(i.y=0,o.y=0),Math.sqrt(Math.pow(o.x,2)+Math.pow(o.y,2))}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)if(t.hasOwnProperty(e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;if("number"!=typeof e&&(e=this.options.stabilization.iterations,console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",e)),0===this.physicsBody.physicsNodeIndices.length)return void(this.ready=!0);this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,setTimeout(function(){return t._stabilizationBatch()},0)}},{key:"_startStabilizing",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations0){var s=n.edges.length+1,r=this.options.centralGravity*s*n.options.mass;o[n.id].x=e*r,o[n.id].y=i*r}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(76).default,f=i(228).default,m=i(74).default,v=i(47).default,g=function(){function t(e){var i=this;(0,d.default)(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},c.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(t,[{key:"clusterByHubsize",value:function(t,e){void 0===t?t=this._getHubSize():"object"===(void 0===t?"undefined":(0,a.default)(t))&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],o=0;o=t&&i.push(n.id)}for(var s=0;s0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");e=this._checkOptions(e);var o={},n={};c.forEach(this.body.nodes,function(i,s){var r=p.cloneOptions(i);!0===e.joinCondition(r)&&(o[s]=i,c.forEach(i.edges,function(e){void 0===t.clusteredEdges[e.id]&&(n[e.id]=e)}))}),this._cluster(o,n,e,i)}},{key:"clusterByEdgeCount",value:function(t,e){var i=this,o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var n=[],r={},a=void 0,h=void 0,d=void 0,l=0;l0&&(0,s.default)(m).length>0&&!0===b)if(c=function(){for(var t=0;t1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];e=this._checkOptions(e,o),void 0===e.clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var n={},r={},a=o.id,h=p.cloneOptions(o);n[a]=o;for(var d=0;d-1&&(r[g.id]=g)}this._cluster(n,r,e,i)}},{key:"_createClusterEdges",value:function(t,e,i,o){for(var n=void 0,r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=(0,s.default)(t),c=[],p=0;p0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(0!=(0,s.default)(t).length&&(1!=(0,s.default)(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){for(var n in t)if(t.hasOwnProperty(n)&&void 0!==this.clusteredNodes[n])return;var r=c.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var a=[];for(var h in t)if(t.hasOwnProperty(h)){var d=p.cloneOptions(t[h]);a.push(d)}var l=[];for(var u in e)if(e.hasOwnProperty(u)&&"clusterEdge:"!==u.substr(0,12)){var m=p.cloneOptions(e[u],"edge");l.push(m)}if(!(r=i.processProperties(r,a,l)))throw new Error("The processProperties function does not return properties!")}void 0===r.id&&(r.id="cluster:"+c.randomUUID());var v=r.id;void 0===r.label&&(r.label="cluster");var g=void 0;void 0===r.x&&(g=this._getClusterPosition(t),r.x=g.x),void 0===r.y&&(void 0===g&&(g=this._getClusterPosition(t)),r.y=g.y),r.id=v;var y=this.body.functions.createNode(r,f);y.containedNodes=t,y.containedEdges=e,y.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[r.id]=y,this._clusterEdges(t,e,r,i.clusterEdgeProperties),r.id=void 0,!0===o&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:"_restoreEdge",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:"isCluster",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(t){for(var e=(0,s.default)(t),i=t[e[0]].x,o=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].y,a=void 0,h=1;ho?a.x:o,n=a.yr?a.y:r;return{x:.5*(i+o),y:.5*(n+r)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");var o=this.body.nodes[t];if(void 0===o)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==o.isCluster||void 0===o.containedNodes||void 0===o.containedEdges)throw new Error("The node:"+t+" is not a valid cluster.");var n=this.findNode(t),s=n.indexOf(t)-1;if(s>=0){var r=n[s];return this.body.nodes[r]._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit("_dataChanged"))}var a=o.containedNodes,h=o.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var d={},l={x:o.x,y:o.y};for(var u in a)if(a.hasOwnProperty(u)){var p=this.body.nodes[u];d[u]={x:p.x,y:p.y}}var f=e.releaseFunction(l,d);for(var m in a)if(a.hasOwnProperty(m)){var v=this.body.nodes[m];void 0!==f[m]&&(v.x=void 0===f[m].x?o.x:f[m].x,v.y=void 0===f[m].y?o.y:f[m].y)}}else c.forEach(a,function(t){!1===t.options.fixed.x&&(t.x=o.x),!1===t.options.fixed.y&&(t.y=o.y)});for(var g in a)if(a.hasOwnProperty(g)){var y=this.body.nodes[g];y.vx=o.vx,y.vy=o.vy,y.setOptions({physics:!0}),delete this.clusteredNodes[g]}for(var b=[],_=0;_0&&n<100;){var s=e.pop();if(void 0!==s){var r=this.body.edges[s];if(void 0!==r){n++;var a=r.clusteringEdgeReplacingIds;if(void 0===a)o.push(s);else for(var h=0;ho&&(o=s.edges.length),t+=s.edges.length,e+=Math.pow(s.edges.length,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r),h=Math.floor(t+2*a);return h>o&&(h=o),h}},{key:"_createClusteredEdge",value:function(t,e,i,o,n){var s=p.cloneOptions(i,"edge");c.deepExtend(s,o),s.from=t,s.to=e,s.id="clusterEdge:"+c.randomUUID(),void 0!==n&&c.deepExtend(s,n);var r=this.body.functions.createEdge(s);return r.clusteringEdgeReplacingIds=[i.id],r.connect(),this.body.edges[r.id]=r,r}},{key:"_clusterEdges",value:function(t,e,i,o){if(e instanceof m){var n=e,s={};s[n.id]=n,e=s}if(t instanceof v){var r=t,a={};a[r.id]=r,t=a}if(void 0===i||null===i)throw new Error("_clusterEdges: parameter clusterNode required");void 0===o&&(o=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,o);for(var h in e)if(e.hasOwnProperty(h)&&void 0!==this.body.edges[h]){var d=this.body.edges[h];this._backupEdgeOptions(d),d.setOptions({physics:!1})}for(var l in t)t.hasOwnProperty(l)&&(this.clusteredNodes[l]={clusterId:i.id,node:this.body.nodes[l]},this.body.nodes[l].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:"_filter",value:function(t,e){var i=[];return c.forEach(t,function(t){e(t)&&i.push(t)}),i}},{key:"_updateState",value:function(){var t=this,e=void 0,i=[],o=[],n=function(e){c.forEach(t.body.nodes,function(t){!0===t.isCluster&&e(t)})};for(e in this.clusteredNodes)if(this.clusteredNodes.hasOwnProperty(e)){var r=this.body.nodes[e];void 0===r&&i.push(e)}n(function(t){for(var e=0;e0}e.endPointsValid()&&n||o.push(i)}),n(function(e){c.forEach(o,function(i){delete e.containedEdges[i],c.forEach(e.edges,function(n,s){if(n.id===i)return void(e.edges[s]=null);n.clusteringEdgeReplacingIds=t._filter(n.clusteringEdgeReplacingIds,function(t){return-1===o.indexOf(t)})}),e.edges=t._filter(e.edges,function(t){return null!==t})})}),c.forEach(o,function(e){delete t.clusteredEdges[e]}),c.forEach(o,function(e){delete t.body.edges[e]});var h=(0,s.default)(this.body.edges);c.forEach(h,function(e){var i=t.body.edges[e],o=t._isClusteredNode(i.fromId)||t._isClusteredNode(i.toId);if(o!==t._isClusteredEdge(i.id)){if(!o)throw new Error("remove edge from clustering not implemented!");var n=t._getClusterNodeForNode(i.fromId);void 0!==n&&t._clusterEdges(t.body.nodes[i.fromId],i,n);var s=t._getClusterNodeForNode(i.toId);void 0!==s&&t._clusterEdges(t.body.nodes[i.toId],i,s)}});for(var d=!1,l=!0;l;)!function(){var e=[];n(function(t){var i=(0,s.default)(t.containedNodes).length,o=!0===t.options.allowSingleNodeCluster;(o&&i<1||!o&&i<2)&&e.push(t.id)});for(var i=0;i0,d=d||l}();d&&this._updateState()}},{key:"_isClusteredNode",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:"_isClusteredEdge",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(2),m=i(47).default,v=function(t){function e(t,i,o,n,r,h){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o,n,r,h));return d.isCluster=!0,d.containedNodes={},d.containedEdges={},d}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_openChildCluster",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error("node with id: "+t+" not in current cluster");if(!i.isCluster)throw new Error("node with id: "+t+" is not a cluster");delete this.containedNodes[t],f.forEach(i.edges,function(t){delete e.containedEdges[t.id]}),f.forEach(i.containedNodes,function(t,i){e.containedNodes[i]=t}),i.containedNodes={},f.forEach(i.containedEdges,function(t,i){e.containedEdges[i]=t}),i.containedEdges={},f.forEach(i.edges,function(t){f.forEach(e.edges,function(i){var o=i.clusteringEdgeReplacingIds.indexOf(t.id);-1!==o&&(f.forEach(t.clusteringEdgeReplacingIds,function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id}),i.clusteringEdgeReplacingIds.splice(o,1))})}),i.edges=[]}}]),e}(m);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){var t;void 0!==window&&(t=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===t?function(t){t()}:t}Object.defineProperty(e,"__esModule",{value:!0});var s=i(0),r=o(s),a=i(1),h=o(a),d=i(2),l=function(){function t(e,i){(0,r.default)(this,t),n(),this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideNodesOnDrag:!1},d.extend(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return(0,h.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("dragStart",function(){t.dragging=!0}),this.body.emitter.on("dragEnd",function(){t.dragging=!1}),this.body.emitter.on("_resizeNodes",function(){t._resizeNodes()}),this.body.emitter.on("_redraw",function(){!1===t.renderingActive&&t._redraw()}),this.body.emitter.on("_blockRedraw",function(){t.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){t.allowRedraw=!0,t.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",this._requestRedraw.bind(this)),this.body.emitter.on("_startRendering",function(){t.renderRequests+=1,t.renderingActive=!0,t._startRendering()}),this.body.emitter.on("_stopRendering",function(){t.renderRequests-=1,t.renderingActive=t.renderRequests>0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,!0===t.requiresTimeout?clearTimeout(t.renderTimer):window.cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];d.selectiveDeepExtend(e,this.options,t)}}},{key:"_requestNextFrame",value:function(t,e){if("undefined"!=typeof window){var i=void 0,o=window;return!0===this.requiresTimeout?i=o.setTimeout(t,e):o.requestAnimationFrame&&(i=o.requestAnimationFrame(t)),i}}},{key:"_startRendering",value:function(){!0===this.renderingActive&&void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(this._renderStep.bind(this),this.simulationInterval))}},{key:"_renderStep",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame(function(){t._redraw(!1)},0))}},{key:"_redraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1,0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var e=this.canvas.getContext(),i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&this._drawEdges(e),(!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),!0===t&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=this.canvas.DOMtoCanvas({x:-20,y:-20}),a=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),h={top:r.y,left:r.x,bottom:a.y,right:a.x},d=0;d0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==t.indexOf("%")||-1!==t.indexOf("px"))return t;if(-1===t.indexOf("%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new h(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:h.DIRECTION_ALL}),d.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new h(this.frame),d.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(s),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var r=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===r&&this.frame.canvas.height===a||this._getCameraState(s), +this.frame.canvas.width!==r&&(this.frame.canvas.width=r,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");var e=1;return"undefined"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(76).default,l=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",this.fit.bind(this)),this.body.emitter.on("animationFinished",function(){o.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",this.releaseNode.bind(this))}return(0,a.default)(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=void 0;if(void 0!==t.nodes&&0!==t.nodes.length||(t.nodes=this.body.nodeIndices),!0===e){var n=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];!0===r.predefinedPosition&&(n+=1)}if(n>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=d.getRange(this.body.nodes,t.nodes);o=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;o*=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600)}else{this.body.emitter.emit("_resizeNodes"),i=d.getRange(this.body.nodes,t.nodes);var a=1.1*Math.abs(i.maxX-i.minX),h=1.1*Math.abs(i.maxY-i.minY),l=this.canvas.frame.canvas.clientWidth/a,u=this.canvas.frame.canvas.clientHeight/h;o=l<=u?l:u}o>1?o=1:0===o&&(o=1);var c=d.findCenter(i),p={position:c,scale:o,animation:t.animation};this.moveTo(p)}},{key:"focus",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){if(void 0===t)return void(t={});void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),this.animateView(t)}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=h.easingFunctions[this.animationEasingFunction](this.easingTime);this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1&&(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,void 0!=this.lockedOnNodeId&&(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished"))}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(233).default,l=i(104).default,u=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.navigationHandler=new d(e,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},h.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("destroy",function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];h.selectiveNotDeepExtend(e,this.options,t),h.mergeOptions(this.options,t,"keyboard"),t.tooltip&&(h.extend(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=h.parseColor(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(t){return{x:t.x-h.getAbsoluteLeft(this.canvas.frame.canvas),y:t.y-h.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e),this.selectionHandler._generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler._generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.selectionHandler.getSelection(),n=!1;n=!0===i?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t);var s=this.selectionHandler.getSelection(),r=this._determineDifference(o,s),a=this._determineDifference(s,o);r.edges.length>0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,o),n=!0),r.nodes.length>0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,o),n=!0),a.nodes.length>0&&(this.selectionHandler._generateClickEvent("selectNode",e,t),n=!0),a.edges.length>0&&(this.selectionHandler._generateClickEvent("selectEdge",e,t),n=!0),!0===n&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineDifference",value:function(t,e){var i=function(t,e){for(var i=[],o=0;o10&&(t=10);var o=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(o=this.canvas.DOMtoCanvas(this.drag.pointer));var n=this.body.view.translation,s=t/i,r=(1-s)*e.x+n.x*s,a=(1-s)*e.y+n.y*s;if(this.body.view.scale=t,this.body.view.translation={x:r,y:a},void 0!=o){var h=this.canvas.canvasToDOM(o);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),i0&&(this.popupObj=h[u[u.length-1]],s=!0)}if(void 0===this.popupObj&&!1===s){for(var p=this.body.edgeIndices,f=this.body.edges,m=void 0,v=[],g=0;g0&&(this.popupObj=f[v[v.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new l(this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var o=this.selectionHandler.getNodeAt(t);i=void 0!==o&&o.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(10),d=i(37),l=i(35),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){o.activated=!0,o.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){o.activated=!1,o.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==o.keycharm&&o.keycharm.destroy()}),this.options={}}return(0,a.default)(t,[{key:"setOptions",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:"create",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)this.boundFunctions.hasOwnProperty(t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled&&(!0===this.options.keyboard.bindToWindow?this.keycharm=l({container:window,preventDefault:!0}):this.keycharm=l({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(this.keycharm.bind("up",function(){t.bindToRedraw("_moveUp")},"keydown"),this.keycharm.bind("down",function(){t.bindToRedraw("_moveDown")},"keydown"),this.keycharm.bind("left",function(){t.bindToRedraw("_moveLeft")},"keydown"),this.keycharm.bind("right",function(){t.bindToRedraw("_moveRight")},"keydown"),this.keycharm.bind("=",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num+",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("[",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("]",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pageup",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pagedown",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("up",function(){t.unbindFromRedraw("_moveUp")},"keyup"),this.keycharm.bind("down",function(){t.unbindFromRedraw("_moveDown")},"keyup"),this.keycharm.bind("left",function(){t.unbindFromRedraw("_moveLeft")},"keyup"),this.keycharm.bind("right",function(){t.unbindFromRedraw("_moveRight")},"keyup"),this.keycharm.bind("=",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num+",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("[",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("]",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pageup",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pagedown",function(){t.unbindFromRedraw("_zoomOut")},"keyup")))}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(47).default,d=i(74).default,l=i(2),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionObj={nodes:[],edges:[]},this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},l.extend(this.options,this.defaultOptions),this.body.emitter.on("_dataChanged",function(){o.updateSelection()})}return(0,a.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){var e=["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"];l.selectiveDeepExtend(e,this.options,t)}}},{key:"selectOnPoint",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit("_requestRedraw")}return e}},{key:"selectAdditionalOnPoint",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit("_requestRedraw"))}return e}},{key:"_initBaseEvent",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:"_generateClickEvent",value:function(t,e,i,o){var n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=this._initBaseEvent(e,i);if(!0===n)s.nodes=[],s.edges=[];else{var r=this.getSelection();s.nodes=r.nodes,s.edges=r.edges}void 0!==o&&(s.previousSelection=o),"click"==t&&(s.items=this.getClickedItems(i)),this.body.emitter.emit(t,s)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof h&&!0===e&&this._selectConnectedEdges(t),t.select(),this._addToSelection(t),!0)}},{key:"deselectObject",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,o=0;o1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?!0===e?this.body.nodes[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,o=0;o1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),o=10,n=null,s=this.body.edges,r=0;r1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,o=void 0;if(!t||!t.nodes&&!t.edges)throw"Selection must be an object with nodes and/or edges properties" +;if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(i=0;i1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.body.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.body.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},{key:"getClickedItems",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],o=this.body.nodeIndices,n=this.body.nodes,s=o.length-1;s>=0;s--){var r=n[o[s]],a=r.getItemsOnPoint(e);i.push.apply(i,a)}for(var h=this.body.edgeIndices,d=this.body.edges,l=h.length-1;l>=0;l--){var u=d[h[l]],c=u.getItemsOnPoint(e);i.push.apply(i,c)}return i}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(6),a=o(r),h=i(8),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(76).default,v=i(236),g=v.HorizontalStrategy,y=v.VerticalStrategy,b=function(){function t(){(0,u.default)(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return(0,p.default)(t,[{key:"addRelation",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:"checkIfTree",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:"ensureLevel",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:"getMaxLevel",value:function(t){var e=this,i={};return function t(o){if(void 0!==i[o])return i[o];var n=e.levels[o];if(e.childrenReference[o]){var s=e.childrenReference[o];if(s.length>0)for(var r=0;r0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===o)return this.body.emitter.emit("refresh"),f.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:"hierarchicalRepulsion"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||"barnesHut"):"object"===(0,a.default)(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):!1!==t.physics&&(e.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1;else if("boolean"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var o=t.edges.smooth;void 0!==o.type&&"dynamic"!==o.type&&(i=o.type),this.optionsBackup.edges={smooth:void 0===o.enabled||o.enabled,type:void 0===o.type?"dynamic":o.type,roundness:void 0===o.roundness?.5:o.roundness,forceDirection:void 0!==o.forceDirection&&o.forceDirection},t.edges.smooth={enabled:void 0===o.enabled||o.enabled,type:i,roundness:void 0===o.roundness?.5:o.roundness,forceDirection:void 0!==o.forceDirection&&o.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return t}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"positionInitially",value:function(t){if(!0!==this.options.hierarchical.enabled){this.randomSeed=this.initialRandomSeed;for(var e=t.length+50,i=0;i150){for(var s=t.length;t.length>150&&o<=10;){o+=1;var r=t.length;o%3==0?this.body.modules.clustering.clusterBridges(n):this.body.modules.clustering.clusterOutliers(n);if(r==t.length&&o%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}o>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var a=0;a0){var t=void 0,e=void 0,i=!1,o=!1;this.lastNodeOnLevel={},this.hierarchical=new b;for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0!==t.options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):o=!0);if(!0===o&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(!0===o){var n=this.options.hierarchical.sortMethod;"hubsize"===n?this._determineLevelsByHubsize():"directed"===n?this._determineLevelsDirected():"custom"===n&&this._determineLevelsCustomCallback()}for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&this.hierarchical.ensureLevel(s);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(e,i){var o=t.hierarchical.trees;for(var n in o)o.hasOwnProperty(n)&&o[n]===e&&t.direction.shift(n,i)},n=function(){for(var e=[],i=0;i0)for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,n=1e9,r=1e9,a=-1e9;for(var h in e)if(e.hasOwnProperty(h)){var d=t.body.nodes[h],l=t.hierarchical.levels[d.id],u=t.direction.getPosition(d),c=t._getSpaceAroundNode(d,e),p=(0,s.default)(c,2),f=p[0],m=p[1];o=Math.min(f,o),n=Math.min(m,n),l<=i&&(r=Math.min(u,r),a=Math.max(u,a))}return[r,a,o,n]},h=function(e,i){var o=t.hierarchical.getMaxLevel(e.id),n=t.hierarchical.getMaxLevel(i.id);return Math.min(o,n)},d=function(e,i,o){for(var n=t.hierarchical,s=0;s1)for(var h=0;h2&&void 0!==arguments[2]&&arguments[2],s=t.direction.getPosition(i),d=t.direction.getPosition(o),l=Math.abs(d-s),u=t.options.hierarchical.nodeSpacing;if(l>u){var c={},p={};r(i,c),r(o,p);var f=h(i,o),m=a(c,f),v=a(p,f),g=m[1],y=v[0],b=v[2];if(Math.abs(g-y)>u){var _=g-y+u;_<-b+u&&(_=-b+u),_<0&&(t._shiftBlock(o.id,_),e=!0,!0===n&&t._centerParent(o))}}},u=function(o,n){for(var h=n.id,d=n.edges,l=t.hierarchical.levels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},p=[],f=0;f0?p=Math.min(c,u-t.options.hierarchical.nodeSpacing):c<0&&(p=-Math.min(-c,l-t.options.hierarchical.nodeSpacing)),0!=p&&(t._shiftBlock(n.id,p),e=!0)}(_),_=b(o,d),function(i){var o=t.direction.getPosition(n),r=t._getSpaceAroundNode(n),a=(0,s.default)(r,2),h=a[0],d=a[1],l=i-o,u=o;l>0?u=Math.min(o+(d-t.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(o-(h-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t.direction.setPosition(n,u),e=!0)}(_)};!0===this.options.hierarchical.blockShifting&&(function(i){var o=t.hierarchical.getLevels();o=o.reverse();for(var n=0;n0&&Math.abs(p)0&&(a=this.direction.getPosition(i[n-1])+r),this.direction.setPosition(s,a,e),this._validatePositionAndContinue(s,e,a),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){var i=this.hierarchical.childrenReference[t];if(void 0!==i){for(var o=[],n=0;ne&&void 0===this.positionedNodes[r.id]))return;var h=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+h,this.direction.setPosition(r,d,a),this._validatePositionAndContinue(r,a,d)}var l=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],l,e)}}},{key:"_validatePositionAndContinue",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var o=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-ot.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)};this._crawlNetwork(e),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],o={},n=function i(n,s){if(void 0===o[n.id]){t.hierarchical.setTreeIndex(n,s),o[n.id]=!0;for(var r=void 0,a=t._getActiveEdges(n),h=0;h2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:"getTreeSize",value:function(t){return this.fake_use(t),this.abstract()}},{key:"sort",value:function(t){this.fake_use(t),this.abstract()}},{key:"fix",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:"shift",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),m=function(t){function e(t){(0,u.default)(this,e);var i=(0,a.default)(this,(e.__proto__||(0,s.default)(e)).call(this));return i.layout=t,i}return(0,d.default)(e,t),(0,p.default)(e,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(t){return t.x}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:"sort",value:function(t){t.sort(function(t,e){return void 0===t.x||void 0===e.x?0:t.x-e.x})}},{key:"fix",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),e}(f),v=function(t){function e(t){(0,u.default)(this,e);var i=(0,a.default)(this,(e.__proto__||(0,s.default)(e)).call(this));return i.layout=t,i}return(0,d.default)(e,t),(0,p.default)(e,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(t){return t.y}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:"sort",value:function(t){t.sort(function(t,e){return void 0===t.y||void 0===e.y?0:t.y-e.y})}},{key:"fix",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),e}(f);e.HorizontalStrategy=v,e.VerticalStrategy=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(19),a=o(r),h=i(6),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(10),v=i(37),g=function(){function t(e,i,o){var n=this;(0,u.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},f.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){n._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,p.default)(t,[{key:"_restore",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,f.deepExtend(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var t=this.selectionHandler._getSelectedNodeCount(),e=this.selectionHandler._getSelectedEdgeCount(),i=t+e,o=this.options.locales[this.options.locale],n=!1;!1!==this.options.addNode&&(this._createAddNodeButton(o),n=!0),!1!==this.options.addEdge&&(!0===n?this._createSeperator(1):n=!0,this._createAddEdgeButton(o)),1===t&&"function"==typeof this.options.editNode?(!0===n?this._createSeperator(2):n=!0,this._createEditNodeButton(o)):1===e&&0===t&&!1!==this.options.editEdge&&(!0===n?this._createSeperator(3):n=!0,this._createEditEdgeButton(o)),0!==i&&(t>0&&!1!==this.options.deleteNode?(!0===n&&this._createSeperator(4),this._createDeleteButton(o)):0===t&&!1!==this.options.deleteEdge&&(!0===n&&this._createSeperator(4),this._createDeleteButton(o))),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this)),this._temporaryBindEvent("select",this.showManipulatorToolbar.bind(this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindEvent("click",this._performAddNode.bind(this))}},{key:"editNode",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler._getSelectedNode();if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==e.isCluster){var i=f.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",this._dragStartEdge.bind(this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,d.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var t=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(t.from,t.to)}if(!0===this.guiEnabled){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],o=this._getNewTargetNode(i.from.x,i.from.y),n=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(o.id),this.temporaryIds.nodes.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(t){var e=i.edgeType.findBorderPositions(t);!1===o.selected&&(o.x=e.from.x,o.y=e.from.y),!1===n.selected&&(n.x=e.to.x,n.y=e.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}},{key:"deleteSelected",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodes(),i=this.selectionHandler.getSelectedEdges(),o=void 0;if(e.length>0){for(var n=0;n0&&"function"==typeof this.options.deleteEdge&&(o=this.options.deleteEdge);if("function"==typeof o){var s={nodes:e,edges:i} +;if(2!==o.length)throw new Error("The function for delete does not support two arguments (data, callback)");o(s,function(e){null!==e&&void 0!==e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="vis-close",this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=f.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+f.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},f.recursiveDOMDelete(this.editModeDiv);var t=this.options.locales[this.options.locale],e=this._createButton("editMode","vis-button vis-edit vis-edit-mode",t.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(e),this._bindHammerToDiv(e,this.toggleEditMode.bind(this))}},{key:"_clean",value:function(){this.inMode=!1,!0===this.guiEnabled&&(f.recursiveDOMDelete(this.editModeDiv),f.recursiveDOMDelete(this.manipulationDiv),this._cleanManipulatorHammers()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanManipulatorHammers",value:function(){if(0!=this.manipulationHammers.length){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e=this._createButton("addNode","vis-button vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(t){var e=this._createButton("addEdge","vis-button vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(t){var e=this._createButton("editNode","vis-button vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(t){var e=this._createButton("editEdge","vis-button vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(t){var e;e=this.options.rtl?"vis-button vis-delete-rtl":"vis-button vis-delete";var i=this._createButton("delete",e,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(t){var e=this._createButton("back","vis-button vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("div"),this.manipulationDOM[t+"Div"].className=e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerHTML=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",t))}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var t=0;t=0;r--)if(n[r]!==this.selectedControlNode.id){s=this.body.nodes[n[r]];break}if(void 0!==s&&void 0!==this.selectedControlNode)if(!0===s.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(s.id,o.to.id):this._performEditEdge(o.from.id,s.id)}else o.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=f.extend({},this.body.view.translation);var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var o=this._getNewTargetNode(i.x,i.y);this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id);var n=this.body.functions.createEdge({id:"connectionEdge"+f.randomUUID(),from:i.id,to:o.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[n.id]=n,this.body.edgeIndices.push(n.id),this.temporaryIds.nodes.push(o.id),this.temporaryIds.edges.push(n.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center);if(void 0!==this.temporaryIds.nodes[0]){var i=this.body.nodes[this.temporaryIds.nodes[0]];i.x=this.canvas._XconvertDOMtoCanvas(e.x),i.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=void 0;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(-1===this.temporaryIds.nodes.indexOf(n[r])){s=this.body.nodes[n[r]];break}this._cleanupTemporaryNodesAndEdges(),void 0!==s&&(!0===s.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[o]&&void 0!==this.body.nodes[s.id]&&this._performAddEdge(o,s.id)),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(t){var e=this.lastTouch;this.selectionHandler._generateClickEvent("dragStart",t,e,void 0,!0)}},{key:"_performAddNode",value:function(t){var e=this,i={id:f.randomUUID(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,function(t){null!==t&&void 0!==t&&"addNode"===e.inMode&&(e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar())})}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,o={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(o,function(t){null!==t&&void 0!==t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,o={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges._data[this.edgeBeingEditedId].label},n=this.options.editEdge;if("object"===(void 0===n?"undefined":(0,d.default)(n))&&(n=n.editWithoutDrag),"function"==typeof n){if(2!==n.length)throw new Error("The function for edit does not support two arguments (data, callback)");n(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(239),u=o(l),c=function(){function t(e,i,o){(0,a.default)(this,t),this.body=e,this.springLength=i,this.springConstant=o,this.distanceSolver=new u.default}return(0,d.default)(t,[{key:"setOptions",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:"solve",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o),this._createE_matrix();for(var n=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),a=1e9,h=0,d=0,l=0,u=0,c=0;a>.01&&n1&&c<5;){c+=1,this._moveNode(h,d,l);var m=this._getEnergy(h),v=(0,s.default)(m,3);u=v[0],d=v[1],l=v[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=0,n=e[0],r=0,a=0,h=0;h0&&e-1 in t)}function q(t){return a.call(t,function(t){return null!=t})}function H(t){return t.length>0?r.fn.concat.apply([],t):t}function I(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function V(t){return t in l?l[t]:l[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function _(t,e){return"number"!=typeof e||h[I(t)]?e:e+"px"}function B(t){var e,n;return c[t]||(e=f.createElement(t),f.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),c[t]=n),c[t]}function U(t){return"children"in t?u.call(t.children):r.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function X(t,e){var n,r=t?t.length:0;for(n=0;r>n;n++)this[n]=t[n];this.length=r,this.selector=e||""}function J(t,r,i){for(n in r)i&&(Z(r[n])||L(r[n]))?(Z(r[n])&&!Z(t[n])&&(t[n]={}),L(r[n])&&!L(t[n])&&(t[n]=[]),J(t[n],r[n],i)):r[n]!==e&&(t[n]=r[n])}function W(t,e){return null==e?r(t):r(t).filter(e)}function Y(t,e,n,r){return F(e)?e.call(t,n,r):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function K(t,n){var r=t.className||"",i=r&&r.baseVal!==e;return n===e?i?r.baseVal:r:void(i?r.baseVal=n:t.className=n)}function Q(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?r.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,r=t.childNodes.length;r>n;n++)tt(t.childNodes[n],e)}var e,n,r,i,O,P,o=[],s=o.concat,a=o.filter,u=o.slice,f=t.document,c={},l={},h={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,d=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,g=/^(?:body|html)$/i,v=/([A-Z])/g,y=["val","css","html","text","data","width","height","offset"],x=["after","prepend","before","append"],b=f.createElement("table"),E=f.createElement("tr"),j={tr:f.createElement("tbody"),tbody:b,thead:b,tfoot:b,td:E,th:E,"*":f.createElement("div")},w=/complete|loaded|interactive/,T=/^[\w-]*$/,S={},C=S.toString,N={},A=f.createElement("div"),D={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},L=Array.isArray||function(t){return t instanceof Array};return N.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=A).appendChild(t),r=~N.qsa(i,e).indexOf(t),o&&A.removeChild(t),r},O=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},P=function(t){return a.call(t,function(e,n){return t.indexOf(e)==n})},N.fragment=function(t,n,i){var o,s,a;return d.test(t)&&(o=r(f.createElement(RegExp.$1))),o||(t.replace&&(t=t.replace(m,"<$1>")),n===e&&(n=p.test(t)&&RegExp.$1),n in j||(n="*"),a=j[n],a.innerHTML=""+t,o=r.each(u.call(a.childNodes),function(){a.removeChild(this)})),Z(i)&&(s=r(o),r.each(i,function(t,e){y.indexOf(t)>-1?s[t](e):s.attr(t,e)})),o},N.Z=function(t,e){return new X(t,e)},N.isZ=function(t){return t instanceof N.Z},N.init=function(t,n){var i;if(!t)return N.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&p.test(t))i=N.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}else{if(F(t))return r(f).ready(t);if(N.isZ(t))return t;if(L(t))i=q(t);else if(R(t))i=[t],t=null;else if(p.test(t))i=N.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}}return N.Z(i,t)},r=function(t,e){return N.init(t,e)},r.extend=function(t){var e,n=u.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){J(t,n,e)}),t},N.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=T.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:u.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},r.contains=f.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},r.type=$,r.isFunction=F,r.isWindow=k,r.isArray=L,r.isPlainObject=Z,r.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},r.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},r.inArray=function(t,e,n){return o.indexOf.call(e,t,n)},r.camelCase=O,r.trim=function(t){return null==t?"":String.prototype.trim.call(t)},r.uuid=0,r.support={},r.expr={},r.noop=function(){},r.map=function(t,e){var n,i,o,r=[];if(z(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return o.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return F(t)?this.not(this.not(t)):r(a.call(this,function(e){return N.matches(e,t)}))},add:function(t,e){return r(P(this.concat(r(t,e))))},is:function(t){return this.length>0&&N.matches(this[0],t)},not:function(t){var n=[];if(F(t)&&t.call!==e)this.each(function(e){t.call(this,e)||n.push(this)});else{var i="string"==typeof t?this.filter(t):z(t)&&F(t.item)?u.call(t):r(t);this.forEach(function(t){i.indexOf(t)<0&&n.push(t)})}return r(n)},has:function(t){return this.filter(function(){return R(t)?r.contains(this,t):r(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!R(t)?t:r(t)},last:function(){var t=this[this.length-1];return t&&!R(t)?t:r(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?r(t).filter(function(){var t=this;return o.some.call(n,function(e){return r.contains(e,t)})}):1==this.length?r(N.qsa(this[0],t)):this.map(function(){return N.qsa(this,t)}):r()},closest:function(t,e){var n=[],i="object"==typeof t&&r(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:N.matches(o,t));)o=o!==e&&!M(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),r(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=r.map(n,function(t){return(t=t.parentNode)&&!M(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return W(e,t)},parent:function(t){return W(P(this.pluck("parentNode")),t)},children:function(t){return W(this.map(function(){return U(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||u.call(this.childNodes)})},siblings:function(t){return W(this.map(function(t,e){return a.call(U(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return r.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=B(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=F(t);if(this[0]&&!e)var n=r(t).get(0),i=n.parentNode||this.length>1;return this.each(function(o){r(this).wrapAll(e?t.call(this,o):i?n.cloneNode(!0):n)})},wrapAll:function(t){if(this[0]){r(this[0]).before(t=r(t));for(var e;(e=t.children()).length;)t=e.first();r(t).append(this)}return this},wrapInner:function(t){var e=F(t);return this.each(function(n){var i=r(this),o=i.contents(),s=e?t.call(this,n):t;o.length?o.wrapAll(s):i.append(s)})},unwrap:function(){return this.parent().each(function(){r(this).replaceWith(r(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var n=r(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()})},prev:function(t){return r(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return r(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;r(this).empty().append(Y(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=Y(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,r){var i;return"string"!=typeof t||1 in arguments?this.each(function(e){if(1===this.nodeType)if(R(t))for(n in t)G(this,n,t[n]);else G(this,t,Y(this,r,e,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(t))?i:e},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){G(this,t)},this)})},prop:function(t,e){return t=D[t]||t,1 in arguments?this.each(function(n){this[t]=Y(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=D[t]||t,this.each(function(){delete this[t]})},data:function(t,n){var r="data-"+t.replace(v,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?Q(i):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=Y(this,t,e,this.value)})):this[0]&&(this[0].multiple?r(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=r(this),i=Y(this,e,t,n.offset()),o=n.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==n.css("position")&&(s.position="relative"),n.css(s)});if(!this.length)return null;if(f.documentElement!==this[0]&&!r.contains(f.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[O(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(L(t)){if(!i)return;var o={},s=getComputedStyle(i,"");return r.each(t,function(t,e){o[e]=i.style[O(e)]||s.getPropertyValue(e)}),o}}var a="";if("string"==$(t))e||0===e?a=I(t)+":"+_(t,e):this.each(function(){this.style.removeProperty(I(t))});else for(n in t)t[n]||0===t[n]?a+=I(n)+":"+_(n,t[n])+";":this.each(function(){this.style.removeProperty(I(n))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(r(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?o.some.call(this,function(t){return this.test(K(t))},V(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var n=K(this),o=Y(this,t,e,n);o.split(/\s+/g).forEach(function(t){r(this).hasClass(t)||i.push(t)},this),i.length&&K(this,n+(n?" ":"")+i.join(" "))}}):this},removeClass:function(t){return this.each(function(n){if("className"in this){if(t===e)return K(this,"");i=K(this),Y(this,t,n,i).split(/\s+/g).forEach(function(t){i=i.replace(V(t)," ")}),K(this,i.trim())}})},toggleClass:function(t,n){return t?this.each(function(i){var o=r(this),s=Y(this,t,i,K(this));s.split(/\s+/g).forEach(function(t){(n===e?!o.hasClass(t):n)?o.addClass(t):o.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=g.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(r(t).css("margin-top"))||0,n.left-=parseFloat(r(t).css("margin-left"))||0,i.top+=parseFloat(r(e[0]).css("border-top-width"))||0,i.left+=parseFloat(r(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||f.body;t&&!g.test(t.nodeName)&&"static"==r(t).css("position");)t=t.offsetParent;return t})}},r.fn.detach=r.fn.remove,["width","height"].forEach(function(t){var n=t.replace(/./,function(t){return t[0].toUpperCase()});r.fn[t]=function(i){var o,s=this[0];return i===e?k(s)?s["inner"+n]:M(s)?s.documentElement["scroll"+n]:(o=this.offset())&&o[t]:this.each(function(e){s=r(this),s.css(t,Y(this,i,e,s[t]()))})}}),x.forEach(function(n,i){var o=i%2;r.fn[n]=function(){var n,a,s=r.map(arguments,function(t){var i=[];return n=$(t),"array"==n?(t.forEach(function(t){return t.nodeType!==e?i.push(t):r.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(N.fragment(t)))}),i):"object"==n||null==t?t:N.fragment(t)}),u=this.length>1;return s.length<1?this:this.each(function(e,n){a=o?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var c=r.contains(f.documentElement,a);s.forEach(function(e){if(u)e=e.cloneNode(!0);else if(!a)return r(e).remove();a.insertBefore(e,n),c&&tt(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},r.fn[o?n+"To":"insert"+(i?"Before":"After")]=function(t){return r(t)[n](this),this}}),N.Z.prototype=X.prototype=r.fn,N.uniq=P,N.deserializeValue=Q,r.zepto=N,r}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function h(t){return t._zid||(t._zid=n++)}function p(t,e,n,r){if(e=d(e),e.ns)var i=m(e.ns);return(a[h(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)})}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function m(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function g(t,e){return t.del&&!f&&t.e in c||!!e}function v(t){return l[t]||f&&c[t]||t}function y(t,n,i,o,s,u,f){var c=h(t),p=a[c]||(a[c]=[]);n.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(i);var a=d(n);a.fn=i,a.sel=s,a.e in l&&(i=function(t){var n=t.relatedTarget;return!n||n!==this&&!e.contains(this,n)?a.fn.apply(this,arguments):void 0}),a.del=u;var c=u||i;a.proxy=function(e){if(e=T(e),!e.isImmediatePropagationStopped()){e.data=o;var n=c.apply(t,e._args==r?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},a.i=p.length,p.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,g(a,f))})}function x(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach(function(e){p(t,e,n,r).forEach(function(e){delete a[o][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,g(e,i))})})}function T(t,n){return(n||!t.isDefaultPrevented)&&(n||(n=t),e.each(w,function(e,r){var i=n[e];t[e]=function(){return this[r]=b,i&&i.apply(n,arguments)},t[r]=E}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==r?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=b)),t}function S(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===r||(n[e]=t[e]);return T(n,t)}var r,n=1,i=Array.prototype.slice,o=e.isFunction,s=function(t){return"string"==typeof t},a={},u={},f="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:x},e.proxy=function(t,n){var r=2 in arguments&&i.call(arguments,2);if(o(t)){var a=function(){return t.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=h(t),a}if(s(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var b=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,w={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,a,u,f){var c,l,h=this;return t&&!s(t)?(e.each(t,function(t,e){h.on(t,n,a,e,f)}),h):(s(n)||o(u)||u===!1||(u=a,a=n,n=r),(u===r||a===!1)&&(u=a,a=r),u===!1&&(u=E),h.each(function(r,o){f&&(c=function(t){return x(o,t.type,u),u.apply(this,arguments)}),n&&(l=function(t){var r,s=e(t.target).closest(n,o).get(0);return s&&s!==o?(r=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||u).apply(s,[r].concat(i.call(arguments,1)))):void 0}),y(o,t,u,a,n,l||c)}))},e.fn.off=function(t,n,i){var a=this;return t&&!s(t)?(e.each(t,function(t,e){a.off(t,n,e)}),a):(s(n)||o(i)||i===!1||(i=n,n=r),i===!1&&(i=E),a.each(function(){x(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=s(t)||e.isPlainObject(t)?e.Event(t):T(t),t._args=n,this.each(function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,i;return this.each(function(o,a){r=S(s(t)?e.Event(t):t),r._args=n,r.target=a,e.each(p(a,t.type||t),function(t,e){return i=e.proxy(r),r.isImmediatePropagationStopped()?!1:void 0})}),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){s(t)||(e=t,t=e.type);var n=document.createEvent(u[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),T(n)}}(e),function(e){function p(t,n,r){var i=e.Event(n);return e(t).trigger(i,r),!i.isDefaultPrevented()}function d(t,e,n,i){return t.global?p(e||r,n,i):void 0}function m(t){t.global&&0===e.active++&&d(t,null,"ajaxStart")}function g(t){t.global&&!--e.active&&d(t,null,"ajaxStop")}function v(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||d(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void d(e,n,"ajaxSend",[t,e])}function y(t,e,n,r){var i=n.context,o="success";n.success.call(i,t,o,e),r&&r.resolveWith(i,[t,o,e]),d(n,i,"ajaxSuccess",[e,n,t]),b(o,e,n)}function x(t,e,n,r,i){var o=r.context;r.error.call(o,n,e,t),i&&i.rejectWith(o,[n,e,t]),d(r,o,"ajaxError",[n,r,t||e]),b(e,n,r)}function b(t,e,n){var r=n.context;n.complete.call(r,e,t),d(n,r,"ajaxComplete",[e,n]),g(n)}function E(t,e,n){if(n.dataFilter==j)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function j(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==c?"html":t==f?"json":a.test(t)?"script":u.test(t)&&"xml")||"text"}function T(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function S(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=T(t.url,t.data),t.data=void 0)}function C(t,n,r,i){return e.isFunction(n)&&(i=r,r=n,n=void 0),e.isFunction(r)||(i=r,r=void 0),{url:t,data:n,success:r,dataType:i}}function O(t,n,r,i){var o,s=e.isArray(n),a=e.isPlainObject(n);e.each(n,function(n,u){o=e.type(u),i&&(n=r?i:i+"["+(a||"object"==o||"array"==o?n:"")+"]"),!i&&s?t.add(u.name,u.value):"array"==o||!r&&"object"==o?O(t,u,r,n):t.add(n,u)})}var i,o,n=+new Date,r=t.document,s=/)<[^<]*)*<\/script>/gi,a=/^(?:text|application)\/javascript/i,u=/^(?:text|application)\/xml/i,f="application/json",c="text/html",l=/^\s*$/,h=r.createElement("a");h.href=t.location.href,e.active=0,e.ajaxJSONP=function(i,o){if(!("type"in i))return e.ajax(i);var c,p,s=i.jsonpCallback,a=(e.isFunction(s)?s():s)||"Zepto"+n++,u=r.createElement("script"),f=t[a],l=function(t){e(u).triggerHandler("error",t||"abort")},h={abort:l};return o&&o.promise(h),e(u).on("load error",function(n,r){clearTimeout(p),e(u).off().remove(),"error"!=n.type&&c?y(c[0],h,i,o):x(null,r||"error",h,i,o),t[a]=f,c&&e.isFunction(f)&&f(c[0]),f=c=void 0}),v(h,i)===!1?(l("abort"),h):(t[a]=function(){c=arguments},u.src=i.url.replace(/\?(.+)=\?/,"?$1="+a),r.head.appendChild(u),i.timeout>0&&(p=setTimeout(function(){l("timeout")},i.timeout)),h)},e.ajaxSettings={type:"GET",beforeSend:j,success:j,error:j,complete:j,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:f,xml:"application/xml, text/xml",html:c,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:j},e.ajax=function(n){var u,f,s=e.extend({},n||{}),a=e.Deferred&&e.Deferred();for(i in e.ajaxSettings)void 0===s[i]&&(s[i]=e.ajaxSettings[i]);m(s),s.crossDomain||(u=r.createElement("a"),u.href=s.url,u.href=u.href,s.crossDomain=h.protocol+"//"+h.host!=u.protocol+"//"+u.host),s.url||(s.url=t.location.toString()),(f=s.url.indexOf("#"))>-1&&(s.url=s.url.slice(0,f)),S(s);var c=s.dataType,p=/\?.+=\?/.test(s.url);if(p&&(c="jsonp"),s.cache!==!1&&(n&&n.cache===!0||"script"!=c&&"jsonp"!=c)||(s.url=T(s.url,"_="+Date.now())),"jsonp"==c)return p||(s.url=T(s.url,s.jsonp?s.jsonp+"=?":s.jsonp===!1?"":"callback=?")),e.ajaxJSONP(s,a);var P,d=s.accepts[c],g={},b=function(t,e){g[t.toLowerCase()]=[t,e]},C=/^([\w-]+:)\/\//.test(s.url)?RegExp.$1:t.location.protocol,N=s.xhr(),O=N.setRequestHeader;if(a&&a.promise(N),s.crossDomain||b("X-Requested-With","XMLHttpRequest"),b("Accept",d||"*/*"),(d=s.mimeType||d)&&(d.indexOf(",")>-1&&(d=d.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(d)),(s.contentType||s.contentType!==!1&&s.data&&"GET"!=s.type.toUpperCase())&&b("Content-Type",s.contentType||"application/x-www-form-urlencoded"),s.headers)for(o in s.headers)b(o,s.headers[o]);if(N.setRequestHeader=b,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=j,clearTimeout(P);var t,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==C){if(c=c||w(s.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)t=N.response;else{t=N.responseText;try{t=E(t,c,s),"script"==c?(1,eval)(t):"xml"==c?t=N.responseXML:"json"==c&&(t=l.test(t)?null:e.parseJSON(t))}catch(r){n=r}if(n)return x(n,"parsererror",N,s,a)}y(t,N,s,a)}else x(N.statusText||null,N.status?"error":"abort",N,s,a)}},v(N,s)===!1)return N.abort(),x(null,"abort",N,s,a),N;var A="async"in s?s.async:!0;if(N.open(s.type,s.url,A,s.username,s.password),s.xhrFields)for(o in s.xhrFields)N[o]=s.xhrFields[o];for(o in g)O.apply(N,g[o]);return s.timeout>0&&(P=setTimeout(function(){N.onreadystatechange=j,N.abort(),x(null,"timeout",N,s,a)},s.timeout)),N.send(s.data?s.data:null),N},e.get=function(){return e.ajax(C.apply(null,arguments))},e.post=function(){var t=C.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=C.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,r){if(!this.length)return this;var a,i=this,o=t.split(/\s/),u=C(t,n,r),f=u.success;return o.length>1&&(u.url=o[0],a=o[1]),u.success=function(t){i.html(a?e("
                                                                                                                                                ").html(t.replace(s,"")).find(a):t),f&&f.apply(i,arguments)},e.ajax(u),this};var N=encodeURIComponent;e.param=function(t,n){var r=[];return r.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(t)+"="+N(n))},O(r,t,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(r){return null}}}}(),e}); \ No newline at end of file diff --git a/documentation/js/menu-wc.js b/documentation/js/menu-wc.js new file mode 100644 index 0000000..fdc0238 --- /dev/null +++ b/documentation/js/menu-wc.js @@ -0,0 +1,674 @@ +'use strict'; + + +customElements.define('compodoc-menu', class extends HTMLElement { + constructor() { + super(); + this.isNormalMode = this.getAttribute('mode') === 'normal'; + } + + connectedCallback() { + this.render(this.isNormalMode); + } + + render(isNormalMode) { + let tp = lithtml.html(` + + `); + this.innerHTML = tp.strings; + } +}); \ No newline at end of file diff --git a/documentation/js/menu.js b/documentation/js/menu.js new file mode 100644 index 0000000..7f76b6b --- /dev/null +++ b/documentation/js/menu.js @@ -0,0 +1,261 @@ +document.addEventListener('DOMContentLoaded', function() { + var menuCollapsed = false, + mobileMenu = document.getElementById('mobile-menu'); + + var localContextInUrl = ''; + + if (COMPODOC_CURRENT_PAGE_CONTEXT !== '') { + localContextInUrl = localContextInUrl; + switch (COMPODOC_CURRENT_PAGE_CONTEXT) { + case 'additional-page': + localContextInUrl = 'additional-documentation'; + break; + case 'class': + localContextInUrl = 'classes'; + break; + case 'miscellaneous-functions': + case 'miscellaneous-variables': + case 'miscellaneous-typealiases': + case 'miscellaneous-enumerations': + localContextInUrl = 'miscellaneous'; + default: + break; + } + } + + function hasClass(el, cls) { + return el.className && new RegExp('(\\s|^)' + cls + '(\\s|$)').test(el.className); + } + + var processLink = function(link, url) { + if (url.charAt(0) !== '.') { + var prefix = ''; + switch (COMPODOC_CURRENT_PAGE_DEPTH) { + case 5: + prefix = '../../../../../'; + break; + case 4: + prefix = '../../../../'; + break; + case 3: + prefix = '../../../'; + break; + case 2: + prefix = '../../'; + break; + case 1: + prefix = '../'; + break; + case 0: + prefix = './'; + break; + } + link.setAttribute('href', prefix + url); + } + }; + + var processMenuLinks = function(links, dontAddClass) { + for (var i = 0; i < links.length; i++) { + var link = links[i]; + var linkHref = link.getAttribute('href'); + if (linkHref) { + var linkHrefFile = linkHref.substr(linkHref.lastIndexOf('/') + 1, linkHref.length); + if ( + linkHrefFile.toLowerCase() === COMPODOC_CURRENT_PAGE_URL.toLowerCase() && + link.innerHTML.indexOf('Getting started') == -1 && + !dontAddClass && + linkHref.toLowerCase().indexOf(localContextInUrl.toLowerCase()) !== -1 + ) { + link.classList.add('active'); + } + processLink(link, linkHref); + } + } + }; + var chapterLinks = document.querySelectorAll('[data-type="chapter-link"]'); + processMenuLinks(chapterLinks); + var entityLinks = document.querySelectorAll('[data-type="entity-link"]'); + processMenuLinks(entityLinks); + var indexLinks = document.querySelectorAll('[data-type="index-link"]'); + processMenuLinks(indexLinks, true); + var entityLogos = document.querySelectorAll('[data-type="compodoc-logo"]'); + var processLogos = function(entityLogo) { + for (var i = 0; i < entityLogos.length; i++) { + var entityLogo = entityLogos[i]; + if (entityLogo) { + var url = entityLogo.getAttribute('data-src'); + if (url.charAt(0) !== '.') { + var prefix = ''; + switch (COMPODOC_CURRENT_PAGE_DEPTH) { + case 5: + prefix = '../../../../../'; + break; + case 4: + prefix = '../../../../'; + break; + case 3: + prefix = '../../../'; + break; + case 2: + prefix = '../../'; + break; + case 1: + prefix = '../'; + break; + case 0: + prefix = './'; + break; + } + entityLogo.src = prefix + url; + } + } + } + }; + processLogos(entityLogos); + + setTimeout(function() { + document.getElementById('btn-menu').addEventListener('click', function() { + if (menuCollapsed) { + mobileMenu.style.display = 'none'; + } else { + mobileMenu.style.display = 'block'; + document.getElementsByTagName('body')[0].style['overflow-y'] = 'hidden'; + } + menuCollapsed = !menuCollapsed; + }); + + /** + * Native bootstrap doesn't wait DOMContentLoaded event to start his job, re do it here + */ + var Collapses = document.querySelectorAll('[data-toggle="collapse"]'); + for (var o = 0, cll = Collapses.length; o < cll; o++) { + var collapse = Collapses[o], + options = {}; + options.duration = collapse.getAttribute('data-duration'); + new Collapse(collapse, options); + } + + // collapse menu + var classnameMenuToggler = document.getElementsByClassName('menu-toggler'), + faAngleUpClass = 'ion-ios-arrow-up', + faAngleDownClass = 'ion-ios-arrow-down', + toggleItemMenu = function(e) { + var element = $(e.target), + parent = element[0].parentNode, + parentLink, + elementIconChild; + if (parent) { + if (!$(parent).hasClass('linked')) { + e.preventDefault(); + } else { + parentLink = parent.parentNode; + if (parentLink && element.hasClass('link-name')) { + $(parentLink).trigger('click'); + } + } + elementIconChild = parent.getElementsByClassName(faAngleUpClass)[0]; + if (!elementIconChild) { + elementIconChild = parent.getElementsByClassName(faAngleDownClass)[0]; + } + if (elementIconChild) { + elementIconChild = $(elementIconChild); + if (elementIconChild.hasClass(faAngleUpClass)) { + elementIconChild.addClass(faAngleDownClass); + elementIconChild.removeClass(faAngleUpClass); + } else { + elementIconChild.addClass(faAngleUpClass); + elementIconChild.removeClass(faAngleDownClass); + } + } + } + }; + + for (var i = 0; i < classnameMenuToggler.length; i++) { + classnameMenuToggler[i].addEventListener('click', toggleItemMenu, false); + } + + // Scroll to active link + var menus = document.querySelectorAll('.menu'), + i = 0, + len = menus.length, + activeMenu, + activeMenuClass, + activeLink; + + for (i; i < len; i++) { + if (getComputedStyle(menus[i]).display != 'none') { + activeMenu = menus[i]; + activeMenuClass = activeMenu.getAttribute('class').split(' ')[0]; + } + } + + if (activeMenu) { + activeLink = document.querySelector('.' + activeMenuClass + ' .active'); + if (activeLink) { + var linkType = activeLink.getAttribute('data-type'); + var linkContext = activeLink.getAttribute('data-context'); + if (linkType === 'entity-link') { + var parentLi = activeLink.parentNode, + parentUl, + parentChapterMenu; + if (parentLi) { + parentUl = parentLi.parentNode; + if (parentUl) { + parentChapterMenu = parentUl.parentNode; + if (parentChapterMenu) { + var toggler = parentChapterMenu.querySelector('.menu-toggler'), + elementIconChild = toggler.getElementsByClassName( + faAngleUpClass + )[0]; + if (toggler && !elementIconChild) { + toggler.click(); + } + } + } + } + if (linkContext && linkContext === 'sub-entity') { + // Toggle also the master parent menu + var linkContextId = activeLink.getAttribute('data-context-id'); + var toggler = activeMenu.querySelector( + '.chapter.' + linkContextId + ' a .menu-toggler' + ); + if (toggler) { + toggler.click(); + } + if (linkContextId === 'additional') { + var mainToggler = activeMenu.querySelector( + '.chapter.' + linkContextId + ' div.menu-toggler' + ); + if (mainToggler) { + mainToggler.click(); + } + } + } + } else if (linkType === 'chapter-link') { + var linkContextId = activeLink.getAttribute('data-context-id'); + var toggler = activeLink.querySelector('.menu-toggler'); + if (toggler) { + toggler.click(); + } + if (linkContextId === 'additional') { + var mainToggler = activeMenu.querySelector( + '.chapter.' + linkContextId + ' div.menu-toggler' + ); + if (mainToggler) { + mainToggler.click(); + } + } + } + setTimeout(function() { + activeMenu.scrollTop = activeLink.offsetTop; + if ( + activeLink.innerHTML.toLowerCase().indexOf('readme') != -1 || + activeLink.innerHTML.toLowerCase().indexOf('overview') != -1 + ) { + activeMenu.scrollTop = 0; + } + }, 300); + } + } + }, 0); +}); diff --git a/documentation/js/routes.js b/documentation/js/routes.js new file mode 100644 index 0000000..bfd875c --- /dev/null +++ b/documentation/js/routes.js @@ -0,0 +1,280 @@ +document.addEventListener('DOMContentLoaded', function() { + + function htmlEntities(str) { + return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); + } + + function foundLazyModuleWithPath(path) { + //path is like app/customers/customers.module#CustomersModule + var split = path.split('#'), + lazyModulePath = split[0], + lazyModuleName = split[1]; + return lazyModuleName; + } + + function getBB(selection) { + selection.each(function(d){d.bbox = this.getBBox();}) + } + + var test_cases, + test_case, + test_case_num, + engine; + + var tree = ROUTES_INDEX; + + function cleanStringChildren(obj) { + for (var property in obj) { + if (obj.hasOwnProperty(property)) { + if (property === 'children' && typeof obj[property] === 'object') { + for (var i = obj[property].length - 1; i >= 0 ; i--) { + if (typeof obj[property][i] === 'string') { + obj[property].splice(i, 1); + } + } + } + if (typeof obj[property] === 'object') { + cleanStringChildren(obj[property]); + } + } + } + } + cleanStringChildren(tree); + + engine = d3.layout.tree().setNodeSizes(true); + + engine.spacing(function(a, b) { + return a.parent == b.parent ? + 0 : engine.rootXSize(); + }) + + engine.nodeSize(function(d) { + return [document.getElementById(d.id).getBBox()["height"] + 70, document.getElementById(d.id).getBBox()["width"] + 30]; + }); + + var nodes = d3.layout.hierarchy()(tree), + + svg = d3.select("#body-routes").append('svg'), + svg_g = svg.append("g"), + svg_p = svg.append("g"), + last_id = 0, + + node = svg_g.selectAll(".node") + .data(nodes, function(d) { + return d.id || (d.id = ++last_id); + }) + .enter().append("g") + .attr("class", "node"); + + svg + .attr('id', 'main') + + svg_g + .attr("transform", "translate(20,0)") + .attr('id', 'main-group') + + svg_p + .attr("transform", "translate(20,0)") + .attr('id', 'paths') + + var infos_group = node.append("g") + .attr({ + "id": function(d) { + return d.id; + }, + dx: 0, + dy: 0, + }) + + //Node icon + infos_group.append("text") + .attr('font-family', 'Ionicons') + .attr("y", 5) + .attr("x", 0) + .attr('class', function(d) { + return d.children || d._children + ? "icon has-children" + : "icon"; + }) + .attr('font-size', function(d) { + return '15px' + }).text(function(d) { + return '\uf183' + }); + + //node infos + infos_group.append("svg:text") + .attr("x", function(d) { + return 0; + }) + .attr("y", function(d) { + return 10; + }) + .attr("dy", ".35em") + .attr('class', 'text') + .attr("text-anchor", function(d) { + return "start"; + }).html(function(d) { + // if kind === module name + module + // if kind === component component + path + var _name = ''; + if (d.kind === 'module') { + if (d.module) { + _name += '' + d.module + ''; + if (d.name) { + _name += '' + d.name + ''; + } + } else { + _name += '' + htmlEntities(d.name) + ''; + } + } else if (d.kind === 'component') { + _name += '' + d.path + '' + _name += '' + d.component + '' + if (d.outlet) { + _name += '<outlet> : ' + d.outlet + '' + } + } else { + _name += '/' + d.path + '' + if (d.component) { + _name += '' + d.component + '' + } + if (d.loadChildren) { + var moduleName = foundLazyModuleWithPath(d.loadChildren); + _name += '' + moduleName + '' + } + if (d.canActivate) { + _name += '✓ canActivate' + } + if (d.canDeactivate) { + _name += '×  canDeactivate' + } + if (d.canActivateChild) { + _name += '✓ canActivateChild' + } + if (d.canLoad) { + _name += '→ canLoad' + } + if (d.redirectTo) { + _name += '→ ' + d.redirectTo + '' + } + if (d.pathMatch) { + _name += '> ' + d.pathMatch + '' + } + if (d.outlet) { + _name += '<outlet> : ' + d.outlet + '' + } + } + return _name; + }) + .call(getBB); + + // + // Node lazy loaded ? + // + infos_group.append('svg:text') + .attr("y", function(d) { + return 45; + }) + .attr("x", function(d) { + return -18; + }) + .attr('font-family', 'Ionicons') + .attr('class', function(d) { + return "icon"; + }) + .attr('font-size', function(d) { + return '15px' + }).text(function(d) { + var _text = ''; + if (d.loadChildren) { + _text = '\uf4c1'; + } + if (d.guarded) { + _text = '\uf1b0'; + } + return _text; + }); + + //Node text background + infos_group.insert("rect","text") + .attr("width", function(d){ + return d.bbox.width; + }) + .attr("height", function(d){ + return d.bbox.height; + }) + .attr("y", function(d) { + return 15; + }) + .style("fill", "white") + .style("fill-opacity", 0.75); + + nodes = engine.nodes(tree); + + function node_extents(n) { + return [n.x - n.x_size / 2, n.y, + n.x + n.x_size / 2, n.y + n.y_size + ]; + } + var root_extents = node_extents(nodes[0]); + var xmin = root_extents[0], + ymin = root_extents[1], + xmax = root_extents[2], + ymax = root_extents[3], + area_sum = (xmax - xmin) * (ymax - ymin), + x_size_min = nodes[0].x_size, + y_size_min = nodes[0].y_size; + + nodes.slice(1).forEach(function(n) { + var ne = node_extents(n); + xmin = Math.min(xmin, ne[0]); + ymin = Math.min(ymin, ne[1]); + xmax = Math.max(xmax, ne[2]); + ymax = Math.max(ymax, ne[3]); + area_sum += (ne[2] - ne[0]) * (ne[3] - ne[1]); + x_size_min = Math.min(x_size_min, n.x_size); + y_size_min = Math.min(y_size_min, n.y_size); + }); + + var area_ave = area_sum / nodes.length; + var scale = 80 / Math.sqrt(area_ave); + + function svg_x(node_y) { + return (node_y - ymin); + } + + function svg_y(node_x) { + return (node_x - xmin) * scale; + } + + + var nodebox_right_margin = Math.min(x_size_min * scale, 10); + var nodebox_vertical_margin = Math.min(y_size_min * scale, 3); + + node.attr("transform", function(d) { + return "translate(" + svg_x(d.y) + "," + svg_y(d.x) + ")"; + }) + + var diagonal = d3.svg.diagonal() + .projection(function(d) { + return [svg_x(d.y), svg_y(d.x)]; + }); + + var links = engine.links(nodes); + var links = svg_p.selectAll(".link") + .data(links) + .enter().append("path") + .attr("class", "link") + .attr("d", diagonal); + + var _svg = document.getElementById('main'), + main_g = _svg.childNodes[0] + + _svg.removeChild(main_g); + _svg.appendChild(main_g); + + svg.attr({ + width: document.getElementById('main-group').getBBox()['width'] + 30, + height: document.getElementById('main-group').getBBox()['height'] + 50, + }); +}); diff --git a/documentation/js/routes/routes_index.js b/documentation/js/routes/routes_index.js new file mode 100644 index 0000000..af52495 --- /dev/null +++ b/documentation/js/routes/routes_index.js @@ -0,0 +1 @@ +var ROUTES_INDEX = {"name":"","kind":"module","className":"AppModule","children":[{"name":"AppRoutes","filename":"src/app/app.routing.ts","module":"AppRoutingModule","children":[{"path":"","data":{"dashboard":true},"canActivate":["AuthenticationGuard"],"children":[{"path":"volunteers","loadChildren":"./pages/volunteers/volunteers.module#VolunteersModule","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO","INS"]},"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/volunteers/volunteers.routing.ts","module":"VolunteersRoutingModule","children":[{"path":"","component":"VolunteersComponent","children":[{"path":"","component":"VolunteerDashboardComponent"},{"path":"add","component":"AddVolunteerComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"id/:id","component":"VolunteerDetailsComponent"},{"path":"edit/:id","component":"EditVolunteerComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"import","component":"ImportVolunteersComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}}]}],"kind":"module"}],"module":"VolunteersModule"}]},{"path":"resources","loadChildren":"./pages/resources/resources.module#ResourcesModule","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]},"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/resources/resources.routing.ts","module":"ResourcesRoutingModule","children":[{"path":"","component":"ResourcesComponent","children":[{"path":"","component":"ResourcesdashboardComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"edit/:id","component":"EditResourceComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"id/:id","component":"ResourcedetailsComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"name/:id","component":"ResourceListComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU"]}},{"path":"add","component":"AddResourceComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"import","component":"ImportResourcesComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}}]}],"kind":"module"}],"module":"ResourcesModule"}]},{"path":"organisations","loadChildren":"./pages/organisations/organisations.module#OrganisationsModule","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]},"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/organisations/organisations.routing.ts","module":"OrganisationsRoutingModule","children":[{"path":"","component":"OrganisationsComponent","children":[{"path":"","component":"OrganisationsDashboardComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU"]}},{"path":"add","component":"OrganisationaddComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU"]}},{"path":"edit/:id","component":"OrganisationEditComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"id/:id","component":"NgodetailsComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"id/:id/:tabname","component":"NgodetailsComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}},{"path":"id/:id/validate","component":"NgodetailsComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO"]}}]}],"kind":"module"}],"module":"OrganisationsModule"}]},{"path":"map","loadChildren":"./pages/map/map.module#MapModule","canActivate":["RoleGuard"],"data":{"roles":["DSU"]},"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/map/map.routing.ts","module":"MapRoutingModule","children":[{"path":"","component":"MapComponent"}],"kind":"module"}],"module":"MapModule"}]},{"path":"info","loadChildren":"./pages/info/info.module#InfoModule","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO","INS"]},"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/info/info.routing.ts","module":"InfoRoutingModule","children":[{"path":"","component":"InfoComponent"}],"kind":"module"}],"module":"InfoModule"}]},{"path":"users","loadChildren":"./pages/users/users.module#UsersModule","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO","INS"]},"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/users/users-routing.module.ts","module":"UsersRoutingModule","children":[{"path":"","component":"UsersComponent","children":[{"path":"","component":"UserDashboardComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","INS"]}},{"path":"add/:role","component":"AddUserComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","INS"]}},{"path":"edit/:id","component":"EditUserComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO","INS"]}},{"path":"id/:id","component":"UserDetailsComponent","canActivate":["RoleGuard"],"data":{"roles":["DSU","NGO","INS"]}}]}],"kind":"module"}],"module":"UsersModule"}]}]},{"path":"","loadChildren":"./pages/authentication/authentication.module#AuthenticationModule","children":[{"kind":"module","children":[{"name":"AuthenticationRoutes","filename":"src/app/pages/authentication/authentication.routing.ts","module":"AuthenticationRoutingModule","children":[{"path":"","children":[{"path":"login","canActivate":["AnonymousGuard"],"component":"LoginComponent"},{"path":"signup","canActivate":["AnonymousGuard"],"component":"SignupComponent"},{"path":"auth/reset/:token","component":"ResetPasswordComponent"},{"path":"recover","canActivate":["AnonymousGuard"],"component":"RecoverPasswordComponent"}]}],"kind":"module"}],"module":"AuthenticationModule"}]},{"path":"404","component":"NotFoundComponent"},{"path":"**","redirectTo":"/404"}],"kind":"module"}]} diff --git a/documentation/js/search/lunr.min.js b/documentation/js/search/lunr.min.js new file mode 100644 index 0000000..34b279d --- /dev/null +++ b/documentation/js/search/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.6 + * Copyright (C) 2019 Oliver Nightingale + * @license MIT + */ +!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.6",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/documentation/js/search/search-lunr.js b/documentation/js/search/search-lunr.js new file mode 100644 index 0000000..959aa97 --- /dev/null +++ b/documentation/js/search/search-lunr.js @@ -0,0 +1,67 @@ +(function(compodoc) { + + function LunrSearchEngine() { + this.index = undefined; + this.store = {}; + this.name = 'LunrSearchEngine'; + } + + LunrSearchEngine.prototype.init = function() { + var that = this, + d = new promise.Promise(); + + that.index = lunr.Index.load(COMPODOC_SEARCH_INDEX.index); + that.store = COMPODOC_SEARCH_INDEX.store; + d.done(); + + return d; + }; + + LunrSearchEngine.prototype.search = function(q, offset, length) { + var that = this, + results = [], + d = new promise.Promise(); + + if (this.index) { + results = $.map(this.index.search('*' + q + '*'), function(result) { + var doc = that.store[result.ref]; + + return { + title: doc.title, + url: doc.url, + body: doc.summary || doc.body + }; + }); + } + + d.done({ + query: q, + results: results.slice(0, length), + count: results.length + }); + + return d; + }; + + compodoc.addEventListener(compodoc.EVENTS.READY, function(event) { + var engine = new LunrSearchEngine(), + initialized = false; + + function query(q, offset, length) { + if (!initialized) throw new Error('Search has not been initialized'); + return engine.search(q, offset, length); + } + + compodoc.search = { + query: query + }; + + engine.init() + .then(function() { + initialized = true; + compodoc.dispatchEvent({ + type: compodoc.EVENTS.SEARCH_READY + }); + }); + }); +})(compodoc); diff --git a/documentation/js/search/search.js b/documentation/js/search/search.js new file mode 100644 index 0000000..89b7c3d --- /dev/null +++ b/documentation/js/search/search.js @@ -0,0 +1,271 @@ +(function(compodoc) { + var MAX_RESULTS = 15, + MAX_DESCRIPTION_SIZE = 500, + + usePushState = (typeof history.pushState !== 'undefined'), + + // DOM Elements + $body = $('body'), + $searchResults, + $searchInput, + $searchList, + $searchTitle, + $searchResultsCount, + $searchQuery, + $mainContainer, + $xsMenu; + + // Throttle search + function throttle(fn, wait) { + var timeout; + + return function() { + var ctx = this, args = arguments; + if (!timeout) { + timeout = setTimeout(function() { + timeout = undefined; + fn.apply(ctx, args); + }, wait); + } + }; + } + + function displayResults(res) { + var noResults = res.count == 0; + var groups = {}; + $searchResults.toggleClass('no-results', noResults); + + // Clear old results + $searchList.empty(); + + // Display title for research + $searchResultsCount.text(res.count); + $searchQuery.text(res.query); + + // Group result by context + res.results.forEach(function(res) { + var context = res.title.split(' - ')[0]; + if (typeof groups[context] === 'undefined') { + groups[context] = { + results: [res] + } + } else { + groups[context].results.push(res) + } + }); + + var sortedGroups = Object.keys(groups).sort(); + + for (var i = 0; i < sortedGroups.length; i++) { + var property = sortedGroups[i]; + + var $li = $('
                                                                                                                                              • ', { + 'class': 'search-results-group' + }); + var finalPropertyLabel = ''; + var propertyLabels = property.split('-'); + + if (propertyLabels.length === 2 && propertyLabels[0] !== 'miscellaneous' && propertyLabels[0] !== 'additional') { + finalPropertyLabel = propertyLabels[0].charAt(0).toUpperCase() + propertyLabels[0].substring(1) + ' - ' + propertyLabels[1].charAt(0).toUpperCase() + propertyLabels[1].substring(1) + ' (' + groups[property].results.length + ')'; + } else if (propertyLabels[0] === 'additional') { + finalPropertyLabel = 'Additional pages' + ' (' + groups[property].results.length + ')' + } else { + finalPropertyLabel = propertyLabels[0].charAt(0).toUpperCase() + propertyLabels[0].substring(1) + ' (' + groups[property].results.length + ')' + } + var $groupTitle = $('

                                                                                                                                                ', { + 'text': finalPropertyLabel + }); + $groupTitle.appendTo($li); + + var $ulResults = $('

                                                                                                                                              • + diff --git a/src/app/pages/authentication/login/login.component.scss b/src/app/pages/authentication/login/login.component.scss index d726878..0e74cac 100755 --- a/src/app/pages/authentication/login/login.component.scss +++ b/src/app/pages/authentication/login/login.component.scss @@ -1,75 +1,3 @@ - -.signIn { - margin-bottom: 15px; - display: block; - font-size: 19px; - font-weight: 400; -} -.login-register { - .login-box { - .card-body { - flex: 1 1 auto; - padding: 1.25rem; - margin-left: auto; - margin-right: auto; - /* display: block; */ - max-width: 550px; - /* margin: auto; */ - } - input:-webkit-autofill { - -webkit-box-shadow: 0 0 0px 1000px white inset; - } - } - .col-md-12 { - padding-left: 0px; - padding-right: 0px; - } - .form-horizontal { - label { - margin-left: 5px; - } - } - .button-login { - margin-top: 20px; - background-color: rgb(255,204,0); - color: black; - } - min-height: 100vh; - display: flex; - flex-direction: column; - background-color:rgb(38,73,152) -} -.logo-container{ - margin-top: 50px; - margin-bottom: 50px; - img{ - border-radius: 50%; - display: block; - margin: auto; - height: 250px; - border: 15px solid white; - } -} -.login-box{ - .card-body{ - .form-group{ - background-color:transparent; - } - .form-control{ - border:none; - color:white; - background-color: transparent; - border-bottom: 1px solid white; - border-radius: 0px; - } - :focus{ - outline:none; - } - ::placeholder{ - color: white; - } - } -} -:host ::ng-deep .help-block{ - color:white; -} +:host ::ng-deep .help-block { + color: white; +} \ No newline at end of file diff --git a/src/app/pages/authentication/login/login.component.ts b/src/app/pages/authentication/login/login.component.ts index 5b3bc42..6771fda 100755 --- a/src/app/pages/authentication/login/login.component.ts +++ b/src/app/pages/authentication/login/login.component.ts @@ -1,8 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormGroup, Validators, FormControl } from '@angular/forms'; import { Router } from '@angular/router'; import { AuthenticationService } from '@app/core'; -import { finalize } from 'rxjs/operators'; +import { finalize, debounceTime } from 'rxjs/operators'; +import { Subject } from 'rxjs/internal/Subject'; @Component({ selector: 'app-login', @@ -10,24 +11,50 @@ import { finalize } from 'rxjs/operators'; styleUrls: ['./login.component.scss'] }) export class LoginComponent implements OnInit { + /** + * Form that stores login data + */ loginForm: FormGroup; - resetPasswordForm: FormGroup; + /** + * Flag for html loader + */ isLoading = false; + /** + * Message to be displaied on error + */ + errorMessage: string; constructor( public router: Router, - private formBuilder: FormBuilder, - private authenticationService: AuthenticationService - ) { - this.createForm(); + private authenticationService: AuthenticationService) { + this.loginForm = new FormGroup({ + email: new FormControl('', [Validators.required]), + password: new FormControl('', [Validators.required]) + }); } + private _success = new Subject(); - ngOnInit() {} - + ngOnInit() { + this._success.subscribe(message => (this.errorMessage = message)); + this._success + .pipe(debounceTime(5000)) + .subscribe(() => (this.errorMessage = null)); + } + /** + * On error broadcast message to ngb-alert. + * After DeboundeTime we set errorMessage to null + */ + public changeErrorMessage() { + this._success.next( + 'Nu s-a putut realiza autentificarea, vă rugăm verificați datele și reîncercați' + ); + } + /** + * Login with username and password obtained from form {@link loginForm}. + * + * On success redirects to dashboard + */ login() { - console.log("fgdjgk"); - this.router.navigate(['/'], { - replaceUrl: true - }); + this.router.navigate(['/'], { replaceUrl: true }); this.isLoading = true; this.authenticationService .login(this.loginForm.value) @@ -38,26 +65,19 @@ export class LoginComponent implements OnInit { }) ) .subscribe( - (credentials: Authentication.Credentials) => { - console.log(credentials); - this.router.navigate(['/'], { - replaceUrl: true - }); + (credentials: any) => { + if (credentials.user.role !== '0') { + this.router.navigate(['/'], { + replaceUrl: true + }); + } else { + this.changeErrorMessage(); + } }, (error: any) => { - console.log('Login error: ',error); + this.changeErrorMessage(); + console.log('Login error: ', error); } ); } - - resetPassword() { - // TODO: Implement Reset Password - } - - private createForm() { - this.loginForm = this.formBuilder.group({ - email: ['', [Validators.required]], - password: ['', Validators.required] - }); - } } diff --git a/src/app/pages/authentication/recover-password/recover-password.component.html b/src/app/pages/authentication/recover-password/recover-password.component.html new file mode 100644 index 0000000..78b5e90 --- /dev/null +++ b/src/app/pages/authentication/recover-password/recover-password.component.html @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/src/app/pages/dashboard/dashboard/dashboard.component.scss b/src/app/pages/authentication/recover-password/recover-password.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/pages/dashboard/dashboard/dashboard.component.scss rename to src/app/pages/authentication/recover-password/recover-password.component.scss diff --git a/src/app/pages/authentication/recover-password/recover-password.component.spec.ts b/src/app/pages/authentication/recover-password/recover-password.component.spec.ts new file mode 100644 index 0000000..d9c3b6d --- /dev/null +++ b/src/app/pages/authentication/recover-password/recover-password.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RecoverPasswordComponent } from './recover-password.component'; + +describe('RecoverPasswordComponent', () => { + let component: RecoverPasswordComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [RecoverPasswordComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RecoverPasswordComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/authentication/recover-password/recover-password.component.ts b/src/app/pages/authentication/recover-password/recover-password.component.ts new file mode 100644 index 0000000..8883107 --- /dev/null +++ b/src/app/pages/authentication/recover-password/recover-password.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, Validators, FormControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { AuthenticationService } from '@app/core'; +import { EmailValidation } from '@app/core/validators/email-validation'; + +@Component({ + selector: 'app-recover-password', + templateUrl: './recover-password.component.html', + styleUrls: ['./recover-password.component.scss'] +}) +export class RecoverPasswordComponent implements OnInit { + /** + * Form holds data to be completed + */ + resetPasswordForm: FormGroup; + /** + * flag for HTML to display loading animation + */ + loading = false; + /** + * Message to be displaied on error + */ + errorMessage: string = null; + + constructor( + public router: Router, + private authenticationService: AuthenticationService + ) {} + + ngOnInit() { + this.resetPasswordForm = new FormGroup({ + email: new FormControl('', [Validators.required, EmailValidation.emailValidation]) + }); + } + /** + * Login with username and password obtained from form {@link resetPasswordForm}. + * + * On success redirects to dashboard + */ + resetPassword() { + this.loading = true; + this.authenticationService.recoverPassword(this.resetPasswordForm.value.email).subscribe(response => { + this.loading = false; + this.router.navigate(['/login']); + }, error => { + this.loading = false; + this.errorMessage = 'Adresa de email specificată nu există. Te rugăm să verifici și să încerci din nou.'; + }); + } +} diff --git a/src/app/pages/authentication/reset-password/reset-password.component.html b/src/app/pages/authentication/reset-password/reset-password.component.html new file mode 100644 index 0000000..8c7d521 --- /dev/null +++ b/src/app/pages/authentication/reset-password/reset-password.component.html @@ -0,0 +1,49 @@ + \ No newline at end of file diff --git a/src/app/pages/organizations/organizations/organizations.component.scss b/src/app/pages/authentication/reset-password/reset-password.component.scss similarity index 100% rename from src/app/pages/organizations/organizations/organizations.component.scss rename to src/app/pages/authentication/reset-password/reset-password.component.scss diff --git a/src/app/pages/authentication/reset-password/reset-password.component.spec.ts b/src/app/pages/authentication/reset-password/reset-password.component.spec.ts new file mode 100644 index 0000000..648b919 --- /dev/null +++ b/src/app/pages/authentication/reset-password/reset-password.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ResetPasswordComponent } from './reset-password.component'; + +describe('ResetPasswordComponent', () => { + let component: ResetPasswordComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ResetPasswordComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ResetPasswordComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/authentication/reset-password/reset-password.component.ts b/src/app/pages/authentication/reset-password/reset-password.component.ts new file mode 100644 index 0000000..6a4509b --- /dev/null +++ b/src/app/pages/authentication/reset-password/reset-password.component.ts @@ -0,0 +1,105 @@ +import { Component, OnInit } from '@angular/core'; +import { + FormGroup, + Validators, + FormBuilder +} from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { AuthenticationService } from '@app/core'; +import { PasswordValidation } from '@app/core/validators/password-validation'; + +@Component({ + selector: 'app-reset-password', + templateUrl: './reset-password.component.html', + styleUrls: ['./reset-password.component.scss'] +}) + +export class ResetPasswordComponent implements OnInit { + /** + * Form holds data to be completed + */ + resetPasswordForm: FormGroup; + /** + * reset password token received from reset link + */ + token: string; + /** + * error message to display in html + */ + errorMessage: string = null; + /** + * flag for HTML to display a loading animation + */ + loading = false; + + constructor( + public router: Router, + private authenticationService: AuthenticationService, + private formBuilder: FormBuilder, + private route: ActivatedRoute + ) {} + + ngOnInit() { + /** + * Check if user is logged in. if true, redirect to login + */ + if (!!this.authenticationService.isAuthenticated()) { + this.authenticationService.logout().subscribe( + (didlogout: Boolean) => { + if (didlogout) { + this.router.navigate(['/login']); + } + }, + (error: any) => { + console.log('logout error: ', error); + }); + } + + /** + * get token from email link + */ + this.route.params.subscribe(params => { + this.token = params['token']; + }); + /** + * build form that holds data to be completed + */ + this.resetPasswordForm = this.formBuilder.group( + { + password: ['', + [ + Validators.required, + Validators.minLength(8), + PasswordValidation.passwordValidation + ] + ], + confirmPassword: ['', + [ + Validators.required, + Validators.minLength(8), + PasswordValidation.passwordValidation + ] + ] + }, + { + validator: PasswordValidation.MatchPassword + } + ); + } + /** + * function to call on form submit + */ + resetPassword() { + this.loading = true; + this.authenticationService.resetPassword(this.resetPasswordForm.value.password, this.token).subscribe(response => { + this.loading = false; + this.errorMessage = null; + this.router.navigate(['/login']); + }, error => { + this.loading = false; + + // tslint:disable-next-line: max-line-length + this.errorMessage = 'Token-ul de resetare al parolei nu este valid, te rugăm să reîncerci din email-ul primit. Dacă problema persistă, te rugăm să ceri din nou schimbarea parolei.'; + }); + } +} diff --git a/src/app/pages/authentication/signup/signup.component.html b/src/app/pages/authentication/signup/signup.component.html index 1516c2f..e69de29 100755 --- a/src/app/pages/authentication/signup/signup.component.html +++ b/src/app/pages/authentication/signup/signup.component.html @@ -1,80 +0,0 @@ - \ No newline at end of file diff --git a/src/app/pages/authentication/signup/signup.component.ts b/src/app/pages/authentication/signup/signup.component.ts index 9d218a7..a9408eb 100755 --- a/src/app/pages/authentication/signup/signup.component.ts +++ b/src/app/pages/authentication/signup/signup.component.ts @@ -3,55 +3,72 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { Router } from '@angular/router'; import { AuthenticationService } from '@app/core'; import { finalize } from 'rxjs/operators'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; @Component({ - selector: 'app-signup', - templateUrl: './signup.component.html', - styleUrls: ['./signup.component.scss'] + selector: 'app-signup', + templateUrl: './signup.component.html', + styleUrls: ['./signup.component.scss'] }) export class SignupComponent implements OnInit { - signupForm: FormGroup; - isLoading = false; + /** + * Signup internal variables + */ + signupForm: FormGroup; + isLoading = false; + /** + * Component to show signup page + */ + constructor( + public router: Router, + private formBuilder: FormBuilder, + private authenticationService: AuthenticationService + ) { + this.createForm(); + } - constructor( - public router: Router, - private formBuilder: FormBuilder, - private authenticationService: AuthenticationService - ) { - this.createForm(); - } + /** + * Angular ng on init + */ + ngOnInit() {} - ngOnInit() {} - signup() { - this.isLoading = true; - this.authenticationService - .signup(this.signupForm.value) - .pipe( - finalize(() => { - this.signupForm.markAsPristine(); - this.isLoading = false; - }) - ) - .subscribe( - (user: Authentication.User) => { - console.log(user); - this.router.navigate(['/login']); - }, - (error: any) => { - console.log(`Signup error: ${error}`); - } - ); - } + /** + * Signup method called on form submit + */ + signup() { + this.isLoading = true; + this.authenticationService + .signup(this.signupForm.value) + .pipe( + finalize(() => { + this.signupForm.markAsPristine(); + this.isLoading = false; + }) + ) + .subscribe( + (user: Authentication.User) => { + console.log(user); + this.router.navigate(['/login']); + }, + (error: any) => { + console.log('Signup error: ', error); + } + ); + } - private createForm() { - this.signupForm = this.formBuilder.group({ - firstName: ['', [Validators.required]], - lastName: ['', [Validators.required]], - email: ['', [Validators.required, Validators.email]], - phone: ['', [Validators.required]], - password: ['', Validators.required], - cPassword: ['', Validators.required] - }); - } + /** + * Sign up form definition for reactive forms + */ + private createForm() { + this.signupForm = this.formBuilder.group({ + firstName: ['', [Validators.required]], + lastName: ['', [Validators.required]], + email: ['', [Validators.required, EmailValidation.emailValidation]], + phone: ['', [Validators.required, PhoneValidation.phoneValidation]], + password: ['', Validators.required], + cPassword: ['', Validators.required] + }); + } } diff --git a/src/app/pages/dashboard/dashboard.module.ts b/src/app/pages/dashboard/dashboard.module.ts deleted file mode 100755 index 838294b..0000000 --- a/src/app/pages/dashboard/dashboard.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - -import { DashboardRoutingModule } from './dashboard.routing'; -import { DashboardComponent } from './dashboard/dashboard.component'; - -@NgModule({ - declarations: [DashboardComponent], - imports: [ - FormsModule, - CommonModule, - NgbModule, - DashboardRoutingModule - ], -}) -export class DashboardModule {} diff --git a/src/app/pages/dashboard/dashboard.routing.ts b/src/app/pages/dashboard/dashboard.routing.ts deleted file mode 100755 index 044219a..0000000 --- a/src/app/pages/dashboard/dashboard.routing.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { AuthenticationGuard } from '@app/core'; -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { DashboardComponent } from './dashboard/dashboard.component'; - -const DashboardRoutes: Routes = [ - { - path: '', component: DashboardComponent, - }, - { - path: 'volunteers', - loadChildren: '../volunteers/volunteers.module#VolunteersModule', - }, - { - path: 'resources', - loadChildren: '../resources/resources.module#ResourcesModule', - }, - { - path: 'organizations', - loadChildren: '../organizations/organizations.module#OrganizationsModule', - }, - { - path: 'map', - loadChildren: '../map/map.module#MapModule', - }, - { - path: 'info', - loadChildren: '../info/info.module#InfoModule', - }, -]; -@NgModule({ - exports: [RouterModule], - imports: [RouterModule.forChild(DashboardRoutes)] -}) -export class DashboardRoutingModule { - -} diff --git a/src/app/pages/dashboard/dashboard/dashboard.component.html b/src/app/pages/dashboard/dashboard/dashboard.component.html deleted file mode 100755 index 2bb7029..0000000 --- a/src/app/pages/dashboard/dashboard/dashboard.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
                                                                                                                                                -

                                                                                                                                                {{user.email}}

                                                                                                                                                -
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/dashboard/dashboard/dashboard.component.ts b/src/app/pages/dashboard/dashboard/dashboard.component.ts deleted file mode 100755 index 094520f..0000000 --- a/src/app/pages/dashboard/dashboard/dashboard.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - templateUrl: './dashboard.component.html', - styleUrls: ['./dashboard.component.scss'] -}) -export class DashboardComponent { - user = { - 'email': 'test13@test.com' - }; - constructor() {} -} diff --git a/src/app/pages/dashboard/dashboard/index.ts b/src/app/pages/dashboard/dashboard/index.ts deleted file mode 100755 index 4419096..0000000 --- a/src/app/pages/dashboard/dashboard/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// start:ng42.barrel -export * from './dashboard.component'; -// end:ng42.barrel diff --git a/src/app/pages/dashboard/index.ts b/src/app/pages/dashboard/index.ts deleted file mode 100755 index f4e12d3..0000000 --- a/src/app/pages/dashboard/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -// start:ng42.barrel -export * from './dashboard.module'; -export * from './dashboard.routing'; -export * from './dashboard'; -// end:ng42.barrel diff --git a/src/app/pages/info/info.routing.ts b/src/app/pages/info/info.routing.ts index 7ea4dfb..a14ec95 100644 --- a/src/app/pages/info/info.routing.ts +++ b/src/app/pages/info/info.routing.ts @@ -2,15 +2,15 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { InfoComponent } from './info/info.component'; const routes: Routes = [ - { - path: '', - component: InfoComponent, - } + { + path: '', + component: InfoComponent, + } ]; @NgModule({ - exports: [RouterModule], - imports: [RouterModule.forChild(routes)] + exports: [RouterModule], + imports: [RouterModule.forChild(routes)] }) export class InfoRoutingModule { diff --git a/src/app/pages/info/info/info.component.html b/src/app/pages/info/info/info.component.html index 08a916d..345498c 100644 --- a/src/app/pages/info/info/info.component.html +++ b/src/app/pages/info/info/info.component.html @@ -1 +1,51 @@ -

                                                                                                                                                info works!

                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +

                                                                                                                                                + Resource and Volunteer Management este o aplicație menită să ofere sprijin în eventualitatea unei calamități majore care ar avea loc în România. RVM este un instrument de administrare de voluntari și resurse pe care le pune la dispoziție societatea civilă către Departamentul de Situații de Urgență în cazul unui seism major sau al unui alt dezastru natural. Aplicația permite managementul stocurilor de resurse disponibile, menținerea unei situații clare cu privire la cantități, tipuri de materiale și locurile în care acestea sunt depozitate, precum și statusul voluntarilor organizați pe specializări distincte. +

                                                                                                                                                +

                                                                                                                                                + RVM are două componente principale: +

                                                                                                                                                +
                                                                                                                                                  +
                                                                                                                                                • + Aplicația web care permite gestionarea resurselor și a voluntarilor specializați în oferirea de prim-ajutor, dar și de intervenție de orice alt tip +
                                                                                                                                                • +
                                                                                                                                                • + Aplicația mobilă care permite ofițerilor de intervenție din teren să mobilizeze voluntari sau să valideze identitatea unor voluntari deja existenți în platformă. +
                                                                                                                                                • +
                                                                                                                                                +

                                                                                                                                                + Sistemul are patru tipuri de utilizatori: +

                                                                                                                                                +
                                                                                                                                                  +
                                                                                                                                                • + Administratorul DSU care are capacitatea de a urmări simplu care este nivelul de resurse disponibile din teren la orice moment și de a cere organizațiilor situații actualizate, poate da acces altor instituții în platformă și poate administra organizațiile, respectiv resursele centralizate în platformă. +
                                                                                                                                                • +
                                                                                                                                                • + Administratorul ONG care are un cont dedicat unde își poate ține evidența resurselor pe care le poate face disponibile în cazul în care situația o cere. +
                                                                                                                                                • +
                                                                                                                                                • + Administratorul instituțional care poate să listeze în platformă efectivele de intervenție ca aceștia să poată beneficia de aplicație pe teren în caz de dezastru. +
                                                                                                                                                • +
                                                                                                                                                • + Ofițerul de intervenție care poate fi un angajat DSU, al Poliției, Jandarmeriei sau al altei instituții care intervine în caz de urgență și are nevoie să mobilizeze voluntari sau să valideze identitatea unor voluntari deja existenți în platformă. +
                                                                                                                                                • +
                                                                                                                                                +

                                                                                                                                                + Aplicația RVM este dezvoltată de Code for Romania, în parteneriat cu Departamentul pentru Situații de Urgență și cu sprijinul World Bank. +

                                                                                                                                                + +
                                                                                                                                                + + + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + diff --git a/src/app/pages/info/info/info.component.scss b/src/app/pages/info/info/info.component.scss index e69de29..4449e63 100644 --- a/src/app/pages/info/info/info.component.scss +++ b/src/app/pages/info/info/info.component.scss @@ -0,0 +1,3 @@ +.logo-group img { + object-fit: contain; +} \ No newline at end of file diff --git a/src/app/pages/info/info/info.component.ts b/src/app/pages/info/info/info.component.ts index ff8a8b9..a01efc3 100644 --- a/src/app/pages/info/info/info.component.ts +++ b/src/app/pages/info/info/info.component.ts @@ -1,15 +1,18 @@ import { Component, OnInit } from '@angular/core'; @Component({ - selector: 'app-info', - templateUrl: './info.component.html', - styleUrls: ['./info.component.scss'] + selector: 'app-info', + templateUrl: './info.component.html', + styleUrls: ['./info.component.scss'] }) -export class InfoComponent implements OnInit { - constructor() { } +export class InfoComponent implements OnInit { + /** + * Component to show on info page. All data is static + */ + constructor() { } - ngOnInit() { - } + ngOnInit() { + } } diff --git a/src/app/pages/map/map.module.ts b/src/app/pages/map/map.module.ts index 4d66ab6..d11ac8c 100644 --- a/src/app/pages/map/map.module.ts +++ b/src/app/pages/map/map.module.ts @@ -1,22 +1,24 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { MapComponent } from './map/map.component' +import { MapComponent } from './map/map.component'; import { MapRoutingModule } from './map.routing'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { MapService } from './map.service'; @NgModule({ - declarations: [ - MapComponent - ], - imports: [ - CommonModule, - MapRoutingModule, - ], - entryComponents: [ - - ], - providers: [ - //OrganizationService - ] - }) + declarations: [ + MapComponent + ], + imports: [ + NgbModule, + CommonModule, + MapRoutingModule, + ], + entryComponents: [ + ], + providers: [ + MapService, + ] + }) export class MapModule { } diff --git a/src/app/pages/map/map.routing.ts b/src/app/pages/map/map.routing.ts index 6307a1f..da5dd28 100644 --- a/src/app/pages/map/map.routing.ts +++ b/src/app/pages/map/map.routing.ts @@ -2,15 +2,15 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { MapComponent } from './map/map.component'; const routes: Routes = [ - { - path: '', - component: MapComponent, - } + { + path: '', + component: MapComponent, + } ]; @NgModule({ - exports: [RouterModule], - imports: [RouterModule.forChild(routes)] + exports: [RouterModule], + imports: [RouterModule.forChild(routes)] }) export class MapRoutingModule { diff --git a/src/app/pages/map/map.service.ts b/src/app/pages/map/map.service.ts new file mode 100644 index 0000000..9be1db3 --- /dev/null +++ b/src/app/pages/map/map.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; +/** + * Map services + */ +@Injectable({ + providedIn: 'root' + }) +export class MapService { + constructor(private http: HttpClient) {} + + getMapFilters(): Observable { + return this.http.get('/filter/map'); + } +} diff --git a/src/app/pages/map/map/map.component.html b/src/app/pages/map/map/map.component.html index 088f942..6d661d5 100644 --- a/src/app/pages/map/map/map.component.html +++ b/src/app/pages/map/map/map.component.html @@ -1 +1,145 @@ -

                                                                                                                                                map works!

                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                +
                                                                                                                                                diff --git a/src/app/pages/map/map/map.component.scss b/src/app/pages/map/map/map.component.scss index e69de29..0e5af34 100644 --- a/src/app/pages/map/map/map.component.scss +++ b/src/app/pages/map/map/map.component.scss @@ -0,0 +1,12 @@ +.svg-box { + width: 100%; + height: 0; + padding-top: 100%; /* Aspect ratio */ + position: relative; +} + +.svg-box-content { + position: absolute; + top: 0; + left: 0; +} diff --git a/src/app/pages/map/map/map.component.ts b/src/app/pages/map/map/map.component.ts index 4bfee71..a3b166f 100644 --- a/src/app/pages/map/map/map.component.ts +++ b/src/app/pages/map/map/map.component.ts @@ -1,15 +1,215 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, AfterViewInit, HostListener } from '@angular/core'; +import { MapService } from '../map.service'; @Component({ - selector: 'app-map', - templateUrl: './map.component.html', - styleUrls: ['./map.component.scss'] + selector: 'app-map', + templateUrl: './map.component.html', + styleUrls: ['./map.component.scss'] }) export class MapComponent implements OnInit { + /** + * Array of counties and county data + */ + ids: any[]; + /** + * Adjustments to align the icons so that they will fit within the county border + */ + adjustments: any = { + 'Dambovita': {vol_x: -15,vol_y: 20,res_x: -5,res_y: -10}, + 'Tulcea': {vol_x: -35,vol_y: 0,res_x: -35,res_y: 0}, + 'Ialomita': {vol_x: 0,vol_y: -5,res_x: 0,res_y: -5}, + 'Constanta': {vol_x: 15,vol_y: 0,res_x: 15,res_y: 0}, + 'Alba': {vol_x: 10,vol_y: -20,res_x: 10,res_y: -20,}, + 'Timis': {vol_x: 0,vol_y: -10,res_x: 0,res_y: -10,}, + 'Cluj': {vol_x: 0,vol_y: 20,res_x: 0,res_y: 20,}, + 'Neamt': {vol_x: -10,vol_y: 0,res_x: -10,res_y: 0,}, + 'Brasov': {vol_x: -20,vol_y: 0,res_x: -20,res_y: 0,}, + 'Ilfov': {vol_x: -15,vol_y: 10,res_x: 10,res_y: -15}, + 'Harghita': {vol_x: 0,vol_y: 15,res_x: 0,res_y: 15}, + 'Mehedinti': {vol_x: 0,vol_y: 20,res_x: 10,res_y: -25}, + 'Salaj': {vol_x: -10,vol_y: 0,res_x: -10,res_y: 0}, + 'Olt': {vol_x: 10,vol_y: 0,res_x: 10,res_y: 0}, + }; + /** + * Flag to check if a county is selected + */ + hasclicked = false; + /** + * Var with the previous selected county + */ + previous: any; + /** + * Click listener to check if user has clicked on map or outside of it + */ + @HostListener('click', ['$event']) onClick(event: any) { + /** + * If a county is already selected + */ + if (this.hasclicked) { + /** + * if the user has clicked inside the rect of a county + */ + if (event.target.nodeName === 'path') { + /** + * if there is a previously selected county, it must be deselected + */ + if (this.previous && this.previous.event) { + this.deselectCountybyId(this.previous.event); + } + /** + * Select the new county + */ + this.selectCountybyId(event.target.getAttribute('id'), event); + } else { + /** + * User has clicked ouside the map and there already is a selected county. must deslect the county + */ + if (this.previous && this.previous.id) { + this.deselectCountybyId(this.previous.event); + } + this.hasclicked = false; + } + } else { + /** + * First time click. If inside a county select the county + */ + if (event.target.nodeName === 'path') { + this.hasclicked = true; + this.selectCountybyId(event.target.getAttribute('id'), event); + } + } + } - constructor() { } + constructor(private mapservice: MapService) { + } - ngOnInit() { - } + ngOnInit() { + /** + * Get nr of resources and nr of volunteers per county + */ + this.mapservice.getMapFilters().subscribe((res: any) => { + res.map((elem: any) => { + elem.id = elem._id; + elem.icons = []; + if (elem.nrResurse !== 0) { + elem.icons.push('res'); + } + if (elem.nrVoluntari !== 0) { + elem.icons.push('vol'); + } + return elem; + }); + this.ids = res; + setTimeout(() => { + this.setIcons(); + }, 0); + }); + } + /** + * If there are volunteers or resources in a county, render icons over said county + */ + setIcons() { + for (let i = 0; i < this.ids.length; i++) { + if (this.ids[i].name !== 'București' && this.ids[i].name !== 'Ilfov') { + this.setIcon(i); + } + } + } + /** + * Add icons over a specific county + * @param {any} i the id of the county + */ + setIcon(i: any) { + const p = (document.getElementById(this.ids[i].id) as any).getBBox(); + const cx = p.x + p.width / 2; + const cy = p.y + p.height / 2; + const adjust = this.adjustments[this.ids[i].slug]; + if (this.ids[i].icons.includes('res')) { + const res = document.getElementById('icon_res_' + this.ids[i].id); + res.setAttribute('x', String(cx - 20 + (adjust ? adjust.res_x : 0))); + res.setAttribute('y', String(cy - 10 + (adjust ? adjust.res_y : 0))); + res.setAttribute('width', '20'); + res.setAttribute('height', '20'); + } + if (this.ids[i].icons.includes('vol')) { + const vol = document.getElementById('icon_vol_' + this.ids[i].id); + vol.setAttribute('x', String(cx + 5 + (adjust ? adjust.vol_x : 0))); + vol.setAttribute('y', String(cy - 10 + (adjust ? adjust.vol_y : 0))); + vol.setAttribute('width', '20'); + vol.setAttribute('height', '20'); + } + } + /** + * highlight county and add label over it + * @param {any} i the id of the county + */ + selectCountybyId(id: any, e: any) { + if (e.target && e.target.nodeName === 'path') { + this.previous = {id: id, event: e}; + const p = e.target.getBBox(); + const cx = p.x + p.width / 2; + const cy = p.y + p.height / 2; + this.tooltip(cx, cy, + this.ids.find(x => x.id === id).name + + '
                                                                                                                                                Resurse: ' + this.ids.find(x => x.id === id).nrResurse + + '
                                                                                                                                                Voluntari: ' + this.ids.find(x => x.id === id).nrVoluntari); + e.target.setAttribute('fill', '#264998'); + } + } + /** + * add tooltip on the provided coordinates + * @param {any} x the x coord + * @param {any} y the y coord + * @param {any} txt the string to be shown + */ + tooltip(x: any, y: any, txt: string) { + const text: any = document.getElementById('recttext'); + text.innerHTML = txt; + const p = text.getBBox(); + setTimeout(function() { + text.setAttribute('width', p.width - 110); + text.setAttribute('height', p.height + 110); + text.setAttribute('x', String(x - p.width / 2 - p.x)); + text.setAttribute('y', String(y - p.height / 2 - p.y)); + text.setAttribute('fill', '#000000'); + const rect = document.getElementById('recttest'); + rect.setAttribute('x', String(x - (p.width / 2) - 5)); + rect.setAttribute('y', String(y - (p.height / 2) - 5)); + rect.setAttribute('width', p.width + 10); + rect.setAttribute('height', p.height + 10); + rect.setAttribute('fill', '#ffffff'); + }, 0); + + } + /** + * delete tooltip + */ + tooltipOut() { + const text = document.getElementById('recttext'); + text.innerHTML = ''; + text.setAttribute('x', '0'); + text.setAttribute('y', '0'); + + const rect = document.getElementById('recttest'); + rect.setAttribute('x', '0'); + rect.setAttribute('y', '0'); + rect.setAttribute('width', '0'); + rect.setAttribute('height', '0'); + } + /** + * dehighlight county by id + * @param {any} e the rect of the county + */ + deselectCountybyId(e: any) { + if (e.target && e.target.nodeName === 'path') { + // const p = e.target.getBBox(); + // const cx = p.x + p.width / 2; + // const cy = p.y + p.height / 2; + + this.tooltipOut(); + + e.target.setAttribute('fill', '#f3d973'); + } + } } diff --git a/src/app/pages/organisations/organisations.module.ts b/src/app/pages/organisations/organisations.module.ts new file mode 100644 index 0000000..9d9b450 --- /dev/null +++ b/src/app/pages/organisations/organisations.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { OrganisationsComponent } from './organisations/organisations.component'; +import { OrganisationsDashboardComponent } from './organisations/components/organisations-dashboard/organisations-dashboard.component'; +import { OrganisationaddComponent } from './organisations/components/organisation-add/organisation-add.component'; +import { NgodetailsComponent } from './organisations/components/organisation-details/organisation-details.component'; +import { OrganisationService } from './organisations.service'; +import { OrganisationsRoutingModule } from './organisations.routing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { SharedModule } from '../../shared/shared.module'; +import { SelectDropDownModule } from 'custom-select-dropdown'; +import { NgxMultiselectModule } from '@ngx-lib/multiselect'; +import { OrganisationEditComponent } from './organisations/components/organisation-edit/organisation-edit.component'; +@NgModule({ + declarations: [ + OrganisationsComponent, + NgodetailsComponent, + OrganisationaddComponent, + OrganisationsDashboardComponent, + OrganisationEditComponent, + ], + imports: [ + NgxMultiselectModule, + SelectDropDownModule, + SharedModule, + NgbModule, + FormsModule, + ReactiveFormsModule, + CommonModule, + OrganisationsRoutingModule, + ], + entryComponents: [ + + ], + providers: [ + OrganisationService + ] +}) + +export class OrganisationsModule { + +} diff --git a/src/app/pages/organisations/organisations.routing.ts b/src/app/pages/organisations/organisations.routing.ts new file mode 100644 index 0000000..d964527 --- /dev/null +++ b/src/app/pages/organisations/organisations.routing.ts @@ -0,0 +1,60 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { OrganisationsComponent } from './organisations/organisations.component'; +import { OrganisationaddComponent } from './organisations/components/organisation-add/organisation-add.component'; +import { NgodetailsComponent } from './organisations/components/organisation-details/organisation-details.component'; +import { RoleGuard } from '@app/core'; +import { OrganisationEditComponent } from './organisations/components/organisation-edit/organisation-edit.component'; +import { OrganisationsDashboardComponent } from './organisations/components/organisations-dashboard/organisations-dashboard.component'; +const routes: Routes = [ + { + path: '', + component: OrganisationsComponent, + children: [ + { + path: '', + component: OrganisationsDashboardComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU']} + }, + { + path: 'add', + component: OrganisationaddComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU']} + }, + { + path: 'edit/:id', + component: OrganisationEditComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'id/:id', + component: NgodetailsComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']}, + }, + { + path: 'id/:id/:tabname', + component: NgodetailsComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']}, + }, + { + path: 'id/:id/validate', + component: NgodetailsComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']}, + }, + ] + } +]; + +@NgModule({ + exports: [RouterModule], + imports: [RouterModule.forChild(routes)] +}) +export class OrganisationsRoutingModule { + +} diff --git a/src/app/pages/organisations/organisations.service.ts b/src/app/pages/organisations/organisations.service.ts new file mode 100644 index 0000000..e691a22 --- /dev/null +++ b/src/app/pages/organisations/organisations.service.ts @@ -0,0 +1,193 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/internal/Observable'; +import { HttpHeaders, HttpClient } from '@angular/common/http'; + +@Injectable({ + providedIn: 'root' + }) +export class OrganisationService { + /** + * pagers for the tables in the component + */ + pager: any = { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + }; + volunteerPager: any = { + sort: 1, + method: 'ASC', + page: 1, + size: 20, + total: 0, + filters: {} + }; + resourcePager: any = { + sort: 1, + method: 'ASC', + page: 1, + size: 20, + total: 0, + filters: {} + }; +/** + * get the standard organisation pager + * @returns pager + */ + getPager() { + return {...this.pager}; + } + /** + * init pager with default values + */ + setPager() { + this.pager = { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + }; + } +/** + * volunteer pager for ngo details volunteer table + */ + getVolunteerPager() { + return {...this.volunteerPager}; + } +/** + * resource pager for ngo details resource table + */ + getResourcePager() { + return {...this.resourcePager}; + } + /** + * fields for adding a new resource + */ + constructor(private httpClient: HttpClient) {} + + /** + * post a new organisation to website, auto add Header + * @param {any} payload the org data to be added + * @returns observable with response + */ + addorganisation(payload: any) { + return this.httpClient.post('/organisations', payload ); + } +/** + * edit a new organisation + * @param {any} payload the org data to be modified + * @param {string} id of the organistation to be modified + * @returns observable with response + */ + editOrganisation(id: string, payload: any) { + + return this.httpClient.put(`/organisations/${id}`, payload ); + } + + /** + * get all organisations + * @param {any} pager with sorting, filters, page etc. + * @returns observable with organisations list + */ + getorganisations(paginationObj?: any): Observable { + let params: any = {}; + + params = {...params, ...paginationObj}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + return this.httpClient.get('/organisations', { params: params }); + } + /** + * get organisation by id + * @param {string} id of the organistation to be fetched + * @returns observable with response organisation + */ + getorganisation(id: String): Observable { + return this.httpClient.get(`/organisations/${id}`); + } + /** + * send email to the org to update data + * @param {string} id of the organistation to be notified + * @returns observable with response + */ + sendUpdateDataEmail(id: String): Observable { + return this.httpClient.get(`/organisations/${id}/email`); + } + /** + * get organisation by id + * @param {string} id of the organistation that has been updated + * @returns observable with response + */ + updated(id: String): Observable { + return this.httpClient.get(`/organisations/${id}/validate`); + } + /** + * delete organisation by id + * @param {string} id of the organistation to be deleted + * @returns observable with response + */ + deleteorganisation(id: String): Observable { + return this.httpClient.delete(`/organisations/${id}`); + } + /** + * get organisation by name + * @param {string} name of the organistation to be found + * @returns observable with response + */ + getorganisationbyName(name: String): Observable { + let params = {}; + params = {...params, ...{name: name}}; + return this.httpClient.get('/organisations', {params: params} ); + } +/** + * get resource table with ngo id + * @param {string} id of the organistation to be queried + * @param {any} paginationObj of the resource table + * @returns observable with response + */ + getResourcesbyorganisation(id: String, paginationObj?: any): Observable { + let params: any = {}; + + params = {...params, ...paginationObj}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + return this.httpClient.get(`/organisations/${id}/resources`, {params: params}); + } +/** + * get volunteers table with ngo id + * @param {string} id of the organistation to be queried + * @param {any} paginationObj of the volunteers table + * @returns observable with response + */ + getVolunteersbyorganisation(id: String, paginationObj?: any): Observable { + let params: any = {}; + + params = {...params, ...paginationObj}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + return this.httpClient.get(`/organisations/${id}/volunteers`, {params: params}); + } +} diff --git a/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.html b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.html new file mode 100644 index 0000000..995031a --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.html @@ -0,0 +1,121 @@ +
                                                                                                                                                + + +

                                                                                                                                                Adaugă o organizație:

                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.website.errors.website}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * Trebuie să alegeți un tip. +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.email.errors.email}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.phone.errors.phone}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.scss b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.scss similarity index 91% rename from src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.scss rename to src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.scss index 73e877e..4c26d03 100644 --- a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.scss +++ b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.scss @@ -27,11 +27,7 @@ // display:inline; // white-space:nowrap; // } -@media (min-width: 1600px){ - .container{ - max-width: 1540px; - } -} + .form-group{ margin:0; } \ No newline at end of file diff --git a/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.spec.ts b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.spec.ts new file mode 100644 index 0000000..4ab15a8 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { OrganisationaddComponent } from './organisation-add.component'; + +describe('OrganisationaddComponent', () => { + let component: OrganisationaddComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ OrganisationaddComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(OrganisationaddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.ts b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.ts new file mode 100644 index 0000000..8382e52 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-add/organisation-add.component.ts @@ -0,0 +1,193 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { + FormGroup, + Validators, + FormBuilder +} from '@angular/forms'; +import { OrganisationService } from '../../../organisations.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service'; +import { Subject } from 'rxjs/internal/Subject'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { Observable } from 'rxjs/internal/Observable'; +import { + debounceTime, + distinctUntilChanged, + filter, + map, + switchMap +} from 'rxjs/operators'; +import { merge } from 'rxjs'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; +import { WebsiteValidation } from '@app/core/validators/website-validation'; +import { Location } from '@angular/common'; +import { LocationValidation } from '@app/core/validators/location-validation'; +import { UtilService } from '@app/core'; + +@Component({ + selector: 'app-organisation-add', + templateUrl: './organisation-add.component.html', + styleUrls: ['./organisation-add.component.scss'] +}) + +export class OrganisationaddComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + + /** + * placeholder for disabled city field + */ + cityPlaceholder = 'Selectați mai întâi județul'; + + /** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance1: NgbTypeahead; + focus1$ = new Subject(); + click1$ = new Subject(); + + @ViewChild('instance', { static: true }) instance2: NgbTypeahead; + focus2$ = new Subject(); + click2$ = new Subject(); + /** + * flag for HTML to display loading animation + */ + loading = false; + loadingCities = false; + /** + * list of cities to pe parsed. edited when the user selects a county or edits this NGO + */ + cities: any[] = []; + + constructor( + private route: ActivatedRoute, + private organisationService: OrganisationService, + private utilService: UtilService, + private location: Location, + private citiesandCounties: CitiesCountiesService, + private fb: FormBuilder) { } + + ngOnInit() { + /** + * init form with empty values + */ + this.form = this.fb.group({ + name: ['', [Validators.required]], + website: ['', [Validators.required, WebsiteValidation.websiteValidation]], + contact_person: ['', Validators.required], + phone: ['', [Validators.required, PhoneValidation.phoneValidation]], + address: [''], + cover: [''], + email: ['', [Validators.required, EmailValidation.emailValidation]], + county: ['', [Validators.required, LocationValidation.locationValidation]], + city: [{value: '', disabled: true }, [Validators.required, ]], + comments: [''] + }); + } + + formatter = (result: { name: string }) => result.name; + /** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcounty = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click1$.pipe( + filter(() => !this.instance1.isPopupOpen()) + ); + const inputFocus$ = this.focus1$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => this.citiesandCounties.getCounties(term)) + ); + } + /** + * trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities + * @param {Observable} text observable event with the filter text + */ + searchcity = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click2$.pipe( + filter(() => !this.instance2.isPopupOpen()) + ); + const inputFocus$ = this.focus2$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + map((term: string) => { + if (term === '') { + return this.cities; + } else { + return this.cities.filter(v => { + const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase(); + return aux.indexOf(term.toLowerCase()) > -1; + }).slice(0, 20); + } + })); + } + /** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCounty(val: any) { + this.form.controls.county.markAsTouched(); + if (val.item && val.item._id) { + this.form.patchValue({county: val.item}); + this.loadingCities = true; + this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => { + this.cities = res; + this.cityPlaceholder = 'Alegeți Orașul'; + this.loadingCities = false; + this.form.controls.city.enable(); + }); + } else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) { + this.form.patchValue({county: '', city: ''}); + } + } + + /** + * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection + * @param {any} event to be verified for which key has been pressed + */ + countykey(event: any) { + this.form.controls.county.markAsTouched(); + if (event.code !== 'Enter') { + this.cities = []; + this.form.controls.city.disable(); + this.form.controls.city.reset(''); + this.cityPlaceholder = 'Selectați mai întâi județul'; + } + } + /** + * trigger for select city from city typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCity(val: { item: any }) { + this.form.controls.city.markAsTouched(); + this.form.patchValue({city: val.item}); + } + + /** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + const ngo = this.form.value; + ngo.city = ngo.city._id; + ngo.county = ngo.county._id; + this.organisationService + .addorganisation(ngo) + .subscribe(() => { + this.loading = false; + this.location.back(); + }, () => { + this.loading = false; + }); + } +} diff --git a/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.html b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.html new file mode 100644 index 0000000..7431911 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.html @@ -0,0 +1,285 @@ +
                                                                                                                                                + + Notificarea a fost trimisă + Vă mulțumim că v-ați actualizat înregistrările. +
                                                                                                                                                +

                                                                                                                                                Profil organizație: {{data?.name}}

                                                                                                                                                +
                                                                                                                                                Persoană de contact: {{data?.contact_person?.name}} +
                                                                                                                                                + {{data?.contact_person?.email}} + {{data?.contact_person?.phone}} + Status organizație: {{data?.status || 'activ' }} + Total voluntari: {{nrvol}} + Acoperire: {{data?.cover || 'Națională' }} +
                                                                                                                                                + Data ultimului update: {{ (data?.updated_at | date: 'dd.MM.yyyy') || 'Nu există' }} + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + + Listă Voluntari + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + Total: {{volunteerPager.total}} +    + Filtrează după:   + + +   + + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + + + + + + + + + + + + + + + + +
                                                                                                                                                NumeLocalizareSpecializare
                                                                                                                                                {{res.name}}{{res.city.name}}, {{res.county.name}} + + + + + + + +
                                                                                                                                                + {{ course?.course_name?.name }} + + {{ course.obtained | date: 'dd.MM.yyyy' }} +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + Această organizație nu are niciun voluntar adaugăt în sistem + +
                                                                                                                                                +
                                                                                                                                                + + + + Listă Resurse + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + Total: {{resourcePager.total}} +    + Filtrează după:   + + + + {{option.name}} + + + +   + + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                Nume ResursăCategorieCantitateLocalizare
                                                                                                                                                {{res.name}}
                                                                                                                                                + {{elem.name}} +
                                                                                                                                                {{res.quantity}}{{res.city.name}}, {{res.county.name}} + + + + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + Această organizație nu are nici o resursă adaugată în sistem + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.scss b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.scss new file mode 100644 index 0000000..48c98a3 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.scss @@ -0,0 +1,36 @@ +::ng-deep .category{ + .none-selected:before { + content: 'Categorie' !important; + } +} +::ng-deep .specialization{ + .none-selected:before{ + content:'Specializări' !important; + } +} + +.hide { + visibility: hidden; +} + +.show { + visibility: unset; +} +button{ + word-break: break-word; +} +td{ + p{ + word-break: break-word; + } +} +.no-borders{ + td{ + border:none; + padding: 5px; + word-break: normal; + } +} +.non-clickable{ + cursor: default !important; +} \ No newline at end of file diff --git a/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.spec.ts b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.spec.ts new file mode 100644 index 0000000..07f2476 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NgodetailsComponent } from './organisation-details.component'; + +describe('NgodetailsComponent', () => { + let component: NgodetailsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ NgodetailsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NgodetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts new file mode 100644 index 0000000..83b1fdc --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-details/organisation-details.component.ts @@ -0,0 +1,369 @@ +import { + Component, + OnInit, + ViewChild, + AfterContentChecked, +} from '@angular/core'; +import { ActivatedRoute, Router, NavigationExtras, ParamMap } from '@angular/router'; +import { OrganisationService } from '../../../organisations.service'; +import { NgbModal, NgbTabset } from '@ng-bootstrap/ng-bootstrap'; +import { + FormGroup, + Validators, + FormBuilder +} from '@angular/forms'; +import { AuthenticationService } from '../../../../../core/authentication/authentication.service'; + +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service'; +import { ResourcesService } from '@app/pages/resources/resources.service'; +import { Location } from '@angular/common'; +import { FiltersService, UsersService } from '@app/core'; + +/** + * Alert message interface + */ +interface Alert { + type: string; + message: string; +} + +@Component({ + selector: 'app-organisation-details', + templateUrl: './organisation-details.component.html', + styleUrls: ['./organisation-details.component.scss'] +}) +export class NgodetailsComponent implements OnInit, AfterContentChecked { + + /** + * var that holds data about NGO, resources and volunteers + */ + needupdate = false; + data: any; + resourceData: any[] = []; + volunteersData: any[] = []; + /** + * var that holds pager and filters for resources and volunteers + */ + resourcePager: any = {}; + resourceFiltersSelected = Array(2); + volunteerPager: any = {}; + volunteerFiltersSelected = Array(2); + /** + * flag for ngtemplate in HTML + */ + hasVolunteers = false; + hasResources = false; + + nrvol = 0; + /** + * flag used to get ID from link and pass it to get method + */ + ngoid: string; + /** + * var for data to send when adding new resource. Only for DSU + */ + navigationExtras: NavigationExtras; + /** + * Fliterable values + */ + volunteerTypeFilterValues: any[] = []; + categoryFilterValues: any[] = []; + specializationFilterValues: any[] = []; + locationFilterValues: any[] = []; + /** + * Tabs reference for vefifing which is open + */ + @ViewChild('tabRef', { static: true}) tabRef: NgbTabset; + tabsInitialized = false; + selectedTab = 'volunteers'; + + /** + * flag for toast message + */ + messageSent = false; + updateSent = false; + /** + * flag for HTML to display loading animation + */ + loading = false; + /** + * mapping of object keys to filter recognizable keys + */ + propertyMap = { + '_id': 'id', + 'parent_id': 'parent_id' + }; + /** + * store the current voluneer that has courses open + */ + currentVolunteerId = ''; + + constructor( + private route: ActivatedRoute, + private router: Router, + private resourceService: ResourcesService, + public authService: AuthenticationService, + private organisationService: OrganisationService, + private filterService: FiltersService, + private location: Location, + private userService: UsersService, + private citiesandcounties: CitiesCountiesService, + ) { + if (this.router.url.indexOf('validate') > -1) { + this.needupdate = true; + } + /** + * set a specific open tab if necessary + */ + const navigation = this.router.getCurrentNavigation(); + + if (navigation && navigation.extras && navigation.extras.state) { + this.selectedTab = navigation.extras.state.tabName; + } + } + + ngOnInit() { + /** + * get values that can be queried for the filters + */ + this.citiesandcounties.getCounties().subscribe((response: any) => { + const aux = response; + aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id); + this.locationFilterValues = aux; + }); + this.filterService.getCategoryFilters().subscribe((data) => { + this.categoryFilterValues = data.map((x: any) => { + const parent = data.find((y: any) => y._id === x.parent_id); + return { + id: x._id, + name: x.name, + parent_id: x.parent_id, + pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null), + level: x.parent_id === '0' ? 0 : 1 + }; + }); + }); + this.filterService.getSpecializationFilters().subscribe((data) => { + this.specializationFilterValues = data.map((elem: any) => { + return {id: elem._id, name: elem.name}; + }); + }); + /** + * get current id, init pager, and get all data with the id + */ + this.ngoid = this.route.snapshot.paramMap.get('id'); + this.volunteerPager = this.organisationService.getVolunteerPager(); + this.resourcePager = this.organisationService.getResourcePager(); + this.getData(); + this.getResources(); + this.getVolunteers(); + } + /** + * switch tab of necessary + */ + ngAfterContentChecked() { + if (this.tabRef.tabs) { + this.tabRef.select(this.selectedTab); + } + } + /** + * get org data + */ + getData() { + this.organisationService.getorganisation(this.ngoid).subscribe(data => { + this.data = data; + this.navigationExtras = { + state: { + ngo: { + name: data.name, + _id: this.ngoid + } + } + }; + }); + } + /** + * get volunteers data + */ + getVolunteers() { + this.organisationService.getVolunteersbyorganisation(this.ngoid, this.volunteerPager).subscribe(data => { + this.volunteerPager.total = data.pager.total; + this.volunteersData = data.data; + if (!!data.data.courses) { + data.data.courses = data.data.courses.reverse(); + } + if (Object.entries(this.volunteerPager.filters).length === 0 && this.volunteerPager.filters.constructor === Object) { + if (this.volunteersData.length === 0) { + this.hasVolunteers = false; + } else { + this.hasVolunteers = true; + this.nrvol = data.pager.total; + } + } else { + this.hasVolunteers = true; + } + }); + } + /** + * view details about resource by slug if DSU and by id if NGO + * @param {any} res the resource to be viewed + */ + viewdetails(res: any) { + if (this.authService.is('DSU')) { + this.router.navigateByUrl(`/resources/name/${res.slug}`); + } else { + this.router.navigateByUrl(`/resources/id/${res.resources[0]._id}`); + } + } + /** + * get resourcesData + */ + getResources() { + this.organisationService.getResourcesbyorganisation(this.ngoid, this.resourcePager).subscribe(data => { + this.resourcePager.total = data.pager.total; + this.resourceData = data.data; + if (Object.entries(this.volunteerPager.filters).length === 0 && + this.volunteerPager.filters.constructor === Object && + this.resourceData.length === 0) { + + this.hasResources = false; + } else { + this.hasResources = true; + } + }); + } + /** + * resource filter callback. Filters added to pager and then a request is made + * @param {number} id the index in the pager filters and filters Selected array + */ + resourcefilterChanged(id: number) { + this.resourcePager.filters[id] = this.resourceFiltersSelected[id].map((elem: any) => elem.id).join(','); + this.getResources(); + } +/** + * volunteer filter callback. Filters added to pager and then a request is made + * @param {number} id the index in the pager filters and filters Selected array + */ + volunteerfilterChanged(id: number) { + this.volunteerPager.filters[id] = this.volunteerFiltersSelected[id].map((elem: any) => elem.id).join(','); + this.getVolunteers(); + } + deleteRes(id: string) { + this.resourceService.deleteResource(id).subscribe(resp => { + this.getResources(); + }); + } + /** + * delete NGO + */ + deleteSelf() { + if (this.authService.user._id === this.data._id) { + if (confirm('Sunteți sigur că doriți să vă ștergeți contul?')) { + this.loading = true; + this.organisationService.deleteorganisation(this.ngoid).subscribe(data => { + this.loading = false; + this.authService.setCredentials(); + this.router.navigateByUrl('/login'); + }, () => { + this.location.back(); + }); + } + } else { + if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) { + this.loading = true; + this.organisationService.deleteorganisation(this.ngoid).subscribe(data => { + this.loading = false; + this.router.navigateByUrl('/organisations'); + }, () => { + this.loading = false; + }); + } + } + } + /** + * navigate to add resource with ngo data + */ + addresource() { + this.router.navigateByUrl('/resources/add', this.navigationExtras); + } + /** + * navigate to add volunteer with ngo data + */ + addvolunteer() { + this.router.navigateByUrl('/volunteers/add', this.navigationExtras); + } + /** + * sort callback for volunteers table + */ + volunteerSortChanged(pager: any) { + this.volunteerPager = pager; + this.getVolunteers(); + } + /** + * sort callback for resource table + */ + resourceSortChanged(pager: any) { + this.resourcePager = pager; + this.getResources(); + } +/** + * search callback for both tabels + */ + searchChanged(pager: any) { + if (pager.search !== '') { + if (this.selectedTab === 'volunteers') { + this.volunteerPager = pager; + this.getVolunteers(); + } else { + this.resourcePager = pager; + this.getResources(); + } + } + } + /** + * send manual notification and trigger popup + */ + sendNotification() { + this.organisationService.sendUpdateDataEmail(this.ngoid).subscribe(() => { + this.messageSent = true; + setTimeout(() => this.close(), 5000); + }); + } + /** + * send info updated and trigger popup + */ + validateinfo() { + this.organisationService.updated(this.ngoid).subscribe(() => { + this.updateSent = true; + this.needupdate = false; + setTimeout(() => this.close(), 5000); + }); + } + /** + * manual close for message send popup + */ + close() { + this.messageSent = false; + this.updateSent = false; + } + /** + * expand volunteer specialization row for a specific volunteer + * @param {string} volunteerId of the current voluneer that is referenced + * @param {boolean} status is open or is cloed + */ + openMenu(volunteerId: string, status: boolean) { + if (status) { + this.currentVolunteerId = volunteerId; + } else { + this.currentVolunteerId = null; + } + } + + canEdit() { + if (this.data) { + return this.authService.is('DSU') || (this.authService.is('NGO') && this.data._id === this.authService.user.organisation._id); + } else { + return false; + } + } +} diff --git a/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.html b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.html new file mode 100644 index 0000000..e3cc094 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.html @@ -0,0 +1,120 @@ +
                                                                                                                                                + +

                                                                                                                                                Modifică organizația:

                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.website.errors.website}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * Trebuie să alegeți un tip. +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.email.errors.email}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.phone.errors.phone}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.scss b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.scss new file mode 100644 index 0000000..63409cd --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.scss @@ -0,0 +1,3 @@ +.form-group{ + margin:0; +} \ No newline at end of file diff --git a/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.spec.ts b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.spec.ts new file mode 100644 index 0000000..ea83450 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { OrganisationEditComponent } from './organisation-edit.component'; + +describe('OrganisationEditComponent', () => { + let component: OrganisationEditComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ OrganisationEditComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(OrganisationEditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.ts b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.ts new file mode 100644 index 0000000..a65e88e --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisation-edit/organisation-edit.component.ts @@ -0,0 +1,221 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { + FormGroup, + Validators, + FormBuilder +} from '@angular/forms'; +import { OrganisationService } from '../../../organisations.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service'; +import { Subject } from 'rxjs/internal/Subject'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { Observable } from 'rxjs/internal/Observable'; +import { + debounceTime, + distinctUntilChanged, + filter, + map, + switchMap +} from 'rxjs/operators'; +import { merge } from 'rxjs'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; +import { WebsiteValidation } from '@app/core/validators/website-validation'; +import { Location } from '@angular/common'; +import { LocationValidation } from '@app/core/validators/location-validation'; +import { UtilService, UsersService } from '@app/core'; + +@Component({ + selector: 'app-organisation-edit', + templateUrl: './organisation-edit.component.html', + styleUrls: ['./organisation-edit.component.scss'] +}) + +export class OrganisationEditComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + + /** + * placeholder for disabled city field + */ + cityPlaceholder = 'Selectați mai întâi județul'; + + /** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance1: NgbTypeahead; + focus1$ = new Subject(); + click1$ = new Subject(); + + @ViewChild('instance', { static: true }) instance2: NgbTypeahead; + focus2$ = new Subject(); + click2$ = new Subject(); + /** + * flag for HTML to display loading animation + */ + loading = false; + loadingCities = false; + /** + * list of cities to pe parsed. edited when the user selects a county or edits this NGO + */ + cities: any[] = []; + + constructor( + private route: ActivatedRoute, + private organisationService: OrganisationService, + private utilService: UtilService, + private userService: UsersService, + private location: Location, + private citiesandCounties: CitiesCountiesService, + private fb: FormBuilder) { } + + ngOnInit() { + /** + * build form because otherwise the frontend will crash before the {@link getOrganisationDetails} ends + */ + this.form = this.fb.group({ + name: ['', [Validators.required]], + website: ['', [Validators.required, WebsiteValidation.websiteValidation]], + contact_person: ['', Validators.required], + phone: ['', [Validators.required, PhoneValidation.phoneValidation]], + address: [''], + cover: [''], + email: ['', [Validators.required, EmailValidation.emailValidation]], + county: ['', [Validators.required, LocationValidation.locationValidation]], + city: [{value: '', disabled: true }, [Validators.required, ]], + comments: [''] + }); + this.getOrganisationDetails(this.route.snapshot.paramMap.get('id')); + } + /** + * formatter to extract name from object and display in input + */ + formatter = (result: { name: string }) => result.name; + /** + * get the details of the organisation when edititing + * @param {string} id of the edited NGO + */ + getOrganisationDetails(ngoId: string) { + if (ngoId) { + this.organisationService.getorganisation(ngoId).subscribe(data => { + this.form = this.fb.group({ + name: [data.name ], + cover: [data.cover], + website: [data.website, [Validators.required, WebsiteValidation.websiteValidation]], + contact_person: [data.contact_person.name, Validators.required], + phone: [data.contact_person.phone, [Validators.required, PhoneValidation.phoneValidation]], + address: [data.address], + email: [data.contact_person.email, [Validators.required, EmailValidation.emailValidation]], + county: ['', [Validators.required, LocationValidation.locationValidation]], + city: ['', [Validators.required]], + comments: [data.comments] + }); + this.selectedCounty({item: data.county}); + this.selectedCity({item: data.city}); + }); + } + } + /** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcounty = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click1$.pipe( + filter(() => !this.instance1.isPopupOpen()) + ); + const inputFocus$ = this.focus1$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => this.citiesandCounties.getCounties(term)) + ); + } + /** + * trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities + * @param {Observable} text observable event with the filter text + */ + searchcity = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click2$.pipe( + filter(() => !this.instance2.isPopupOpen()) + ); + const inputFocus$ = this.focus2$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + map((term: string) => { + if (term === '') { + return this.cities; + } else { + return this.cities.filter(v => { + const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase(); + return aux.indexOf(term.toLowerCase()) > -1; + }).slice(0, 20); + } + })); + } + /** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCounty(val: any) { + this.form.controls.county.markAsTouched(); + if (val.item && val.item._id) { + this.form.patchValue({county: val.item}); + this.loadingCities = true; + this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => { + this.cities = res; + this.cityPlaceholder = 'Alegeți Orașul'; + this.loadingCities = false; + this.form.controls.city.enable(); + }); + } else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) { + this.form.patchValue({county: '', city: ''}); + } + } + + /** + * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection + * @param {any} event to be verified for which key has been pressed + */ + countykey(event: any) { + this.form.controls.county.markAsTouched(); + if (event.code !== 'Enter') { + this.cities = []; + this.form.controls.city.disable(); + this.form.controls.city.reset(''); + this.cityPlaceholder = 'Selectați mai întâi județul'; + } + } + /** + * trigger for select city from city typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCity(val: { item: any }) { + this.form.controls.city.markAsTouched(); + this.form.patchValue({city: val.item}); + } + + /** + * Process form values and send data to server. If success close page + */ + onSubmit() { + const ngoid = this.route.snapshot.paramMap.get('id'); + this.loading = true; + const ngo = this.form.value; + ngo.city = ngo.city._id; + ngo.county = ngo.county._id; + + this.organisationService.editOrganisation(ngoid, this.form.value).subscribe(() => { + this.loading = false; + this.location.back(); + }, () => { + this.loading = false; + }); + } +} diff --git a/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.html b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.html new file mode 100644 index 0000000..a4656e8 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.html @@ -0,0 +1,153 @@ +
                                                                                                                                                + +
                                                                                                                                                + Total: {{pager.total}} +    + Filtrează după:   + + +   + + +   + + +   + + + + {{option.name}} + + + +
                                                                                                                                                + + + + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                + Nume + Locație + Nr. Voluntari + Nr. Resurse
                                                                                                                                                {{res.name}}{{res.city?.name}}, {{res.county?.name}}{{res.volunteers}}{{res.resources}}
                                                                                                                                                + + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.scss b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.scss new file mode 100644 index 0000000..d01f0ae --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.scss @@ -0,0 +1,51 @@ +.card{ + background-color: transparent; + margin: 10px; +} + +.card-body{ + padding: 0.25rem; + background-color:white; +} + +@media (max-width: 425px) { + .container { + width: 100%; + max-width: none; + } + } + +@media (max-width: 1199px){ + .btn-adjusting{ + width: min-content; + } +} + + +.filters { + .padding-rem { + padding: 0.375rem 0.75rem + } + + .vertical-bar { + background-color: #67757c; + width: 2px; + margin-left: 10px; + margin-right: 10px; + } +} +::ng-deep .specialization{ + .none-selected:before{ + content:'Specializări' !important; + } +} +::ng-deep .category{ + .none-selected:before { + content: 'Categorie' !important; + } +} +::ng-deep .type{ + .none-selected:before { + content: 'Acoperire' !important; + } +} diff --git a/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.spec.ts b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.spec.ts new file mode 100644 index 0000000..d44983a --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { OrganisationsDashboardComponent } from './organisations-dashboard.component'; + +describe('OrganisationsDashboardComponent', () => { + let component: OrganisationsDashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [OrganisationsDashboardComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(OrganisationsDashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.ts b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.ts new file mode 100644 index 0000000..1e46412 --- /dev/null +++ b/src/app/pages/organisations/organisations/components/organisations-dashboard/organisations-dashboard.component.ts @@ -0,0 +1,169 @@ +import { Component, OnInit } from '@angular/core'; +import { OrganisationService } from '../../../organisations.service'; +import { BreakpointObserver } from '@angular/cdk/layout'; +import { FiltersService, CitiesCountiesService } from '@app/core'; +import { Router, NavigationExtras } from '@angular/router'; +@Component({ + selector: 'app-organisations-dashboard', + templateUrl: './organisations-dashboard.component.html', + styleUrls: ['./organisations-dashboard.component.scss'] +}) +export class OrganisationsDashboardComponent implements OnInit { + ngosData: any = []; + pager: any = {}; + /** + * flag to indicate use of list or grid display + */ + displayBlock = true; + /** + * selected values in the filters. Array of array of {id, name} objects + */ + selected = Array(4); + + /** + * values to be displayed in filter menus + */ + categoryFilterValues: any[]; + typeFilterValues = [{id: 'Națională', name: 'Națională'}, {id: 'Locală', name: 'Locală'}]; + specializationFilterValues: any[]; + locationFilterValues: any[]; + /** + * mapping of object keys to filter recognizable keys + */ + propertyMap = { + '_id': 'id', + 'parent_id': 'parent_id' + }; + constructor( + private organisationService: OrganisationService, + public breakpointObserver: BreakpointObserver, + private filterService: FiltersService, + private citiesandcounties: CitiesCountiesService, + private router: Router + ) {} + + + ngOnInit() { + this.organisationService.setPager(); + /** + * get and store filter values + */ + this.citiesandcounties.getCounties('').subscribe((response: any) => { + const aux = response; + aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id); + this.locationFilterValues = aux; + }); + + this.filterService.getSpecializationFilters().subscribe((data) => { + this.specializationFilterValues = data.map((elem: any) => { + return {id: elem._id, name: elem.name}; + }); + }); + this.filterService.getCategoryFilters().subscribe((data) => { + this.categoryFilterValues = data.map((x: any) => { + const parent = data.find((y: any) => y._id === x.parent_id); + return { + id: x._id, + name: x.name, + parent_id: x.parent_id, + pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null), + level: x.parent_id === '0' ? 0 : 1 + }; + }); + }); + this.pager = this.organisationService.getPager(); + + this.getData(); + + /** + * subscribe to screen size in order to use list instead of grid for display + */ + this.breakpointObserver + .observe(['(max-width: 768px)']) + .subscribe(result => { + if (result.matches) { + this.switchtoblock(); + } + }); + } + /** + * sort callback + * @param {any} Pager pager is modified by external componet and passed as param + */ + sortChanged(pager: any) { + this.pager = pager; + this.getData(); + } + /** + * search callback + * @param {any} Pager pager is modified by external componet and passed as param + */ + searchChanged(pager: any) { + this.pager = pager; + this.getData(); + } + /** + * get ngo list with filters in pager + */ + getData() { + this.organisationService.getorganisations(this.pager).subscribe(element => { + this.ngosData = element.data.map((elem: any) => { + elem.nr_vol = 0; + elem.nr_res = 0; + return elem; + }); + this.pager.total = element.pager.total; + }); + } + /** + * muliselect filter callback + * @param {number} id the index in the pager filters and filters selected array + */ + filterChanged(id?: number) { + this.pager.filters[id] = this.selected[id].map((elem: any) => elem.id).join(','); + this.getData(); + } + /** + * single select filter callback + * @param {number} id the index in the pager filters and filters selected array + */ + singleFilterChanged(id?: number) { + + if (this.selected[id]) { + this.pager.filters[id] = this.selected[id].id; + } else { + this.pager.filters[id] = null; + } + console.log(this.pager.filters[id]); + this.getData(); + } + + /** + * set class of display element with list view + */ + switchtolist() { + this.displayBlock = false; + } + + /** + * set class of display element with grid view + */ + switchtoblock() { + this.displayBlock = true; + } + /** + * navigate to NGO details page with specific tab open + * @param {string} id the id of the organization to be show + * @param {string} property the tab that needs to be open on page load + * @param {number} e suppresed default event + */ + showOrganisationDetails(id: string, property: string, e: any) { + e.preventDefault(); + const navigationExtras: NavigationExtras = { + state: { + tabName: property + } + }; + this.router.navigateByUrl('/organisations/id/' + id, navigationExtras); + } +} diff --git a/src/app/pages/organizations/organizations/organizations.component.html b/src/app/pages/organisations/organisations/organisations.component.html similarity index 100% rename from src/app/pages/organizations/organizations/organizations.component.html rename to src/app/pages/organisations/organisations/organisations.component.html diff --git a/src/app/pages/organisations/organisations/organisations.component.scss b/src/app/pages/organisations/organisations/organisations.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/organisations/organisations/organisations.component.spec.ts b/src/app/pages/organisations/organisations/organisations.component.spec.ts new file mode 100644 index 0000000..d07bbad --- /dev/null +++ b/src/app/pages/organisations/organisations/organisations.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { OrganisationsComponent } from './organisations.component'; + +describe('OrganisationsComponent', () => { + let component: OrganisationsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ OrganisationsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(OrganisationsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/organisations/organisations/organisations.component.ts b/src/app/pages/organisations/organisations/organisations.component.ts new file mode 100644 index 0000000..837befd --- /dev/null +++ b/src/app/pages/organisations/organisations/organisations.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-organisations', + templateUrl: './organisations.component.html', + styleUrls: ['./organisations.component.scss'] +}) + +export class OrganisationsComponent implements OnInit { +/** + * wrapper for the organisations pages. acts as frame + */ + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/pages/organizations/organizations.module.ts b/src/app/pages/organizations/organizations.module.ts deleted file mode 100644 index 43c1d76..0000000 --- a/src/app/pages/organizations/organizations.module.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { OrganizationsComponent } from './organizations/organizations.component'; -import { NgodashboardComponent } from './organizations/components/ngodashboard/ngodashboard.component'; -import { NgoaddComponent } from './organizations/components/ngoadd/ngoadd.component'; -import { NgodetailsComponent } from './organizations/components/ngodetails/ngodetails.component'; -import { OrganizationService } from './organizations.service'; -import { OrganizationsRoutingModule } from './organizations.routing'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { NgbTabsetModule, NgbRadioGroup, NgbButtonsModule } from '@ng-bootstrap/ng-bootstrap'; - -@NgModule({ - declarations: [ - OrganizationsComponent, - NgodetailsComponent, - NgoaddComponent, - NgodashboardComponent, - ], - imports: [ - NgbTabsetModule, - NgbButtonsModule, - FormsModule, - ReactiveFormsModule, - CommonModule, - OrganizationsRoutingModule, - ], - entryComponents: [ - - ], - providers: [ - OrganizationService - ] -}) - -export class OrganizationsModule { - -} diff --git a/src/app/pages/organizations/organizations.routing.ts b/src/app/pages/organizations/organizations.routing.ts deleted file mode 100644 index e75917e..0000000 --- a/src/app/pages/organizations/organizations.routing.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { OrganizationsComponent } from './organizations/organizations.component'; -import { NgodashboardComponent } from './organizations/components/ngodashboard/ngodashboard.component'; -import { NgoaddComponent } from './organizations/components/ngoadd/ngoadd.component'; -import { NgodetailsComponent } from './organizations/components/ngodetails/ngodetails.component'; -const routes: Routes = [ - { - path: '', - component: OrganizationsComponent, - children: [ - { - path: '', - component: NgodashboardComponent, - }, - { - path: 'add', - component: NgoaddComponent, - }, - { - path: 'id/:id', - component: NgodetailsComponent, - }, - ] - } -]; - -@NgModule({ - exports: [RouterModule], - imports: [RouterModule.forChild(routes)] -}) -export class OrganizationsRoutingModule { - -} diff --git a/src/app/pages/organizations/organizations.service.ts b/src/app/pages/organizations/organizations.service.ts deleted file mode 100644 index 6387c92..0000000 --- a/src/app/pages/organizations/organizations.service.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' - }) -export class OrganizationService { - fields = [ - { - key: 'nume', - label: 'Nume Organizatie', - required: true, - value: '', - size: 'col-md-4', - controlType: 'textbox' - }, - { - key: 'website', - label: 'Website Organizatie', - required: true, - value: '', - size: 'col-md-5', - controlType: 'textbox' - }, - { - key: 'perscontact', - label: 'Persoana de contact', - required: true, - value: '', - size: 'col-md-4 mt-5', - controlType: 'textbox' - }, - { - key: 'email', - label: 'Email', - type: 'email', - required: true, - value: '', - size: 'col-md-4 mt-5', - controlType: 'textbox' - }, - { - key: 'telefon', - label: 'Numar de Telefon', - required: true, - value: '', - size: 'col-md-4 mt-5', - controlType: 'textbox' - }, - { - key: 'judet', - label: 'Judet', - options: [ - {key: 'Alba', value: 'Alba'}, - {key: 'Arad', value: 'Arad'}, - {key: 'Bacau', value: 'Bacau'}, - {key: 'Bihor', value: 'Bihor'} - ], - value: '', - size: 'col-md-4 mt-5', - controlType: 'dropdown' - }, - { - key: 'oras', - label: 'Oras', - options: [ - {key: 'Alba iulia', value: 'Alba Iulia'}, - {key: 'Arad', value: 'Arad'}, - {key: 'Bacau', value: 'Bacau'}, - {key: 'Oradea', value: 'Oradea'} - ], - value: '', - size: 'col-md-4 mt-5', - controlType: 'dropdown' - }, - { - key: 'Adresa', - label: 'Adresa', - required: true, - value: '', - size: 'col-md-4 mt-5', - controlType: 'textbox' - }, - { - key: 'Comentarii', - label: 'Comentarii', - value: '', - size: 'col-md-12 mt-5', - controlType: 'textarea' - } - ]; - data = [ - { - 'id': '1', - 'Adresa': 'St. N. Olahus nr.2', - 'Comentarii': '', - 'email': 'contact@habitat.com', - 'judet': 'Bihor', - 'nume': 'Habitat for Humanity', - 'oras': 'Oradea', - 'perscontact': 'fds', - 'telefon': '+40735980076', - 'website': 'dfs' - }, - { - 'id': '2', - 'Adresa': 'St. N. Olahus nr.2', - 'Comentarii': '', - 'email': 'contact@crucearosie.com', - 'judet': 'Bihor', - 'nume': 'Crucea Rosie', - 'oras': 'Oradea', - 'perscontact': 'fds', - 'telefon': '+40735980076', - 'website': 'dfs' - }, - { - 'id': '3', - 'Adresa': 'St. N. Olahus nr.2', - 'Comentarii': '', - 'email': 'contact@rise.com', - 'judet': 'Bihor', - 'nume': 'Re:Rise', - 'oras': 'Oradea', - 'perscontact': 'fds', - 'telefon': '+40735980076', - 'website': 'dfs' - }, - { - 'id': '4', - 'Adresa': 'St. N. Olahus nr.2', - 'Comentarii': '', - 'email': 'contact@magicamp.com', - 'judet': 'Bihor', - 'nume': 'Magicamp', - 'oras': 'Oradea', - 'perscontact': 'fds', - 'telefon': '+40735980076', - 'website': 'dfs' - } - ]; - - getFields() { - return this.fields; - } - addToData(element: any) { - this.data.push(element); - } - getData() { - return this.data; - } - getOne(id: String) { - console.log(id); - - const returnval: any = this.data.filter(elem => elem.id === id)[0]; - returnval.status = 'activa'; - returnval.voluntari = '123'; - returnval.acoperire = 'nationala'; - returnval.data = '07/10/2018'; - return returnval; - } -} diff --git a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.html b/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.html deleted file mode 100644 index 28ba88f..0000000 --- a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.html +++ /dev/null @@ -1,33 +0,0 @@ - diff --git a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.ts b/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.ts deleted file mode 100644 index 0e5c399..0000000 --- a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { FormGroup, FormControl, Validators } from '@angular/forms'; -import { OrganizationService } from '@app/pages/organizations/organizations.service'; -import { Router } from '@angular/router'; - -@Component({ - selector: 'app-ngoadd', - templateUrl: './ngoadd.component.html', - styleUrls: ['./ngoadd.component.scss'] -}) -export class NgoaddComponent implements OnInit { - form: FormGroup; - isValid = true; - data: any; - - constructor(public organizationService: OrganizationService, private router: Router) { } - - ngOnInit() { - this.form = this.toFormGroup(); - } - toFormGroup() { - const group: any = {}; - this.data = this.organizationService.getFields(); - this.data.forEach((question: any ) => { - group[question.key] = question.required ? new FormControl(question.value || '', Validators.required) - : new FormControl(question.value || ''); - }); - return new FormGroup(group); - } - onSubmit() { - this.organizationService.addToData(this.form.value); - this.navigateToDashboard(); - } - navigateToDashboard() { - this.router.navigate(['organizations']); - } -} diff --git a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.html b/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.html deleted file mode 100644 index 74748f5..0000000 --- a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.html +++ /dev/null @@ -1,41 +0,0 @@ -
                                                                                                                                                - - - -
                                                                                                                                                diff --git a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.scss b/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.scss deleted file mode 100644 index 76f7db4..0000000 --- a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.scss +++ /dev/null @@ -1,31 +0,0 @@ -.cardlist{ - // background-color: darkblue; -} -.card{ - background-color: transparent; - margin: 10px; -} -.card-body{ - padding: 0.25rem; - background-color:white; -} -@media (max-width: 425px) { - .container { - width: 100%; - max-width: none; - } - } - -.btn-group{ - height: 47px; - .btn-primary{ - background: white; - color: black; - border:none; - } - .btn-primary.focus{ - background-color:blue; - color: white; - box-shadow: none - } -} \ No newline at end of file diff --git a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.spec.ts b/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.spec.ts deleted file mode 100644 index 7a9fbfa..0000000 --- a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NgodashboardComponent } from './ngodashboard.component'; - -describe('NgodashboardComponent', () => { - let component: NgodashboardComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ NgodashboardComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(NgodashboardComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.ts b/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.ts deleted file mode 100644 index 3816f7a..0000000 --- a/src/app/pages/organizations/organizations/components/ngodashboard/ngodashboard.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { OrganizationService } from '@app/pages/organizations/organizations.service'; - -@Component({ - selector: 'app-ngodashboard', - templateUrl: './ngodashboard.component.html', - styleUrls: ['./ngodashboard.component.scss'] -}) -export class NgodashboardComponent implements OnInit { - - constructor(private organizationService: OrganizationService) { } - data: any[] = []; - model = 'block'; - ngOnInit() { - this.data = this.organizationService.getData(); - console.log(this.data); - } - -} diff --git a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.html b/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.html deleted file mode 100644 index 2bfdef2..0000000 --- a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.html +++ /dev/null @@ -1,40 +0,0 @@ - - diff --git a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.scss b/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.scss deleted file mode 100644 index 9932324..0000000 --- a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.scss +++ /dev/null @@ -1,18 +0,0 @@ - -.px-15{ - padding-left:15px; - padding-right:15px; -} -::ng-deep .resource-list{ - margin-top:15px; - .nav-item .nav-link.active{ - color:blue; - text-decoration: underline; - background-color: transparent; - } - .nav-item .nav-link{ - color:gray; - text-decoration: underline; - background-color: transparent; - } -} \ No newline at end of file diff --git a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.spec.ts b/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.spec.ts deleted file mode 100644 index 96cf4f4..0000000 --- a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NgodetailsComponent } from './ngodetails.component'; - -describe('NgodetailsComponent', () => { - let component: NgodetailsComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ NgodetailsComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(NgodetailsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.ts b/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.ts deleted file mode 100644 index 45f1903..0000000 --- a/src/app/pages/organizations/organizations/components/ngodetails/ngodetails.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { OrganizationService } from '@app/pages/organizations/organizations.service'; - -@Component({ - selector: 'app-ngodetails', - templateUrl: './ngodetails.component.html', - styleUrls: ['./ngodetails.component.scss'] -}) -export class NgodetailsComponent implements OnInit { - data: any; - constructor(private route: ActivatedRoute, - private router: Router, - private organizationService: OrganizationService) { } - - ngOnInit() { - this.data = this.organizationService.getOne(this.route.snapshot.paramMap.get('id')); - - } - -} diff --git a/src/app/pages/organizations/organizations/organizations.component.spec.ts b/src/app/pages/organizations/organizations/organizations.component.spec.ts deleted file mode 100644 index d2418ef..0000000 --- a/src/app/pages/organizations/organizations/organizations.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { OrganizationsComponent } from './organizations.component'; - -describe('OrganizationsComponent', () => { - let component: OrganizationsComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ OrganizationsComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(OrganizationsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/pages/organizations/organizations/organizations.component.ts b/src/app/pages/organizations/organizations/organizations.component.ts deleted file mode 100644 index 24456dd..0000000 --- a/src/app/pages/organizations/organizations/organizations.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-organizations', - templateUrl: './organizations.component.html', - styleUrls: ['./organizations.component.scss'] -}) -export class OrganizationsComponent implements OnInit { - - constructor() { } - - ngOnInit() { - } - -} diff --git a/src/app/pages/resources/resources.module.ts b/src/app/pages/resources/resources.module.ts index 6cd46e4..49b010d 100644 --- a/src/app/pages/resources/resources.module.ts +++ b/src/app/pages/resources/resources.module.ts @@ -2,21 +2,45 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ResourcesComponent } from './resources/resources.component'; import { ResourcesRoutingModule } from './resources.routing'; +import { ResourcesdashboardComponent } from './resources/components/resources-dashboard/resources-dashboard.component'; +import { ResourcedetailsComponent } from './resources/components/resource-details/resource-details.component'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { ResourcesService } from './resources.service'; +import { SharedModule } from '../../shared/shared.module'; +import { SelectDropDownModule } from 'custom-select-dropdown'; +import { AddResourceComponent } from './resources/components/add-resource/add-resource.component'; +import { NgxMultiselectModule } from '@ngx-lib/multiselect'; +import { ImportResourcesComponent } from './resources/components/import-resources/import-resources.component'; +import { ResourceListComponent } from './resources/components/resource-list/resource-list.component'; +import { EditResourceComponent } from './resources/components/edit-resource/edit-resource.component'; @NgModule({ - declarations: [ - ResourcesComponent - ], - imports: [ - CommonModule, - ResourcesRoutingModule, - ], - entryComponents: [ - - ], - providers: [ - //OrganizationService - ] - }) + declarations: [ + ResourcesComponent, + ImportResourcesComponent, + ResourcesdashboardComponent, + ResourcedetailsComponent, + AddResourceComponent, + ResourceListComponent, + EditResourceComponent, + ], + imports: [ + NgxMultiselectModule, + SelectDropDownModule, + NgbModule, + CommonModule, + FormsModule, + ReactiveFormsModule, + ResourcesRoutingModule, + SharedModule, + + ], + entryComponents: [ + ], + providers: [ + ResourcesService, + ] + }) export class ResourcesModule { } diff --git a/src/app/pages/resources/resources.routing.ts b/src/app/pages/resources/resources.routing.ts index 01ea14a..e0d2f7b 100644 --- a/src/app/pages/resources/resources.routing.ts +++ b/src/app/pages/resources/resources.routing.ts @@ -1,16 +1,61 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import {ResourcesComponent } from './resources/resources.component'; +import { ResourcesdashboardComponent } from './resources/components/resources-dashboard/resources-dashboard.component'; +import { ResourcedetailsComponent } from './resources/components/resource-details/resource-details.component'; +import { AddResourceComponent } from './resources/components/add-resource/add-resource.component'; +import { RoleGuard } from '@app/core'; +import { ImportResourcesComponent } from './resources/components/import-resources/import-resources.component'; +import { ResourceListComponent } from './resources/components/resource-list/resource-list.component'; +import { EditResourceComponent } from './resources/components/edit-resource/edit-resource.component'; const routes: Routes = [ - { - path: '', - component: ResourcesComponent, - } + { + path: '', + component: ResourcesComponent, + children: [ + { + path: '', + component: ResourcesdashboardComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'edit/:id', + component: EditResourceComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'id/:id', + component: ResourcedetailsComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'name/:id', + component: ResourceListComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU']} + }, + { + path: 'add', + component: AddResourceComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'import', + component: ImportResourcesComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + } + ] + } ]; @NgModule({ - exports: [RouterModule], - imports: [RouterModule.forChild(routes)] + exports: [RouterModule], + imports: [RouterModule.forChild(routes)] }) export class ResourcesRoutingModule { diff --git a/src/app/pages/resources/resources.service.ts b/src/app/pages/resources/resources.service.ts new file mode 100644 index 0000000..bce4d03 --- /dev/null +++ b/src/app/pages/resources/resources.service.ts @@ -0,0 +1,140 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/internal/Observable'; +import { HttpHeaders, HttpClient } from '@angular/common/http'; +import { map } from 'rxjs/internal/operators/map'; +@Injectable({ + providedIn: 'root' + }) +export class ResourcesService { + constructor(private httpClient: HttpClient) {} +/** + * pager for resources table + */ + pager: any = { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + }; +/** + * get the resource pager + * @returns pager + */ + getPager() { + return {...this.pager}; + } + /** + * init pager with default values + */ + setPager() { + this.pager = { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + }; + } + + /** + * get all Resources + * @param {any} pager with sorting, filters, page etc + * @returns observable with resources list + */ + getResources(paginationObj?: any): Observable { + let params: any = {}; + + params = {...params, ...paginationObj}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + + return this.httpClient.get('/resources', { params: params }); + } + /** + * get resource by id + * @param {string} id of the resource to be fetched + * @param {any} pager with sorting, filters, page etc + * @returns observable with response resource + */ + getResource(id: String, paginationObj?: any): Observable { + let params: any = {}; + + params = {...params, ...paginationObj}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + + return this.httpClient.get(`/resources/${id}`, { params: params } ); + } + /** + * post a new resource to website, auto add Header + * @param {any} payload the org data to be added + * @returns observable with response + */ + addResource(payload: any) { + return this.httpClient.post('/resources', payload ); + } + /** + * delete resource by id + * @param {string} id of the resource to be deleted + * @returns observable with response + */ + deleteResource(id: any) { + return this.httpClient.delete(`/resources/${id}`); + } + /** + * edit a resource + * @param {any} payload the resource data to be modified + * @param {string} id of the resource to be modified + * @returns observable with response + */ + editResource(id: string, payload: any) { + return this.httpClient.put(`/resources/${id}`, payload ); + } + /** + * send CSV and organisation id to server + * @param {string} id of the organisation to be modfified + * @param {any} file with CSV data + * @returns observable with response resource + */ + importCsv(file: any, id: any) { + const formdata: FormData = new FormData(); + formdata.append('file', file); + formdata.append('organisation_id', id); + return this.httpClient.post('/resources/import', formdata); + } + /** + * get resource by slug + * @param {string} slug name without diacritics the resource to be fetched + * @param {any} pager with sorting, filters, page etc + * @returns observable with response resource + */ + getResourceBySlug(slug: string, pager: any) { + let params: any = {}; + + params = {...params, ...pager}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + return this.httpClient.get(`/resources/by_slug/${slug}`, {params: params}); + } +} diff --git a/src/app/pages/resources/resources/components/add-resource/add-resource.component.html b/src/app/pages/resources/resources/components/add-resource/add-resource.component.html new file mode 100644 index 0000000..2ad9598 --- /dev/null +++ b/src/app/pages/resources/resources/components/add-resource/add-resource.component.html @@ -0,0 +1,134 @@ +
                                                                                                                                                + +

                                                                                                                                                Adaugă o resursă:

                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * Cantitatea trebuie să + fie mai mare decât 0. +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + * Trebuie sa + alegeți un tip. +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/add-resource/add-resource.component.scss b/src/app/pages/resources/resources/components/add-resource/add-resource.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/resources/resources/components/add-resource/add-resource.component.spec.ts b/src/app/pages/resources/resources/components/add-resource/add-resource.component.spec.ts new file mode 100644 index 0000000..18313ec --- /dev/null +++ b/src/app/pages/resources/resources/components/add-resource/add-resource.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddResourceComponent } from './add-resource.component'; + +describe('AddResourceComponent', () => { + let component: AddResourceComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AddResourceComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddResourceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/resources/resources/components/add-resource/add-resource.component.ts b/src/app/pages/resources/resources/components/add-resource/add-resource.component.ts new file mode 100644 index 0000000..9194f28 --- /dev/null +++ b/src/app/pages/resources/resources/components/add-resource/add-resource.component.ts @@ -0,0 +1,279 @@ +import { Component, OnInit, Input, ViewChild } from '@angular/core'; +import { + FormGroup, + FormControl, + Validators, + FormBuilder +} from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service'; +import { Subject } from 'rxjs/internal/Subject'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { Observable } from 'rxjs/internal/Observable'; +import { + debounceTime, + distinctUntilChanged, + filter, + map, + switchMap +} from 'rxjs/operators'; +import { merge } from 'rxjs'; +import { ResourcesService } from '@app/pages/resources/resources.service'; +import { AuthenticationService, FiltersService, UtilService } from '@app/core'; +import { Location } from '@angular/common'; +import { LocationValidation } from '@app/core/validators/location-validation'; + +@Component({ + selector: 'app-add-resource', + templateUrl: './add-resource.component.html', + styleUrls: ['./add-resource.component.scss'] +}) +export class AddResourceComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + /** + * flag -> if user is editing then method is PUT, else POST + */ + edit = false; + res: any; + /** + * list of items to select from. + */ + cities: any[] = []; + categories: any[] = []; + subCategories: any[] = []; + /** + * flag -> if information is beeing loaded show loader elements in frontend + */ + loading = false; + loadingCities = false; + + /** + * placeholders for HTML + */ + cityPlaceholder = 'Selectați mai întâi județul'; + resourcePlaceholder = 'Selectați mai întâi categoria'; + + /** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance: NgbTypeahead; + focus$ = new Subject(); + click$ = new Subject(); + @ViewChild('instance', { static: true }) instance1: NgbTypeahead; + focus1$ = new Subject(); + click1$ = new Subject(); + @ViewChild('instance', { static: true }) instance2: NgbTypeahead; + focus2$ = new Subject(); + click2$ = new Subject(); + @ViewChild('instance', { static: true }) instance3: NgbTypeahead; + focus3$ = new Subject(); + click3$ = new Subject(); + @ViewChild('instance', { static: true }) instance4: NgbTypeahead; + focus4$ = new Subject(); + click4$ = new Subject(); + + constructor(private resourcesService: ResourcesService, + private route: ActivatedRoute, + private location: Location, private router: Router, + private citiesandCounties: CitiesCountiesService, + private fb: FormBuilder, private utilService: UtilService, + private filterService: FiltersService, + public authService: AuthenticationService) {} + + ngOnInit() { + + const navigation = this.router.getCurrentNavigation(); + let fixedOrg: any = null; + this.filterService.getSubCategories('0', '').subscribe((elem: any) => { + this.categories = elem; + }); + if (navigation && navigation.extras && navigation.extras.state) { + fixedOrg = navigation.extras.state.ngo; + } + + this.form = this.fb.group({ + subCategory: [{value: '', disabled: true}], + name: ['', Validators.required], + address: '', + resource_type: ['', Validators.required], + category: ['', Validators.required], + organisation: this.authService.is('NGO') ? + [{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id}, + disabled: true }, Validators.required] + : fixedOrg ? + [{value: {name: fixedOrg.name, _id: fixedOrg._id}, + disabled: false }, Validators.required] + : [{value: '' , disabled: false }, Validators.required], + quantity: ['', [Validators.required, Validators.min(1)]], + city: [{ value: '', disabled: true }, Validators.required], + county: ['', Validators.required], + comments: '' + }); + } +/** + * formater to display only name from object + */ + formatter = (result: { name: string }) => result.name; + /** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcounty = (text$: Observable) => { + + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click1$.pipe( + filter(() => !this.instance1.isPopupOpen()) + ); + const inputFocus$ = this.focus1$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => this.citiesandCounties.getCounties(term)) + ); + } +/** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcity = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click2$.pipe( + filter(() => !this.instance2.isPopupOpen()) + ); + const inputFocus$ = this.focus2$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + map((term: string) => { + if (term === '') { + return this.cities; + } else { + return this.cities.filter(v => { + const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase(); + return aux.indexOf(term.toLowerCase()) > -1; + }).slice(0, 20); + } + })); + } + /** + * trigger for organisation typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchOrganisation = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click$.pipe( + filter(() => !this.instance.isPopupOpen()) + ); + + const inputFocus$ = this.focus$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + return this.filterService.getorganisationbyName(term); + })); + } +/** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCounty(val: any) { + this.form.controls.county.markAsTouched(); + if (val.item && val.item._id) { + this.form.patchValue({county: val.item}); + this.loadingCities = true; + this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => { + this.cities = res; + this.loadingCities = false; + this.form.controls.city.enable(); + }); + this.cityPlaceholder = 'Alegeți Orașul'; + } else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) { + this.form.patchValue({county: '', city: ''}); + } + } +/** + * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection + * @param {any} event to be verified for which key has been pressed + */ + countykey(event: any) { + this.form.controls.county.markAsTouched(); + if (event.code !== 'Enter') { + this.cities = []; + this.form.controls.city.disable(); + this.form.controls.city.reset(''); + this.cityPlaceholder = 'Selectați mai întâi județul'; + } + } +/** + * trigger for select city from city typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCity(val: { item: any }) { + this.form.controls.city.markAsTouched(); + this.form.patchValue({city: val.item}); + } + /** + * trigger for select organisation from organisation typeahead. + * @param {any} val result object from typeahead that needs to be stored + */ + selectedOrganisation(val: any) { + this.form.controls.organisation.markAsTouched(); + if (val.item && val.item._id) { + this.form.patchValue({organisation: val.item}); + } else if (this.form.controls.organisation.value.name && val !== this.form.controls.organisation.value.name) { + this.form.patchValue({organisation: ''}); + } + } + /** + * trigger for select category from category typeahead. will unlock the subcategory field + */ + selectedCategory() { + this.form.controls.category.markAsTouched(); + if (this.form.value.category) { + this.filterService.getSubCategories(this.form.value.category, '').subscribe(resp => { + if (resp.length > 0) { + this.form.controls.subCategory.enable(); + this.resourcePlaceholder = 'Alegeți Categoria'; + this.subCategories = resp; + } else { + this.form.controls.subCategory.disable(); + this.form.controls.subCategory.reset(''); + this.resourcePlaceholder = 'Selectați mai întâi categoria'; + } + }); + } + } + + + /** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + const resource = this.form.value; + resource.organisation_id = this.form.controls['organisation'].value._id; + resource.county = resource.county._id; + resource.city = resource.city._id; + resource.categories = [resource.category]; + if (resource.subCategory) { + resource.categories.push(resource.subCategory); + } + this.resourcesService + .addResource(resource) + .subscribe((element: any) => { + this.loading = false; + this.location.back(); + }, () => { + this.loading = false; + }); + } + +} diff --git a/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.html b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.html new file mode 100644 index 0000000..d468f2a --- /dev/null +++ b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.html @@ -0,0 +1,128 @@ +
                                                                                                                                                + +

                                                                                                                                                Modifică resursă:

                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * Cantitatea trebuie să + fie mai mare decât 0. +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + * Trebuie sa + alegeți un tip. +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.scss b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.spec.ts b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.spec.ts new file mode 100644 index 0000000..1832e12 --- /dev/null +++ b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditResourceComponent } from './edit-resource.component'; + +describe('EditResourceComponent', () => { + let component: EditResourceComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditResourceComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditResourceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.ts b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.ts new file mode 100644 index 0000000..83d2c62 --- /dev/null +++ b/src/app/pages/resources/resources/components/edit-resource/edit-resource.component.ts @@ -0,0 +1,299 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { Subject, Observable, merge } from 'rxjs'; +import { ResourcesService } from '@app/pages/resources/resources.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Location } from '@angular/common'; +import { CitiesCountiesService, UtilService, FiltersService, AuthenticationService } from '@app/core'; +import { LocationValidation } from '@app/core/validators/location-validation'; +import { debounceTime, distinctUntilChanged, filter, switchMap, map } from 'rxjs/operators'; + +@Component({ + selector: 'app-edit-resource', + templateUrl: './edit-resource.component.html', + styleUrls: ['./edit-resource.component.scss'] +}) +export class EditResourceComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + /** + * flag -> if user is editing then method is PUT, else POST + */ + res: any; + /** + * list of items to select from. + */ + cities: any[] = []; + categories: any[] = []; + subCategories: any[] = []; + /** + * flag for HTML to display loading animation + */ + loading = false; + loadingCities = false; + + /** + * placeholders for HTML + */ + cityPlaceholder = 'Selectați mai întâi județul'; + resourcePlaceholder = 'Selectați mai întâi categoria'; + + /** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance: NgbTypeahead; + focus$ = new Subject(); + click$ = new Subject(); + @ViewChild('instance', { static: true }) instance1: NgbTypeahead; + focus1$ = new Subject(); + click1$ = new Subject(); + @ViewChild('instance', { static: true }) instance2: NgbTypeahead; + focus2$ = new Subject(); + click2$ = new Subject(); + @ViewChild('instance', { static: true }) instance3: NgbTypeahead; + focus3$ = new Subject(); + click3$ = new Subject(); + @ViewChild('instance', { static: true }) instance4: NgbTypeahead; + focus4$ = new Subject(); + click4$ = new Subject(); + + constructor(private resourcesService: ResourcesService, + private route: ActivatedRoute, + private location: Location, private router: Router, + private citiesandCounties: CitiesCountiesService, + private fb: FormBuilder, private utilService: UtilService, + private filterService: FiltersService, + public authService: AuthenticationService) {} + + ngOnInit() { + + const navigation = this.router.getCurrentNavigation(); + let fixedOrg: any = null; + this.filterService.getSubCategories('0', '').subscribe((elem: any) => { + this.categories = elem; + }); + if (navigation && navigation.extras && navigation.extras.state) { + fixedOrg = navigation.extras.state.ngo; + } + + this.form = this.fb.group({ + subCategory: [{value: '', disabled: true}], + name: ['', Validators.required], + address: '', + resource_type: ['', Validators.required], + category: ['', Validators.required], + organisation: this.authService.is('NGO') ? + [{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id}, + disabled: true }, Validators.required] + : fixedOrg ? + [{value: {name: fixedOrg.name, _id: fixedOrg._id}, + disabled: false }, Validators.required] + : [{value: '' , disabled: false }, Validators.required], + quantity: ['', [Validators.required, Validators.min(1)]], + city: [{ value: '', disabled: true }, Validators.required], + county: ['', Validators.required], + comments: '' + }); + if (this.route.snapshot.paramMap.get('id')) { + this.getResourceDetails(this.route.snapshot.paramMap.get('id')); + } + } + /** + * get the details of the resource when edititing + * @param {string} id of the edited NGO + */ + getResourceDetails(resId: string) { + if (resId) { + this.resourcesService.getResource(resId).subscribe(data => { + this.res = data; + this.form = this.fb.group({ + name: this.res.name, + subCategory: '', + address: this.res.address, + resource_type: [this.res.resource_type, Validators.required], + category: ['', Validators.required], + organisation: [{value: this.res.organisation, disabled: this.authService.is('NGO')} , Validators.required], + quantity: [this.res.quantity, [Validators.required, Validators.min(0)]], + city: ['', [Validators.required, LocationValidation.locationValidation]], + county: ['', [Validators.required, LocationValidation.locationValidation]], + comments: this.res.comments + }); + if (this.res.categories && this.res.categories[0] && this.res.categories[0]._id) { + this.form.patchValue({category: this.res.categories[0]._id}); + if (this.res.categories[1]) { + this.filterService.getSubCategories(this.res.categories[0]._id, '').subscribe(resp => { + this.form.controls.subCategory.enable(); + this.subCategories = resp; + this.form.patchValue({subCategory: this.res.categories[1]._id}); + }); + } + } + this.selectedCounty({item: this.res.county}); + this.selectedCity({item: this.res.city}); + }); + } + } + + formatter = (result: { name: string }) => result.name; + /** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcounty = (text$: Observable) => { + + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click1$.pipe( + filter(() => !this.instance1.isPopupOpen()) + ); + const inputFocus$ = this.focus1$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => this.citiesandCounties.getCounties(term)) + ); + } +/** + * trigger for city typeahead. registers typing, focus, and click and searches the stored list of cities + * @param {Observable} text observable event with the filter text + */ + searchcity = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click2$.pipe( + filter(() => !this.instance2.isPopupOpen()) + ); + const inputFocus$ = this.focus2$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + map((term: string) => { + if (term === '') { + return this.cities; + } else { + return this.cities.filter(v => { + const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase(); + return aux.indexOf(term.toLowerCase()) > -1; + }).slice(0, 20); + } + })); + } + /** + * trigger for city typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchOrganisation = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click$.pipe( + filter(() => !this.instance.isPopupOpen()) + ); + + const inputFocus$ = this.focus$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + return this.filterService.getorganisationbyName(term); + })); + } +/** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCounty(val: any) { + this.form.controls.county.markAsTouched(); + if (val.item && val.item._id) { + this.form.patchValue({county: val.item}); + this.loadingCities = true; + this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => { + this.cities = res; + this.loadingCities = false; + this.form.controls.city.enable(); + }); + this.cityPlaceholder = 'Alegeți Orașul'; + } else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) { + this.form.patchValue({county: '', city: ''}); + } + } +/** + * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection + * @param {any} event to be verified for which key has been pressed + */ + countykey(event: any) { + this.form.controls.county.markAsTouched(); + if (event.code !== 'Enter') { + this.cities = []; + this.form.controls.city.disable(); + this.form.controls.city.reset(''); + this.cityPlaceholder = 'Selectați mai întâi județul'; + } + } +/** + * trigger for select city from city typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCity(val: { item: any }) { + this.form.controls.city.markAsTouched(); + this.form.patchValue({city: val.item}); + } + /** + * trigger for select organisation from organisation typeahead. + * @param {any} val result object from typeahead that needs to be stored + */ + selectedOrganisation(val: any) { + this.form.controls.organisation.markAsTouched(); + if (val.item && val.item._id) { + this.form.patchValue({organisation: val.item}); + } else if (this.form.controls.organisation.value.name && val !== this.form.controls.organisation.value.name) { + this.form.patchValue({organisation: ''}); + } + } + /** + * trigger for select category from category typeahead. will unlock the subcategory field + */ + selectedCategory() { + this.form.controls.category.markAsTouched(); + if (this.form.value.category) { + this.filterService.getSubCategories(this.form.value.category, '').subscribe(resp => { + if (resp.length > 0) { + this.form.controls.subCategory.enable(); + this.resourcePlaceholder = 'Alegeți Categoria'; + this.subCategories = resp; + } else { + this.form.controls.subCategory.disable(); + this.form.controls.subCategory.reset(''); + this.resourcePlaceholder = 'Selectați mai întâi categoria'; + } + }); + } + } + + + /** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + const resource = this.form.value; + resource.organisation_id = this.form.controls['organisation'].value._id; + resource.county = resource.county._id; + resource.city = resource.city._id; + resource.categories = [resource.category]; + if (resource.subCategory) { + resource.categories.push(resource.subCategory); + } + this.resourcesService.editResource(this.res._id, resource) + .subscribe((element: any) => { + this.loading = false; + this.location.back(); + }, () => { + this.loading = false; + }); + } + +} diff --git a/src/app/pages/resources/resources/components/import-resources/import-resources.component.html b/src/app/pages/resources/resources/components/import-resources/import-resources.component.html new file mode 100644 index 0000000..a5f4bc6 --- /dev/null +++ b/src/app/pages/resources/resources/components/import-resources/import-resources.component.html @@ -0,0 +1,44 @@ +
                                                                                                                                                + +

                                                                                                                                                Adaugă resurse:

                                                                                                                                                + +
                                                                                                                                                + + Vrei să adaugi resurse individual? + Adaugă o resursa. + +
                                                                                                                                                + +

                                                                                                                                                {{ file.name }}

                                                                                                                                                + +
                                                                                                                                                + +

                                                                                                                                                Descarcă acest template, adaugă informațiile cerute în el conform capului de tabel și apoi încarcă-l la loc în platformă folosind câmpul de mai jos.

                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                + Au fost importate {{resp.rows_imported}} rânduri din {{resp.rows_discovered}}. Au apărut erori la unele rânduri: +
                                                                                                                                                + Rândul {{err.line}}: +
                                                                                                                                                + {{ex.value}}   -   {{ex.error}} +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/import-resources/import-resources.component.scss b/src/app/pages/resources/resources/components/import-resources/import-resources.component.scss new file mode 100644 index 0000000..d0f1bd1 --- /dev/null +++ b/src/app/pages/resources/resources/components/import-resources/import-resources.component.scss @@ -0,0 +1,3 @@ +.error-table { + margin-top: 100px; +} \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/import-resources/import-resources.component.spec.ts b/src/app/pages/resources/resources/components/import-resources/import-resources.component.spec.ts new file mode 100644 index 0000000..f1fc4b5 --- /dev/null +++ b/src/app/pages/resources/resources/components/import-resources/import-resources.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ImportResourcesComponent } from './import-resources.component'; + +describe('ImportResourcesComponent', () => { + let component: ImportResourcesComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ImportResourcesComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ImportResourcesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/resources/resources/components/import-resources/import-resources.component.ts b/src/app/pages/resources/resources/components/import-resources/import-resources.component.ts new file mode 100644 index 0000000..f679181 --- /dev/null +++ b/src/app/pages/resources/resources/components/import-resources/import-resources.component.ts @@ -0,0 +1,101 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ResourcesService } from '@app/pages/resources/resources.service'; +import { FiltersService, AuthenticationService } from '@app/core'; +import { Location } from '@angular/common'; +import { Router } from '@angular/router'; +import { environment } from '@env/environment'; + +@Component({ + selector: 'app-import-resources', + templateUrl: './import-resources.component.html', + styleUrls: ['./import-resources.component.scss'] +}) +export class ImportResourcesComponent implements OnInit { + /** + * csv reader input reference + */ + @ViewChild('csvReader', { static: true }) csvReader: any; + /** + * the file that will be extracted from file input + */ + file: any = null; + /** + * flag for HTML to display loading animation + */ + loading = false; + /** + * id of the org to which the resources will be added + */ + organisation_id: any = ''; + /** + * list of all the NGO from which the DSU can select + */ + NGOValues: any[] = []; + /** + * response from server. contains all errors + */ + public resp: any = {}; + + /** + * Csv download tempalte url + */ + public templateUrl = environment.serverUrl + '/resources/template'; + + constructor(private resourceService: ResourcesService, + private filterService: FiltersService, + private router: Router, + public authService: AuthenticationService) { + this.resp.has_errors = false; + if (authService.is('NGO')) { + this.organisation_id = this.authService.user.organisation._id; + } + } + + ngOnInit() { + this.filterService.getorganisationbyName('').subscribe((data) => { + this.NGOValues = data; + }); + } +/** + * send file to service and upload to server + * @param {any} event contains the file + */ + uploadListener($event: any): void { + const files = $event.srcElement.files; + this.loading = true; + + if (this.isValidCSVFile(files[0])) { + const input = $event.target; + this.file = input.files[0]; + this.resourceService.importCsv(this.file, this.organisation_id).subscribe((response: any) => { + this.resp = response; + if (!this.resp.has_errors) { + this.loading = false; + this.router.navigateByUrl('/resources'); + } else { + this.loading = false; + } + }, error => { + this.loading = false; + }); + } else { + alert('Vă rog introduceți un fișier CSV valid.'); + this.fileReset(); + } + } +/** + * check if file is ending with csv + * @param {any} file that will be uploaded + * @returns {boolead} + */ + isValidCSVFile(file: any) { + return file.name.endsWith('.csv'); + } +/** + * reset file input and response records + * @returns observable with response + */ + fileReset() { + this.csvReader.nativeElement.value = ''; + } +} diff --git a/src/app/pages/resources/resources/components/resource-details/resource-details.component.html b/src/app/pages/resources/resources/components/resource-details/resource-details.component.html new file mode 100644 index 0000000..fcbfff4 --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-details/resource-details.component.html @@ -0,0 +1,32 @@ +
                                                                                                                                                + +
                                                                                                                                                +

                                                                                                                                                Nume resursa: {{data?.name}}

                                                                                                                                                + + Organizație: {{data?.organisation?.name || 'Neafiliat'}} + Localizare: {{data?.city.name}}, {{data?.county.name}} + Adresa: {{data?.address }} + Tip Resursa: {{data?.resource_type }} + Comentarii: {{data?.comments}} +
                                                                                                                                                + Data ultimului update: {{ (data?.updated_at | date: 'dd.MM.yyyy') || 'Nu există' }} +
                                                                                                                                                +
                                                                                                                                                +

                                                                                                                                                Categorii:

                                                                                                                                                + + {{elem.name}} + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/resource-details/resource-details.component.scss b/src/app/pages/resources/resources/components/resource-details/resource-details.component.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-details/resource-details.component.scss @@ -0,0 +1 @@ + diff --git a/src/app/pages/resources/resources/components/resource-details/resource-details.component.spec.ts b/src/app/pages/resources/resources/components/resource-details/resource-details.component.spec.ts new file mode 100644 index 0000000..9250ff1 --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-details/resource-details.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ResourcedetailsComponent } from './resource-details.component'; + +describe('ResourcedetailsComponent', () => { + let component: ResourcedetailsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ResourcedetailsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ResourcedetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/resources/resources/components/resource-details/resource-details.component.ts b/src/app/pages/resources/resources/components/resource-details/resource-details.component.ts new file mode 100644 index 0000000..183b67d --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-details/resource-details.component.ts @@ -0,0 +1,68 @@ +import { Component, OnInit } from '@angular/core'; +import { ResourcesService } from '@app/pages/resources/resources.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AuthenticationService } from '@app/core'; +import { Location } from '@angular/common'; + + +@Component({ + selector: 'app-resource-details', + templateUrl: './resource-details.component.html', + styleUrls: ['./resource-details.component.scss'] +}) +export class ResourcedetailsComponent implements OnInit { + /** + * store resource data + */ + public data: any; + /** + * flag for HTML to display edit button + */ + canEdit = true; + /** + * flag for HTML to display loading animation + */ + loading = false; + constructor(private resourceService: ResourcesService, + private route: ActivatedRoute, + public authService: AuthenticationService, + private router: Router, + private location: Location) { } + + ngOnInit() { + this.getData(); + } +/** + * edit this resource + */ + edit() { + this.router.navigateByUrl(`/resources/edit/${this.data._id}`); + } +/** + * delete this resource + */ + deleteSelf() { + if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) { + this.loading = true; + this.resourceService.deleteResource(this.data._id).subscribe(() => { + this.loading = false; + this.location.back(); + }, () => { + this.loading = false; + }); + } + } +/** + * get resource data from server + */ + + getData() { + this.resourceService.getResource(this.route.snapshot.paramMap.get('id')).subscribe((data) => { + this.data = data; + + this.canEdit = this.authService.is('DSU') || + (this.authService.is('NGO') && (this.data.organisation._id === this.authService.user.organisation._id)); + }); + } + +} diff --git a/src/app/pages/resources/resources/components/resource-list/resource-list.component.html b/src/app/pages/resources/resources/components/resource-list/resource-list.component.html new file mode 100644 index 0000000..a7cbba5 --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-list/resource-list.component.html @@ -0,0 +1,59 @@ +
                                                                                                                                                + +
                                                                                                                                                +

                                                                                                                                                Denumire resursă: {{data?.name}}

                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                + Organizație + Cantitate + Adresă + Județ + Data ultimului update
                                                                                                                                                {{res.organisation?.name ? res.organisation?.name : ''}}{{res.quantity}}{{res.address}}{{res.city?.name}}, {{res.county?.name}}{{res.updated_at | date: 'dd.MM.yyyy'}} +
                                                                                                                                                + + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/resource-list/resource-list.component.scss b/src/app/pages/resources/resources/components/resource-list/resource-list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/resources/resources/components/resource-list/resource-list.component.spec.ts b/src/app/pages/resources/resources/components/resource-list/resource-list.component.spec.ts new file mode 100644 index 0000000..a3c0423 --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-list/resource-list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ResourceListComponent } from './resource-list.component'; + +describe('ResourceListComponent', () => { + let component: ResourceListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ResourceListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ResourceListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/resources/resources/components/resource-list/resource-list.component.ts b/src/app/pages/resources/resources/components/resource-list/resource-list.component.ts new file mode 100644 index 0000000..02b649c --- /dev/null +++ b/src/app/pages/resources/resources/components/resource-list/resource-list.component.ts @@ -0,0 +1,77 @@ +import { Component, OnInit } from '@angular/core'; +import { ResourcesService } from '@app/pages/resources/resources.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AuthenticationService } from '@app/core'; + +@Component({ + selector: 'app-resource-list', + templateUrl: './resource-list.component.html', + styleUrls: ['./resource-list.component.scss'] +}) +export class ResourceListComponent implements OnInit { +/** + * data holds info about current resource + */ + data: any; + /** + * list of resources with same slug + */ + resources: any[] = null; + /** + * var holds slug of the resource + */ + resslug: string; + /** + * pager for table + */ + pager: any = {}; + /** + * flag for HTML to display loading animation + */ + loading = false; + + constructor(private resourceService: ResourcesService, + private route: ActivatedRoute, + public authService: AuthenticationService, + private router: Router) { + this.resslug = this.route.snapshot.paramMap.get('id'); + } + + ngOnInit() { + this.pager = this.resourceService.getPager(); + this.getData(); + } + /** + * delete the selected res + * @param {string} resId of the resource that will be deleted + */ + deleteSelf(resId: string) { + if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) { + this.loading = true; + this.resourceService.deleteResource(resId).subscribe((data) => { + this.loading = false; + this.router.navigateByUrl('/resources'); + }, () => { + this.loading = false; + }); + } + } + /** + * when sorting we will set the pager and get data from server with the new pager + */ + sortChanged(pager: any) { + this.pager = pager; + this.getData(); + } +/** + * get the resourses with the same slug from server + */ + getData() { + this.resourceService.getResourceBySlug(this.resslug, this.pager).subscribe((response: any) => { + this.data = response.data[0]; + this.resources = response.data; + this.pager.total = response.pager.total; + }); + } + +} diff --git a/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.html b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.html new file mode 100644 index 0000000..12fed53 --- /dev/null +++ b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.html @@ -0,0 +1,133 @@ +
                                                                                                                                                + +
                                                                                                                                                + Total: {{pager.total}} +    + Filtrează după:   + + + + {{option.name}} + + + +   + + +
                                                                                                                                                + + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                + Nume Resursă + Categorie + Cantitate + Nr. Organizații
                                                                                                                                                {{res.name}} +
                                                                                                                                                +
                                                                                                                                                + {{cat?.name}}{{isLast ? '' : ', '}} +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                {{res.quantity}}{{res.organisations_total}}
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.scss b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.scss new file mode 100644 index 0000000..c00a3c8 --- /dev/null +++ b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.scss @@ -0,0 +1,39 @@ + +.card { + background-color: transparent; + margin: 10px; +} + +.card-body { + padding: 0.25rem; + background-color:white; +} + +@media (max-width: 425px) { + .container { + width: 100%; + max-width: none; + } +} + +@media (max-width: 1199px) { + .btn-adjusting { + width: min-content; + } +} +::ng-deep .category{ + .none-selected:before { + content: 'Categorie' !important; + } +} +.card-text { + + span { + line-height: 1; + height: auto; + display: block; + overflow: initial; + overflow-wrap: initial; + word-break:initial; + } +} \ No newline at end of file diff --git a/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.spec.ts b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.spec.ts new file mode 100644 index 0000000..6aab739 --- /dev/null +++ b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ResourcesdashboardComponent } from './resources-dashboard.component'; + +describe('ResourcesdashboardComponent', () => { + let component: ResourcesdashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ResourcesdashboardComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ResourcesdashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.ts b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.ts new file mode 100644 index 0000000..5c133c3 --- /dev/null +++ b/src/app/pages/resources/resources/components/resources-dashboard/resources-dashboard.component.ts @@ -0,0 +1,169 @@ +import { Component, OnInit } from '@angular/core'; +import { ResourcesService } from '../../../resources.service'; + +import { FiltersService, CitiesCountiesService } from '../../../../../core/service'; +import { BreakpointObserver } from '@angular/cdk/layout'; +import { AuthenticationService } from '@app/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-resources-dashboard', + templateUrl: './resources-dashboard.component.html', + styleUrls: ['./resources-dashboard.component.scss'] +}) +export class ResourcesdashboardComponent implements OnInit { + /** + * store the resources list + */ + resourcesData: any[] = []; + /** + * pager for the resources table + */ + pager: any = {}; + /** + * flag for HTML to know how to display data + */ + displayBlock = false; + /** + *values to select from when filtering + */ + categoryFilterValues: any[] = []; + locationFilterValues: any[] = []; + /** + * selected filters array + */ + selected = new Array(2); + /** + * match the id with _id and display parent_id in order to indent the apropriate subcategories + */ + propertyMap = { + '_id': 'id', + 'parent_id': 'parent_id' + }; + /** + * navigation extras will be sent to add resource if user is ngo. + */ + navigationExtras: any; + constructor(private resourceService: ResourcesService, + private filterService: FiltersService, + private citiesandCounties: CitiesCountiesService, + public breakpointObserver: BreakpointObserver, + public authService: AuthenticationService, + private router: Router) { } + + ngOnInit() { + this.resourceService.setPager(); + this.pager = this.resourceService.getPager(); + + this.getData(); + /** + * get filterable values + */ + this.filterService.getCategoryFilters().subscribe((data) => { + this.categoryFilterValues = data.map((x: any) => { + const parent = data.find((y: any) => y._id === x.parent_id); + return { + id: x._id, + name: x.name, + parent_id: x.parent_id, + pp: x.parent_id === '0' ? x.name : ( parent ? parent.name : null), + level: x.parent_id === '0' ? 0 : 1 + }; + }); + }); + + this.citiesandCounties.getCounties('').subscribe((response: any) => { + const aux = response; + aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id); + this.locationFilterValues = aux; + }); + /** + *observe screen chage and and switch to grid view if screen is too smal + */ + this.breakpointObserver + .observe(['(max-width: 768px)']) + .subscribe(result => { + if (result.matches) { + this.switchtoblock(); + } + }); + } + /** + * get data from server and store localy + + */ + getData() { + this.resourceService.getResources(this.pager).subscribe((data) => { + this.resourcesData = data.data; + this.pager.total = data.pager.total; + }); + } + /** + * send user to add resource. if is NGO the ngo id is static. + */ + addresource() { + if (this.authService.is('NGO')) { + const navigationExtras = { + state: { + ngo: { + // TO-DO: extragere informatiilor din contu utilizatorului + name: this.authService.user.organisation.name, + ngoid: this.authService.user.organisation._id + } + } + }; + this.router.navigateByUrl('/resources/add', navigationExtras); + } else { + this.router.navigate(['resources/add']); + } + } + /** + * sort callback. Filters added to pager and then a request is made + * @param {any} pager the pager with the search filer added + */ + sortChanged(pager: any) { + this.pager = pager; + this.getData(); + } + /** + * search callback. Filters added to pager and then a request is made + * @param {any} pager the pager with the search filer added + */ + searchChanged(pager: any) { + this.pager = pager; + this.getData(); + } + /** + * filter callback. Filters added to pager and then a request is made + * @param {number} id the index in the pager filters and filters Selected array + */ + filterChanged(id?: number) { + console.log(this.selected); + this.pager.filters[id] = this.selected[id].map((elem: any) => elem.id).join(','); + this.getData(); + } + /** + * view details about resource by slug if DSU and by id if NGO + * @param {any} res the resource to be viewed + */ + viewdetails(res: any) { + if (this.authService.is('DSU')) { + this.router.navigateByUrl(`/resources/name/${res.slug}`); + } else { + this.router.navigateByUrl(`/resources/id/${res.resources[0]._id}`); + } + } + /** + * set flag for HTML to list view + */ + switchtolist() { + this.displayBlock = false; + } + + /** + * set flag for HTML to grid view + */ + switchtoblock() { + this.displayBlock = true; + } +} diff --git a/src/app/pages/resources/resources/resources.component.html b/src/app/pages/resources/resources/resources.component.html index f081ce3..90c6b64 100644 --- a/src/app/pages/resources/resources/resources.component.html +++ b/src/app/pages/resources/resources/resources.component.html @@ -1 +1 @@ -

                                                                                                                                                resources works!

                                                                                                                                                + \ No newline at end of file diff --git a/src/app/pages/resources/resources/resources.component.spec.ts b/src/app/pages/resources/resources/resources.component.spec.ts index 06cd8a0..38e03e1 100644 --- a/src/app/pages/resources/resources/resources.component.spec.ts +++ b/src/app/pages/resources/resources/resources.component.spec.ts @@ -3,23 +3,23 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { ResourcesComponent } from './resources.component'; describe('ResourcesComponent', () => { - let component: ResourcesComponent; - let fixture: ComponentFixture; + let component: ResourcesComponent; + let fixture: ComponentFixture; - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ ResourcesComponent ] - }) - .compileComponents(); - })); + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ResourcesComponent ] + }) + .compileComponents(); + })); - beforeEach(() => { - fixture = TestBed.createComponent(ResourcesComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(ResourcesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/src/app/pages/resources/resources/resources.component.ts b/src/app/pages/resources/resources/resources.component.ts index d99c397..1bbe6a7 100644 --- a/src/app/pages/resources/resources/resources.component.ts +++ b/src/app/pages/resources/resources/resources.component.ts @@ -1,15 +1,18 @@ import { Component, OnInit } from '@angular/core'; @Component({ - selector: 'app-resources', - templateUrl: './resources.component.html', - styleUrls: ['./resources.component.scss'] + selector: 'app-resources', + templateUrl: './resources.component.html', + styleUrls: ['./resources.component.scss'] }) -export class ResourcesComponent implements OnInit { - constructor() { } +export class ResourcesComponent implements OnInit { + /** + * wrapper for the resources pages. acts as frame + */ + constructor() { } - ngOnInit() { - } + ngOnInit() { + } } diff --git a/src/app/pages/users/users-routing.module.ts b/src/app/pages/users/users-routing.module.ts new file mode 100644 index 0000000..04209d6 --- /dev/null +++ b/src/app/pages/users/users-routing.module.ts @@ -0,0 +1,48 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { UsersComponent } from './users/users.component'; +import { UserDashboardComponent } from './users/components/user-dashboard/user-dashboard.component'; +import { AddUserComponent } from './users/components/add-user/add-user.component'; +import { UserDetailsComponent } from './users/components/user-details/user-details.component'; +import { RoleGuard } from '@app/core/authentication/role.guard'; +import { EditUserComponent } from './users/components/edit-user/edit-user.component'; + + +const routes: Routes = [ + { + path: '', + component: UsersComponent, + children: [ + { + path: '', + component: UserDashboardComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'INS']} + }, + { + path: 'add/:role', + component: AddUserComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'INS']} + }, + { + path: 'edit/:id', + component: EditUserComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO', 'INS']} + }, + { + path: 'id/:id', + component: UserDetailsComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO', 'INS']} + }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class UsersRoutingModule { } diff --git a/src/app/pages/users/users.module.ts b/src/app/pages/users/users.module.ts new file mode 100644 index 0000000..841f2e3 --- /dev/null +++ b/src/app/pages/users/users.module.ts @@ -0,0 +1,34 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { UsersRoutingModule } from './users-routing.module'; +import { AddUserComponent } from './users/components/add-user/add-user.component'; +import { UserDashboardComponent } from './users/components/user-dashboard/user-dashboard.component'; +import { UsersComponent } from './users/users.component'; +import { UserDetailsComponent } from './users/components/user-details/user-details.component'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { SharedModule } from '@app/shared'; +import { SelectDropDownModule } from 'custom-select-dropdown'; +import { NgxMultiselectModule } from '@ngx-lib/multiselect'; +import { EditUserComponent } from './users/components/edit-user/edit-user.component'; + +@NgModule({ + declarations: [ + AddUserComponent, + UserDashboardComponent, + UsersComponent, + UserDetailsComponent, + EditUserComponent + ], + imports: [ + NgxMultiselectModule, + SelectDropDownModule, + SharedModule, + CommonModule, + UsersRoutingModule, + NgbModule, + FormsModule, + ReactiveFormsModule + ] +}) +export class UsersModule { } diff --git a/src/app/pages/users/users/components/add-user/add-user.component.html b/src/app/pages/users/users/components/add-user/add-user.component.html new file mode 100644 index 0000000..5374677 --- /dev/null +++ b/src/app/pages/users/users/components/add-user/add-user.component.html @@ -0,0 +1,81 @@ +
                                                                                                                                                + +

                                                                                                                                                Adaugă un utilizator:

                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.email.errors.email}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.phone.errors.phone}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/users/users/components/add-user/add-user.component.scss b/src/app/pages/users/users/components/add-user/add-user.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/users/users/components/add-user/add-user.component.spec.ts b/src/app/pages/users/users/components/add-user/add-user.component.spec.ts new file mode 100644 index 0000000..6c87129 --- /dev/null +++ b/src/app/pages/users/users/components/add-user/add-user.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddUserComponent } from './add-user.component'; + +describe('AddUserComponent', () => { + let component: AddUserComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AddUserComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddUserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/users/users/components/add-user/add-user.component.ts b/src/app/pages/users/users/components/add-user/add-user.component.ts new file mode 100644 index 0000000..b2e29de --- /dev/null +++ b/src/app/pages/users/users/components/add-user/add-user.component.ts @@ -0,0 +1,155 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, Validators, FormGroup } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { UsersService } from '@app/core/service/users.service'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; +import { AuthenticationService, FiltersService } from '@app/core'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { Subject } from 'rxjs'; +import { Location } from '@angular/common'; + +@Component({ + selector: 'app-add-user', + templateUrl: './add-user.component.html', + styleUrls: ['./add-user.component.scss'] +}) + +export class AddUserComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + /** + * role of user that will be created + */ + role: string; + /** + * user data + */ + user: any = {}; + /** + * flag for HTML to display loading animation + */ + loading = false; + /** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance: NgbTypeahead; + focus$ = new Subject(); + click$ = new Subject(); + /** + * list of institutions or organisation to pe parsed + */ + institutions: any[] = []; + organisations: any[] = []; + /** + * FLAG form HTML to display form according to role + */ + displayInstitution = false; + displayOrganisation = false; + + constructor(private fb: FormBuilder, + private router: Router, + private filterService: FiltersService, + public route: ActivatedRoute, + public authService: AuthenticationService, + private usersService: UsersService, + private location: Location) { } + + ngOnInit() { + this.form = this.fb.group({ + name: ['', Validators.required], + email: ['', [ Validators.required, EmailValidation.emailValidation ]], + phone: ['', [ Validators.required, PhoneValidation.phoneValidation ]], + institution: [''], + organisation: [''] + }); + + if (this.route.snapshot.paramMap.get('role')) { + this.role = this.route.snapshot.paramMap.get('role'); + this.setPageByRoles(); + } + } +/** + * call function to complete form depending on the role of the user + */ + setPageByRoles() { + if ((this.role === '0' || this.role === '1') && this.authService.is('DSU')) { + this.setInstitutions(); + } + + if (this.role === '2' && this.authService.is('DSU')) { + this.setOrganisations(); + } + } +/** + * set organisation form if needed + */ + setOrganisations() { + this.filterService.getorganisationbyName().subscribe(response => { + this.organisations = response; + }); + + this.displayOrganisation = true; + this.form.controls['organisation'].setValidators(Validators.required); + } +/** + * set institution form if needed + * + */ + setInstitutions() { + this.filterService.getInstitutionFilters().subscribe(response => { + this.institutions = response; + }); + + this.displayInstitution = true; + this.form.controls['institution'].setValidators(Validators.required); + } + + /** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedInstitut(val: { item: any }) { + this.form.controls.institution.markAsTouched(); + this.form.patchValue({institution: val.item}); + } + + /** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + this.user.name = this.form.value.name; + this.user.email = this.form.value.email; + this.user.phone = this.form.value.phone; + + if (this.role) { + this.user.role = this.role; + + if (this.role === '1' || this.role === '0') { + this.user.institution = this.form.value.institution; + } + + if (this.role === '2') { + this.user.organisation = this.form.value.organisation; + } + } + + this.usersService.addUser(this.user).subscribe((response) => { + this.loading = false; + this.location.back(); + }, () => { + this.setDuplicateEmailError(); + this.loading = false; + }); + } + /** + * Set error if email already exists + */ + + setDuplicateEmailError() { + this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'}); + } +} diff --git a/src/app/pages/users/users/components/edit-user/edit-user.component.html b/src/app/pages/users/users/components/edit-user/edit-user.component.html new file mode 100644 index 0000000..2e6346a --- /dev/null +++ b/src/app/pages/users/users/components/edit-user/edit-user.component.html @@ -0,0 +1,82 @@ + +
                                                                                                                                                + +

                                                                                                                                                Modifică utilizatorul:

                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.email.errors.email}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.phone.errors.phone}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/users/users/components/edit-user/edit-user.component.scss b/src/app/pages/users/users/components/edit-user/edit-user.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/users/users/components/edit-user/edit-user.component.spec.ts b/src/app/pages/users/users/components/edit-user/edit-user.component.spec.ts new file mode 100644 index 0000000..a2def58 --- /dev/null +++ b/src/app/pages/users/users/components/edit-user/edit-user.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditUserComponent } from './edit-user.component'; + +describe('EditUserComponent', () => { + let component: EditUserComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditUserComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditUserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/users/users/components/edit-user/edit-user.component.ts b/src/app/pages/users/users/components/edit-user/edit-user.component.ts new file mode 100644 index 0000000..1bfb643 --- /dev/null +++ b/src/app/pages/users/users/components/edit-user/edit-user.component.ts @@ -0,0 +1,186 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, Validators, FormGroup } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { UsersService } from '@app/core/service/users.service'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; +import { AuthenticationService, FiltersService } from '@app/core'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { Subject } from 'rxjs'; +import { Location } from '@angular/common'; + +@Component({ + selector: 'app-edit-user', + templateUrl: './edit-user.component.html', + styleUrls: ['./edit-user.component.scss'] +}) +export class EditUserComponent implements OnInit { + + /** + * form that holds data + */ + form: FormGroup; + /** + * role of user that will be created + */ + role: string; + /** + * user data + */ + user: any = {}; +/** + * flag for HTML to display loading animation + */ + loading = false; + /** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance: NgbTypeahead; + focus$ = new Subject(); + click$ = new Subject(); + /** + * list of institutions to pe parsed + */ + institutions: any[] = []; + organisations: any[] = []; + /** + * FLAG form HTML to display form according to role + */ + displayInstitution = false; + displayOrganisation = false; + + constructor(private fb: FormBuilder, + private router: Router, + private filterService: FiltersService, + public route: ActivatedRoute, + public authService: AuthenticationService, + private usersService: UsersService, + private location: Location) { } + + ngOnInit() { + this.form = this.fb.group({ + name: ['', Validators.required], + email: ['', [ Validators.required, EmailValidation.emailValidation ]], + phone: ['', [ Validators.required, PhoneValidation.phoneValidation ]], + institution: [''], + organisation: [''] + }); + + if (this.route.snapshot.paramMap.get('id')) { + this.getData(this.route.snapshot.paramMap.get('id')); + } + } +/** + * call function to complete form depending on the role of the user + */ + setPageByRoles() { + if (this.user.role === '1' || this.user.role === '0') { + this.form.controls['institution'].setValue(this.user.institution._id); + + if (this.authService.is('INS')) { + this.form.controls['institution'].disable(); + } + + this.setInstitutions(); + } + + if (this.user.role === '2') { + this.form.controls['organisation'].setValue(this.user.organisation._id); + + if (this.authService.is('NGO')) { + this.form.controls['organisation'].disable(); + } + + this.setOrganisations(); + } + } +/** + * set organisation form if needed + */ + setOrganisations() { + this.filterService.getorganisationbyName().subscribe(response => { + this.organisations = response; + }); + + this.displayOrganisation = true; + this.form.controls['organisation'].setValidators(Validators.required); + } +/** + * set institution form if needed + * + */ + setInstitutions() { + this.filterService.getInstitutionFilters().subscribe(response => { + this.institutions = response; + }); + + this.displayInstitution = true; + this.form.controls['institution'].setValidators(Validators.required); + } +/** + * get user data by id + * @param {string} id of the user to be edited + */ + getData(id: string) { + this.usersService.getUser(id).subscribe(response => { + this.user = response; + this.role = this.user.role; + this.setPageByRoles(); + this.editForm(); + }); + } + + /** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedInstitut(val: { item: any }) { + this.form.controls.institution.markAsTouched(); + this.form.patchValue({institution: val.item}); + } + + /** + * add existing volunteer data in form for displaying + */ + editForm() { + this.form.controls['name'].setValue(this.user.name); + this.form.controls['email'].setValue(this.user.email); + this.form.controls['phone'].setValue(this.user.phone); + } + + /** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + this.user.name = this.form.value.name; + this.user.email = this.form.value.email; + this.user.phone = this.form.value.phone; + + if (this.role) { + this.user.role = this.role; + + if (this.role === '1' || this.role === '0') { + this.user.institution = this.form.value.institution; + } + + if (this.role === '2') { + this.user.organisation = this.form.value.organisation; + } + } + + this.usersService.updateUser(this.user).subscribe((response) => { + this.loading = false; + this.location.back(); + }, () => { + this.setDuplicateEmailError(); + this.loading = false; + }); + } + /** + * Set error if email already exists + */ + setDuplicateEmailError() { + this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'}); + } +} diff --git a/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.html b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.html new file mode 100644 index 0000000..031e362 --- /dev/null +++ b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.html @@ -0,0 +1,143 @@ +
                                                                                                                                                + +
                                                                                                                                                + Total: {{pager.total}} +    + Filtrează după:   + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +

                                                                                                                                                {{ elem.name }}

                                                                                                                                                +
                                                                                                                                                + + + {{ elem.email }} + + + + {{ elem.phone }} + +
                                                                                                                                                +
                                                                                                                                                + + + + + {{ elem.organisation.name }} + + + + + + {{ elem.institution.name }} + + + + + Administrator General + +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                NumeTipInstituție
                                                                                                                                                {{res.name}}{{getRole(res.role)}}{{res.institution?.name}}
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + + + +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + \ No newline at end of file diff --git a/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.scss b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.scss new file mode 100644 index 0000000..a345d5b --- /dev/null +++ b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.scss @@ -0,0 +1,5 @@ +::ng-deep .institutie{ + .none-selected::before{ + content: 'Instituție' !important; + } +} \ No newline at end of file diff --git a/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.spec.ts b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.spec.ts new file mode 100644 index 0000000..39e9c9d --- /dev/null +++ b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserDashboardComponent } from './user-dashboard.component'; + +describe('UserDashboardComponent', () => { + let component: UserDashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UserDashboardComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserDashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.ts b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.ts new file mode 100644 index 0000000..9e667dc --- /dev/null +++ b/src/app/pages/users/users/components/user-dashboard/user-dashboard.component.ts @@ -0,0 +1,173 @@ +import { Component, OnInit } from '@angular/core'; +import { BreakpointObserver } from '@angular/cdk/layout'; +import { UsersService } from '@app/core/service/users.service'; +import { + FormGroup, + Validators, + FormBuilder +} from '@angular/forms'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Router } from '@angular/router'; +import { AuthenticationService, FiltersService } from '@app/core'; + +@Component({ + selector: 'app-user-dashboard', + templateUrl: './user-dashboard.component.html', + styleUrls: ['./user-dashboard.component.scss'] +}) + +export class UserDashboardComponent implements OnInit { + /** + * var to hold the users. + */ + data: any[] = []; + /** + * pager for the resources table + */ + pager: any = {}; + /** + * flag for HTML to know how to display data + */ + displayBlock = true; + /** + * form in which to store the role from the modal + */ + form: FormGroup; + roles = [ + { + id: 0, + name: 'Comandant de intervenție' + }, + { + id: 1, + name: 'Administrator instituțional' + }, + { + id: 2, + name: 'Administrator ONG' + }, + { + id: 3, + name: 'Administrator General' + }, + ]; + /** + * selected values for the filter + */ + selected = Array(1); + /** + * insitution to select from + */ + institutionfiltervalues: any[] = []; + + constructor(private usersService: UsersService, + public breakpointObserver: BreakpointObserver, + private modalService: NgbModal, + private filterService: FiltersService, + private router: Router, public authService: AuthenticationService, + private fb: FormBuilder) { } + + ngOnInit() { + this.pager = this.usersService.getPager(); + this.getData(); + this.filterService.getInstitutionFilters().subscribe((data: any) => { + this.institutionfiltervalues = data.map((elem: any) => { + return {id: elem._id, name: elem.name}; + }); + }); + this.breakpointObserver.observe([ + '(max-width: 768px)' + ]).subscribe(result => { + if (result.matches) { + this.switchtoblock(); + } + }); + + this.form = this.fb.group({ + role: ['', Validators.required] + }); + } +/** + * get role names from local list to display in select + * @param {string} id of the role to be found in the roles array + */ + getRole(id: string) { + for (const elem of this.roles) { + if (elem.id === parseInt(id, 10)) { return elem.name; } + } + } +/** + * go to add page for rescue officer or open the modal to select type of user + */ + addUser(content: any) { + if (this.authService.is('DSU')) { + this.modalService.open(content, { centered: true }); + } else { + this.router.navigateByUrl('/users/add/0'); + } + } +/** + * get data from server and store localy + + */ + getData() { + this.usersService.getUsers(this.pager).subscribe(element => { + if (element.data) { + this.data = element.data; + this.pager.total = element.pager.total; + } + }); + } + /** + * go to add page and dismiss the modal + */ + continue() { + this.router.navigateByUrl('/users/add/' + this.form.value.role); + this.modalService.dismissAll(); + } + /** + * sort callback. Filters added to pager and then a request is made + * @param {any} pager the pager with the search filer added + */ + sortChanged(pager: any) { + this.pager = pager; + this.getData(); + } + /** + * search callback. Filters added to pager and then a request is made + * @param {any} pager the pager with the search filer added + */ + searchChanged(pager: any) { + this.pager = pager; + this.getData(); + } +/** + * filter callback. Filters added to pager and then a request is made + * @param {number} id the index in the pager filters and filters Selected array + */ + filterChanged(id?: number) { + this.pager.filters[id] = this.selected[id].map((elem: any) => elem.id).join(','); + this.getData(); + } + + /** + * set class of display element with list view + */ + switchtolist() { + this.displayBlock = false; + } + /** + * set class of display element with grid view + */ + switchtoblock() { + this.displayBlock = true; + } + /** + * navigate to organisation by id + * @param {string} id of the NGO to display + */ + goToOrganisation(id: string, e: any) { + e.preventDefault(); + this.router.navigate(['../organisations/id/' + id]); + } +} diff --git a/src/app/pages/users/users/components/user-details/user-details.component.html b/src/app/pages/users/users/components/user-details/user-details.component.html new file mode 100644 index 0000000..f5af0de --- /dev/null +++ b/src/app/pages/users/users/components/user-details/user-details.component.html @@ -0,0 +1,30 @@ +
                                                                                                                                                + +
                                                                                                                                                +

                                                                                                                                                Profil Utilizator: {{data?.name}}

                                                                                                                                                + + {{data?.email}} + {{data?.phone}} + +
                                                                                                                                                + Tipul utilizatorului: {{ userTypes[data?.role] }} +
                                                                                                                                                +
                                                                                                                                                + Data adăugării: {{ data?.created_at | date: 'dd.MM.yyyy' }} +
                                                                                                                                                +
                                                                                                                                                + + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                diff --git a/src/app/pages/users/users/components/user-details/user-details.component.scss b/src/app/pages/users/users/components/user-details/user-details.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/users/users/components/user-details/user-details.component.spec.ts b/src/app/pages/users/users/components/user-details/user-details.component.spec.ts new file mode 100644 index 0000000..7aead35 --- /dev/null +++ b/src/app/pages/users/users/components/user-details/user-details.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserDetailsComponent } from './user-details.component'; + +describe('UserDetailsComponent', () => { + let component: UserDetailsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UserDetailsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/users/users/components/user-details/user-details.component.ts b/src/app/pages/users/users/components/user-details/user-details.component.ts new file mode 100644 index 0000000..9a980f1 --- /dev/null +++ b/src/app/pages/users/users/components/user-details/user-details.component.ts @@ -0,0 +1,73 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { UsersService } from '@app/core/service/users.service'; +import { Location } from '@angular/common'; +import { AuthenticationService } from '@app/core'; + +@Component({ + selector: 'app-user-details', + templateUrl: './user-details.component.html', + styleUrls: ['./user-details.component.scss'] +}) +export class UserDetailsComponent implements OnInit { + /** + * store the user details + */ + data: any; + /** + * user types to display instead of role which is number + */ + userTypes = [ 'Ofițer de intervenție', 'Administratorul instituțional', 'Administrator ONG', 'Administrator General']; + /** + * flag for HTML to display loading animation + */ + loading = false; + + constructor(private route: ActivatedRoute, + private authService: AuthenticationService, + private router: Router, + private usersService: UsersService, + private location: Location) { } + + ngOnInit() { + this.usersService.getUser(this.route.snapshot.paramMap.get('id')).subscribe(response => { + this.data = response; + }); + } +/** + * send to edit page + */ + edit() { + this.router.navigate(['/users/edit/' + this.data._id]); + } +/** + * send to delete page + */ + delete() { + /** + * check if is the current user deleting his own account + */ + if (this.authService.user._id === this.data._id) { + if (confirm('Sunteți sigur că doriți să vă ștergeți contul?')) { + this.loading = true; + this.usersService.deleteUser(this.data._id).subscribe(response => { + this.loading = false; + this.authService.setCredentials(); + this.router.navigateByUrl('/login'); + }, () => { + this.location.back(); + }); + } + } else { + if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) { + this.loading = true; + this.usersService.deleteUser(this.data._id).subscribe(response => { + this.loading = false; + this.location.back(); + }, () => { + this.location.back(); + }); + } + } + } +} diff --git a/src/app/pages/users/users/users.component.html b/src/app/pages/users/users/users.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/src/app/pages/users/users/users.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/pages/users/users/users.component.scss b/src/app/pages/users/users/users.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.spec.ts b/src/app/pages/users/users/users.component.spec.ts similarity index 56% rename from src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.spec.ts rename to src/app/pages/users/users/users.component.spec.ts index 6770870..db57578 100644 --- a/src/app/pages/organizations/organizations/components/ngoadd/ngoadd.component.spec.ts +++ b/src/app/pages/users/users/users.component.spec.ts @@ -1,20 +1,20 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { NgoaddComponent } from './ngoadd.component'; +import { UsersComponent } from './users.component'; -describe('NgoaddComponent', () => { - let component: NgoaddComponent; - let fixture: ComponentFixture; +describe('UsersComponent', () => { + let component: UsersComponent; + let fixture: ComponentFixture; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ NgoaddComponent ] + declarations: [ UsersComponent ] }) .compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(NgoaddComponent); + fixture = TestBed.createComponent(UsersComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/src/app/pages/users/users/users.component.ts b/src/app/pages/users/users/users.component.ts new file mode 100644 index 0000000..81940d0 --- /dev/null +++ b/src/app/pages/users/users/users.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit } from '@angular/core'; +@Component({ + selector: 'app-users', + templateUrl: './users.component.html', + styleUrls: ['./users.component.scss'] +}) + +export class UsersComponent implements OnInit { + /** + * wrapper for the users pages. acts as frame + */ + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/pages/volunteers/volunteers.module.ts b/src/app/pages/volunteers/volunteers.module.ts index 245e75d..c2951f7 100644 --- a/src/app/pages/volunteers/volunteers.module.ts +++ b/src/app/pages/volunteers/volunteers.module.ts @@ -2,21 +2,37 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { VolunteersComponent } from './volunteers/volunteers.component'; import { VolunteersRoutingModule } from './volunteers.routing'; -@NgModule({ - declarations: [ - VolunteersComponent - ], - imports: [ - CommonModule, - VolunteersRoutingModule, - ], - entryComponents: [ - - ], - providers: [ - //OrganizationService - ] - }) -export class VolunteersModule { +import { AddVolunteerComponent } from './volunteers/components/add-volunteer/add-volunteer.component'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { ImportVolunteersComponent } from './volunteers/components/import-volunteers/import-volunteers.component'; +import { VolunteerDashboardComponent } from './volunteers/components/volunteer-dashboard/volunteer-dashboard.component'; +import { VolunteerDetailsComponent } from './volunteers/components/volunteer-details/volunteer-details.component'; +import { SelectDropDownModule } from 'custom-select-dropdown'; +import { SharedModule } from '../../shared/shared.module'; +import { NgxMultiselectModule } from '@ngx-lib/multiselect'; +import { EditVolunteerComponent } from './volunteers/components/edit-volunteer/edit-volunteer.component'; -} +@NgModule({ + declarations: [ + VolunteersComponent, + VolunteerDashboardComponent, + AddVolunteerComponent, + VolunteerDetailsComponent, + ImportVolunteersComponent, + EditVolunteerComponent + ], + imports: [ + NgxMultiselectModule, + SharedModule, + SelectDropDownModule, + NgbModule, + ReactiveFormsModule, + FormsModule, + CommonModule, + VolunteersRoutingModule + ], + entryComponents: [], + providers: [] +}) +export class VolunteersModule {} diff --git a/src/app/pages/volunteers/volunteers.routing.ts b/src/app/pages/volunteers/volunteers.routing.ts index 413baf5..f10fdff 100644 --- a/src/app/pages/volunteers/volunteers.routing.ts +++ b/src/app/pages/volunteers/volunteers.routing.ts @@ -1,17 +1,49 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { VolunteersComponent } from './volunteers/volunteers.component'; +import { AddVolunteerComponent } from './volunteers/components/add-volunteer/add-volunteer.component'; +import { ImportVolunteersComponent } from './volunteers/components/import-volunteers/import-volunteers.component'; +import { VolunteerDashboardComponent } from './volunteers/components/volunteer-dashboard/volunteer-dashboard.component'; +import { VolunteerDetailsComponent } from './volunteers/components/volunteer-details/volunteer-details.component'; +import { RoleGuard } from '@app/core'; +import { EditVolunteerComponent } from './volunteers/components/edit-volunteer/edit-volunteer.component'; const routes: Routes = [ - { - path: '', - component: VolunteersComponent, - } + { + path: '', + component: VolunteersComponent, + children: [ + { + path: '', + component: VolunteerDashboardComponent + }, + { + path: 'add', + component: AddVolunteerComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'id/:id', + component: VolunteerDetailsComponent + }, + { + path: 'edit/:id', + component: EditVolunteerComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + }, + { + path: 'import', + component: ImportVolunteersComponent, + canActivate: [RoleGuard], + data: {roles: ['DSU', 'NGO']} + } + ] + } ]; @NgModule({ - exports: [RouterModule], - imports: [RouterModule.forChild(routes)] + exports: [RouterModule], + imports: [RouterModule.forChild(routes)] }) -export class VolunteersRoutingModule { - -} +export class VolunteersRoutingModule {} diff --git a/src/app/pages/volunteers/volunteers.service.ts b/src/app/pages/volunteers/volunteers.service.ts new file mode 100644 index 0000000..754b311 --- /dev/null +++ b/src/app/pages/volunteers/volunteers.service.ts @@ -0,0 +1,115 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/internal/Observable'; +import { HttpHeaders, HttpClient, HttpParams } from '@angular/common/http'; +import { map } from 'rxjs/internal/operators/map'; +@Injectable({ + providedIn: 'root' + }) +export class VolunteerService { + /** + * pager for the volunteers table + */ + pager: any = { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + }; +/** + * get the volunteer pager + * @returns pager + */ + getPager() { + return {...this.pager}; + } + /** + * init pager with default values + */ + setPager() { + this.pager = { + sort: 1, + method: 'ASC', + page: 1, + size: 15, + total: 0, + filters: {} + }; + } + constructor(private httpClient: HttpClient) {} +/** + * post a new volunteer to website, auto add Header + * @param {any} payload the org data to be added + * @returns observable with response + */ + addVolunteer(payload: any) { + return this.httpClient.post('/volunteers', payload ); + } + /** + * get all volunteers + * @param {any} pager with sorting, filters, page etc + * @returns observable with volunteers list + */ + getVolunteers(paginationObj?: any): Observable { + let params: any = {}; + + params = {...params, ...paginationObj}; + if (params.filters) { + Object.keys(params.filters).forEach((key) => { + if (params.filters[key]) { + params['filters[' + key + ']'] = params.filters[key]; + } + }); + delete params.filters; + } + return this.httpClient.get('/volunteers', { params: params }); + } + /** + * get volunteer by id + * @param {string} id of the volunteer to be fetched + * @param {any} pager with sorting, filters, page etc + * @returns observable with response volunteer + */ + getVolunteer(id: String): Observable { + return this.httpClient.get(`/volunteers/${id}`); + } + /** + * edit a volunteer + * @param {any} payload the volunteer data to be modified + * @param {string} id of the volunteer to be modified + * @returns observable with response + */ + editVolunteer(id: String, payload: any ): Observable { + return this.httpClient.put(`/volunteers/${id}`, payload); + } + /** + * delete volunteer by id + * @param {string} id of the volunteer to be deleted + * @returns observable with response + */ + deleteVolunteer(id: String): Observable { + return this.httpClient.delete(`/volunteers/${id}`); + } +/** + * send CSV and organisation id to server + * @param {string} id of the organisation to be modfified + * @param {any} file with CSV data + * @returns observable with response + */ + importCsv(file: any, id: any) { + const formdata: FormData = new FormData(); + console.log(id); + formdata.append('file', file); + formdata.append('organisation_id', id); + return this.httpClient.post('/volunteers/import', formdata); + } +/** + * get alocations for a volunteer + * @param {string} volunteerId of the volunteer for whom to get alocations + * @returns observable with response alocations + */ + getAllocations(volunteerId: string) { + return this.httpClient.get(`/volunteers/${volunteerId}/allocations`); + } +} diff --git a/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.html b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.html new file mode 100644 index 0000000..14ff763 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.html @@ -0,0 +1,267 @@ +
                                                                                                                                                + +
                                                                                                                                                +

                                                                                                                                                Adaugă un voluntar:

                                                                                                                                                +
                                                                                                                                                + + Vrei să adaugi mai mulți voluntari simultan? + Importă o listă. + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.ssn.errors.ssn}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.email.errors.email}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.phone.errors.phone}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                + Specializare + + Data acreditării + + Acreditat de +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                Nicio specializare adăugată. Vă rugăm completați formularul de mai jos și apăsați pe butonul "" pentru a salva acreditarea.
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + *Alegeți un curs din listă +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + *Data trebuie să fie anterioară +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + *Acest câmp este obligatoriu +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                diff --git a/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.scss b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.scss new file mode 100644 index 0000000..831e7dd --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.scss @@ -0,0 +1,30 @@ +.form-group { + margin: 0; +} + +.page-title { + margin-bottom: 1.5rem; +} + +.mx--15 { + margin-left: -15px; + margin-right: -15px; +} + +.w-100 { + width: 100%; +} + +.margin-auto-center { + margin: 0 auto; + display: block; +} + +.border-spacing { + border-collapse: separate; + border-spacing: 10px; + border-collapse: expression('separate', cellSpacing = '10px'); +} +::ng-deep .form-group .datepicker .dropdown-menu.show{ + max-height: initial; +} \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.spec.ts b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.spec.ts new file mode 100644 index 0000000..127b157 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddVolunteerComponent } from './add-volunteer.component'; + +describe('AddVolunteerComponent', () => { + let component: AddVolunteerComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AddVolunteerComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddVolunteerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.ts b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.ts new file mode 100644 index 0000000..0e44995 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/add-volunteer/add-volunteer.component.ts @@ -0,0 +1,394 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormGroup, Validators, FormBuilder, FormArray } from '@angular/forms'; +import { VolunteerService } from '../../../volunteers.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Observable, merge, Subject } from 'rxjs'; +import { + debounceTime, + distinctUntilChanged, + map, + filter, + switchMap, +} from 'rxjs/operators'; +import { NgbTypeahead, NgbDateAdapter, NgbDateNativeAdapter } from '@ng-bootstrap/ng-bootstrap'; +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service'; +import { AuthenticationService, FiltersService, UtilService } from '@app/core'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; +import { Location } from '@angular/common'; +import { SsnValidation } from '@app/core/validators/ssn-validation'; +import * as moment from 'moment'; +import { TouchSequence } from 'selenium-webdriver'; + +@Component({ + selector: 'app-add-volunteer', + templateUrl: './add-volunteer.component.html', + styleUrls: ['./add-volunteer.component.scss'], + providers: [{provide: NgbDateAdapter, useClass: NgbDateNativeAdapter}] +}) + +export class AddVolunteerComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + /** + * courses values and errors + */ + coursename: any; + coursenameError = false; + acreditedby: any; + accreditedError = false; + obtained: Date; + dateError = false; + +/** + * placeholder for disabled city field + */ + cityPlaceholder = 'Selectați mai întâi județul'; +/** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance: NgbTypeahead; + focus$ = new Subject(); + click$ = new Subject(); + + @ViewChild('instance', { static: true }) instance1: NgbTypeahead; + focus1$ = new Subject(); + click1$ = new Subject(); + + @ViewChild('instance', { static: true }) instance2: NgbTypeahead; + focus2$ = new Subject(); + click2$ = new Subject(); + + @ViewChild('instance', { static: true }) instance3: NgbTypeahead; + focus3$ = new Subject(); + click3$ = new Subject(); + + @ViewChild('instance', { static: true }) instance4: NgbTypeahead; + focus4$ = new Subject(); + click4$ = new Subject(); + static_accreditor = false; + /** + * flag -> if information is beeing loaded show loader elements in frontend + */ + loading = false; + loadingCities = false; + /** + * list of cities to pe parsed. edited when the user selects a county or edits this NGO + */ + cities: any[] = []; + // /** + // * date object to force course acreditation date in the past + // */ + now: any; + + constructor( + public volunteerService: VolunteerService, + private filterService: FiltersService, + private router: Router, private utilService: UtilService, + private route: ActivatedRoute, private location: Location, + private fb: FormBuilder, + private citiesandCounties: CitiesCountiesService, + public authService: AuthenticationService) { + const dateObj = new Date(); + const month = dateObj.getUTCMonth() + 1; // months from 1-12 + const day = dateObj.getUTCDate(); + const year = dateObj.getUTCFullYear(); + this.now = {day: day, month: month, year: year}; + } + + ngOnInit() { + const navigation = this.router.getCurrentNavigation(); + + let fixedOrg: any; + if (navigation && navigation.extras && navigation.extras.state) { + fixedOrg = navigation.extras.state.ngo; + } + this.form = this.fb.group({ + name: ['', Validators.required], + ssn: ['', [Validators.required, SsnValidation.ssnValidation]], + email: ['', [Validators.required, EmailValidation.emailValidation]], + phone: ['', [Validators.required, PhoneValidation.phoneValidation]], + address: [''], + job: [''], + county: ['', Validators.required], + city: [{ value: '', disabled: true }, Validators.required], + organisation: this.authService.is('NGO') ? + [{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id}, + disabled: true }, Validators.required] + : fixedOrg ? + [{value: {name: fixedOrg.name, _id: fixedOrg._id}, + disabled: false }, Validators.required] + : [{value: '' , disabled: false }, Validators.required], + courses: this.fb.array([]), + comments: [''] + }); + } + /** + * wrapper for the form' controls + */ + get f() { + return this.form.controls; + } +/** + * wrapper for the form's controls courses array + */ + get c() { + return this.f.courses as FormArray; + } +/** + * formater to display only name from object + */ + formatter = (result: { name: string }) => result.name; + /** + * trigger for organistion typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchorganisation = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click$.pipe( + filter(() => !this.instance.isPopupOpen()) + ); + + const inputFocus$ = this.focus$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + return this.filterService.getorganisationbyName(term); + })); + } + /** + * trigger for course typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcourse = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click3$.pipe( + filter(() => !this.instance3.isPopupOpen()) + ); + + const inputFocus$ = this.focus3$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + this.coursenameError = false; + return this.filterService.getSpecializationFilters(term); + })); + } + /** + * trigger for accredited by typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchacreditedby = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click4$.pipe( + filter(() => !this.instance.isPopupOpen()) + ); + + const inputFocus$ = this.focus4$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + this.accreditedError = false; + return this.filterService.getAcreditedFilters(term); + })); + } +/** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcounty = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click1$.pipe( + filter(() => !this.instance1.isPopupOpen()) + ); + const inputFocus$ = this.focus1$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => this.citiesandCounties.getCounties(term)) + ); + } +/** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcity = (text$: Observable) => { + const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged()); + const clicksWithClosedPopup$ = this.click2$.pipe( + filter(() => !this.instance2.isPopupOpen()) + ); + const inputFocus$ = this.focus2$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + map((term: string) => { + if (term === '') { + return this.cities; + } else { + return this.cities.filter(v => { + const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase(); + return aux.indexOf(term.toLowerCase()) > -1; + }).slice(0, 20); + } + })); + } + /** + * trigger for editing the county field. When activated, disable the static acreditor + * @param {any} event to be verified for which key has been pressed + */ + courseKey(event: any) { + if (event.code !== 'Enter') { + this.coursenameError = true; + this.static_accreditor = false; + this.acreditedby = ''; + } + } + /** + * if error has appeared, when user changes input remove the error + */ + acreditorKey() { + this.accreditedError = false; + } +/** + * trigger for select course from course typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedcourse(obj: any) { + if (obj.item.static_accreditor) { + this.acreditedby = obj.item.static_accreditor; + this.static_accreditor = true; + } else { + this.acreditedby = { + }; + this.static_accreditor = false; + } + this.coursenameError = false; + } +/** + * trigger for add course from course table footer. willbe added to form and displayed in table + */ + addCourse() { + const now = new Date(); + if (!this.acreditedby) { + this.accreditedError = true; + } + if (!this.coursename) { + this.coursenameError = true; + } + if (!this.obtained) { + this.dateError = true; + } + // if (this.obtained > now) { + if (!this.coursenameError && this.coursename && this.acreditedby) { + this.c.push( + this.fb.group({ + course_name: this.coursename.name, + course_name_id: this.coursename._id, + obtained: moment(this.obtained).format('DD.MM.YYYY'), + accredited_by: this.acreditedby.hasOwnProperty('name') ? this.acreditedby.name : this.acreditedby + }) + ); + this.static_accreditor = false; + this.coursename = null; + this.acreditedby = null; + this.obtained = null; + this.dateError = false; + this.accreditedError = false; + this.coursenameError = false; + } + // } else { + // this.dateError = true; + // } + } + /** + * remove one of the courses from the table by index + * @param {number} index result object from typeahead that needs to be stored + */ + removeCourse(index: number) { + const control = this.form.controls.courses; + control.removeAt(index); + } + /** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCounty(val: any) { + this.form.controls.county.markAsTouched(); + if (val.item && val.item._id) { + + this.form.patchValue({county: val.item}); + this.loadingCities = true; + this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => { + this.cities = res; + this.loadingCities = false; + this.form.controls.city.enable(); + }); + this.cityPlaceholder = 'Alegeți Orașul'; + } else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) { + this.form.patchValue({county: '', city: ''}); + } + } +/** + * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection + * @param {any} event to be verified for which key has been pressed + */ + countykey(event: any) { + this.form.controls.county.markAsTouched(); + if (event.code !== 'Enter') { + this.form.controls.city.disable(); + this.form.controls.city.reset(''); + this.cityPlaceholder = 'Selectați mai întâi județul'; + } + } +/** + * trigger for select city from city typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCity(val: { item: any }) { + this.form.controls.city.markAsTouched(); + this.form.patchValue({city: val.item}); + } + /** + * trigger for select organisation from organisation typeahead. + * @param {any} val result object from typeahead that needs to be stored + */ + selectedorganisation(val: { item: any }) { + this.form.controls.organisation.markAsTouched(); + this.form.patchValue({organisation: val.item}); + } +/** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + const volunteer = {...this.form.value}; + volunteer.ssn = volunteer.ssn.toString(); + volunteer.county = volunteer.county._id; + volunteer.city = volunteer.city._id; + volunteer.organisation_id = this.form.controls.organisation.value._id; + this.volunteerService.addVolunteer(volunteer).subscribe(() => { + this.loading = false; + this.form.controls['email'].setErrors({}); + this.location.back(); + }, (obj: any) => { + this.loading = false; + if (obj.error.errors) { + if (obj.error.errors[0].indexOf('CNP') !== -1) { + this.form.controls['ssn'].setErrors({'ssn': 'CNP-ul introdus există deja în sistem.'}); + } else { + this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'}); + } + } + }); + } +} diff --git a/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.html b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.html new file mode 100644 index 0000000..2b7d286 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.html @@ -0,0 +1,273 @@ +
                                                                                                                                                + +

                                                                                                                                                Modifică voluntarul:

                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.ssn.errors.ssn}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.email.errors.email}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + + * {{form.controls.phone.errors.phone}} +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                + Specializare + + Data acreditării + + Acreditat de +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                Nicio specializare adăugată. Vă rugăm completați formularul de mai jos și apăsați pe butonul "" pentru a salva acreditarea.
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + *Alegeți un curs din listă +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + *Data trebuie să fie anterioară +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + *Acest câmp este obligatoriu +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.scss b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.scss new file mode 100644 index 0000000..831e7dd --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.scss @@ -0,0 +1,30 @@ +.form-group { + margin: 0; +} + +.page-title { + margin-bottom: 1.5rem; +} + +.mx--15 { + margin-left: -15px; + margin-right: -15px; +} + +.w-100 { + width: 100%; +} + +.margin-auto-center { + margin: 0 auto; + display: block; +} + +.border-spacing { + border-collapse: separate; + border-spacing: 10px; + border-collapse: expression('separate', cellSpacing = '10px'); +} +::ng-deep .form-group .datepicker .dropdown-menu.show{ + max-height: initial; +} \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.spec.ts b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.spec.ts new file mode 100644 index 0000000..7b64c24 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditVolunteerComponent } from './edit-volunteer.component'; + +describe('EditVolunteerComponent', () => { + let component: EditVolunteerComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ EditVolunteerComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EditVolunteerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.ts b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.ts new file mode 100644 index 0000000..912debc --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/edit-volunteer/edit-volunteer.component.ts @@ -0,0 +1,432 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormGroup, Validators, FormBuilder, FormArray } from '@angular/forms'; +import { VolunteerService } from '../../../volunteers.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Observable, merge, Subject } from 'rxjs'; +import { + debounceTime, + distinctUntilChanged, + map, + filter, + switchMap, +} from 'rxjs/operators'; +import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; +import { CitiesCountiesService } from '../../../../../core/service/cities-counties.service'; +import { AuthenticationService, FiltersService, UtilService } from '@app/core'; +import { EmailValidation } from '@app/core/validators/email-validation'; +import { PhoneValidation } from '@app/core/validators/phone-validation'; +import { Location } from '@angular/common'; +import { SsnValidation } from '@app/core/validators/ssn-validation'; +import * as moment from 'moment'; + + +@Component({ + selector: 'app-edit-volunteer', + templateUrl: './edit-volunteer.component.html', + styleUrls: ['./edit-volunteer.component.scss'] +}) +export class EditVolunteerComponent implements OnInit { + /** + * form that holds data + */ + form: FormGroup; + /** + * courses values and errors + */ + coursename: any; + coursenameError = false; + acreditedby: any; + accreditedError = false; + obtained: Date; + dateError = false; + +/** + * placeholder for disabled city field + */ + cityPlaceholder = 'Selectați mai întâi județul'; +/** + * references to NGBTypeahead for opening on focus or click + */ + @ViewChild('instance', { static: true }) instance: NgbTypeahead; + focus$ = new Subject(); + click$ = new Subject(); + + @ViewChild('instance', { static: true }) instance1: NgbTypeahead; + focus1$ = new Subject(); + click1$ = new Subject(); + + @ViewChild('instance', { static: true }) instance2: NgbTypeahead; + focus2$ = new Subject(); + click2$ = new Subject(); + + @ViewChild('instance', { static: true }) instance3: NgbTypeahead; + focus3$ = new Subject(); + click3$ = new Subject(); + + @ViewChild('instance', { static: true }) instance4: NgbTypeahead; + focus4$ = new Subject(); + click4$ = new Subject(); + + /** + * flag -> if information is beeing loaded show loader elements in frontend + */ + loading = false; + loadingCities = false; + /** + * list of cities to pe parsed. edited when the user selects a county or edits this NGO + */ + cities: any[] = []; + /** + * date object to force course acreditation date in the past + */ + now: any; + /** + * date object to force course acreditation date in the past + */ + static_accreditor = false; + constructor( + public volunteerService: VolunteerService, + private filterService: FiltersService, + private router: Router, private utilService: UtilService, + private route: ActivatedRoute, private location: Location, + private fb: FormBuilder, + private citiesandCounties: CitiesCountiesService, + public authService: AuthenticationService) { + const dateObj = new Date(); + const month = dateObj.getUTCMonth() + 1; // months from 1-12 + const day = dateObj.getUTCDate(); + const year = dateObj.getUTCFullYear(); + this.now = {day: day, month: month, year: year}; + } + + ngOnInit() { + const navigation = this.router.getCurrentNavigation(); + + let fixedOrg: any; + if (navigation && navigation.extras && navigation.extras.state) { + fixedOrg = navigation.extras.state.ngo; + } + this.form = this.fb.group({ + name: ['', Validators.required], + ssn: ['', [Validators.required, SsnValidation.ssnValidation]], + email: ['', [Validators.required, EmailValidation.emailValidation]], + phone: ['', [Validators.required, PhoneValidation.phoneValidation]], + address: [''], + job: [''], + county: ['', Validators.required], + city: [{ value: '', disabled: true }, Validators.required], + organisation: this.authService.is('NGO') ? + [{value: {name: this.authService.user.organisation.name, _id: this.authService.user.organisation._id}, + disabled: true }, Validators.required] + : fixedOrg ? + [{value: {name: fixedOrg.name, _id: fixedOrg._id}, + disabled: false }, Validators.required] + : [{value: '' , disabled: false }, Validators.required], + courses: this.fb.array([]), + comments: [''] + }); + + if (this.route.snapshot.paramMap.get('id')) { + this.getVolunteerDetails(this.route.snapshot.paramMap.get('id')); + } + } +/** + * get the details of the volunteer when edititing + * @param {string} id of the edited volunteer + */ + getVolunteerDetails(volId: string) { + if (volId) { + this.volunteerService.getVolunteer(volId).subscribe(data => { + const aux = data.courses.map((element: any) => { + return this.fb.group({ + course_name: element.course_name.name, + course_name_id: element.course_name._id, + obtained: moment(element.obtained).format('DD.MM.YYYY'), + accredited_by: element.accredited.name + }); + }); + this.form = this.fb.group({ + name: [data.name, Validators.required], + ssn: [data.ssn, [Validators.required, Validators.minLength(13), Validators.maxLength(13)]], + email: [data.email, [Validators.required, EmailValidation.emailValidation]], + phone: [data.phone, [Validators.required, PhoneValidation.phoneValidation]], + address: data.address, + job: data.job, + courses: this.fb.array(aux), + county: ['', Validators.required], + city: ['', Validators.required], + organisation: [{value: data.organisation, disabled: this.authService.is('NGO') }, Validators.required], + comments: data.comments + }); + this.selectedCounty({item: data.county}); + this.selectedCity({item: data.city}); + }); + } + } +/** + * wrapper for the form' controls + */ + get f() { + return this.form.controls; + } +/** + * wrapper for the form's controls courses array + */ + get c() { + return this.f.courses as FormArray; + } +/** + * formater to display only name from object + */ + formatter = (result: { name: string }) => result.name; +/** + * trigger for organistion typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchorganisation = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click$.pipe( + filter(() => !this.instance.isPopupOpen()) + ); + + const inputFocus$ = this.focus$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + return this.filterService.getorganisationbyName(term); + })); + } +/** + * trigger for course typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcourse = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click3$.pipe( + filter(() => !this.instance3.isPopupOpen()) + ); + + const inputFocus$ = this.focus3$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + this.coursenameError = false; + return this.filterService.getSpecializationFilters(term); + })); + } +/** + * trigger for accredited by typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchacreditedby = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + + const clicksWithClosedPopup$ = this.click4$.pipe( + filter(() => !this.instance.isPopupOpen()) + ); + + const inputFocus$ = this.focus4$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => { + this.accreditedError = false; + return this.filterService.getAcreditedFilters(term); + })); + } +/** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcounty = (text$: Observable) => { + const debouncedText$ = text$.pipe( + debounceTime(200), + distinctUntilChanged() + ); + const clicksWithClosedPopup$ = this.click1$.pipe( + filter(() => !this.instance1.isPopupOpen()) + ); + const inputFocus$ = this.focus1$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + switchMap((term: string) => this.citiesandCounties.getCounties(term)) + ); + } +/** + * trigger for county typeahead. registers typing, focus, and click and searches the backend + * @param {Observable} text observable event with the filter text + */ + searchcity = (text$: Observable) => { + const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged()); + const clicksWithClosedPopup$ = this.click2$.pipe( + filter(() => !this.instance2.isPopupOpen()) + ); + const inputFocus$ = this.focus2$; + return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe( + map((term: string) => { + if (term === '') { + return this.cities; + } else { + return this.cities.filter(v => { + const aux: String = this.utilService.removeDiacritics(v.name).toLowerCase(); + return aux.indexOf(term.toLowerCase()) > -1; + }).slice(0, 20); + } + })); + } + /** + * trigger for editing the county field. When activated, disable the static acreditor + * @param {any} event to be verified for which key has been pressed + */ + courseKey(event: any) { + if (event.code !== 'Enter') { + this.coursenameError = true; + this.static_accreditor = false; + this.acreditedby = ''; + } + } + /** + * if error has appeared, when user changes input remove the error + */ + acreditorKey() { + this.accreditedError = false; + } + /** + * trigger for select course from course typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedcourse(obj: any) { + if (obj.item.static_accreditor) { + this.acreditedby = obj.item.static_accreditor; + this.static_accreditor = true; + } else { + this.acreditedby = { + }; + this.static_accreditor = false; + } + this.coursenameError = false; + } + /** + * trigger for add course from course table footer. willbe added to form and displayed in table + */ + addCourse() { + const now = new Date(); + if (!this.acreditedby) { + this.accreditedError = true; + } + if (!this.coursename) { + this.coursenameError = true; + } + if (!this.obtained) { + this.dateError = true; + } + // if (this.obtained > now) { + if (!this.coursenameError && this.coursename && this.acreditedby) { + this.c.push( + this.fb.group({ + course_name: this.coursename.name, + course_name_id: this.coursename._id, + obtained: moment(this.obtained).format('DD.MM.YYYY'), + accredited_by: this.acreditedby.hasOwnProperty('name') ? this.acreditedby.name : this.acreditedby + }) + ); + this.static_accreditor = false; + this.coursename = null; + this.acreditedby = null; + this.obtained = null; + this.dateError = false; + this.accreditedError = false; + this.coursenameError = false; + } + // } else { + // this.dateError = true; + // } + } +/** + * remove one of the courses from the table by index + * @param {number} index result object from typeahead that needs to be stored + */ + removeCourse(index: number) { + const control = this.form.controls.courses; + control.removeAt(index); + } +/** + * trigger for select county from county typeahead. will unlock the city field + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCounty(val: any) { + this.form.controls.county.markAsTouched(); + if (val.item && val.item._id) { + + this.form.patchValue({county: val.item}); + this.loadingCities = true; + this.citiesandCounties.getCitiesbyCounty(val.item._id, '').subscribe((res: any) => { + this.cities = res; + this.loadingCities = false; + this.form.controls.city.enable(); + }); + this.cityPlaceholder = 'Alegeți Orașul'; + } else if (this.form.controls.county.value.name && val !== this.form.controls.county.value.name) { + this.form.patchValue({county: '', city: ''}); + } + } +/** + * trigger for editing the county field. When activated, disable the city form until enter is pressed or mouse selection + * @param {any} event to be verified for which key has been pressed + */ + countykey(event: any) { + this.form.controls.county.markAsTouched(); + if (event.code !== 'Enter') { + this.form.controls.city.disable(); + this.form.controls.city.reset(''); + this.cityPlaceholder = 'Selectați mai întâi județul'; + } + } +/** + * trigger for select city from city typeahead + * @param {any} val result object from typeahead that needs to be stored + */ + selectedCity(val: { item: any }) { + this.form.controls.city.markAsTouched(); + this.form.patchValue({city: val.item}); + } + /** + * trigger for select organisation from organisation typeahead. + * @param {any} val result object from typeahead that needs to be stored + */ + selectedorganisation(val: { item: any }) { + this.form.controls.organisation.markAsTouched(); + this.form.patchValue({organisation: val.item}); + } +/** + * Process form values and send data to server. If success close page + */ + onSubmit() { + this.loading = true; + const volunteer = {...this.form.value}; + volunteer.ssn = volunteer.ssn.toString(); + volunteer.county = volunteer.county._id; + volunteer.city = volunteer.city._id; + volunteer.organisation_id = this.form.controls.organisation.value._id; + + this.volunteerService.editVolunteer(this.route.snapshot.paramMap.get('id'), volunteer).subscribe(() => { + this.loading = false; + this.location.back(); + }, (obj: any) => { + this.loading = false; + if (obj.error.errors) { + if (obj.error.errors[0].indexOf('CNP') !== -1) { + this.form.controls['ssn'].setErrors({'ssn': 'CNP-ul introdus există deja în sistem.'}); + } else { + this.form.controls['email'].setErrors({'email': 'Adresa de email introdusă există deja în sistem.'}); + } + } + }); + } +} diff --git a/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.html b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.html new file mode 100644 index 0000000..a0819e0 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.html @@ -0,0 +1,43 @@ +
                                                                                                                                                + +

                                                                                                                                                Adaugă voluntar:

                                                                                                                                                + +
                                                                                                                                                + + Vrei să adaugi voluntari individual? + Adaugă un voluntar. + +
                                                                                                                                                + +

                                                                                                                                                {{ file.name }}

                                                                                                                                                + +
                                                                                                                                                + +

                                                                                                                                                Descarcă acest template, adaugă informațiile cerute în el conform capului de tabel și apoi încarcă-l la loc în platformă folosind câmpul de mai jos.

                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + Loading... +
                                                                                                                                                +
                                                                                                                                                + Au fost importate {{resp.rows_imported}} rânduri din {{resp.rows_discovered}}. Au apărut erori la unele rânduri: +
                                                                                                                                                + Rândul {{err.line}}: +
                                                                                                                                                + {{ex.value}}   -   {{ex.error}} +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.scss b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.scss new file mode 100644 index 0000000..d0f1bd1 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.scss @@ -0,0 +1,3 @@ +.error-table { + margin-top: 100px; +} \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.spec.ts b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.spec.ts new file mode 100644 index 0000000..445092b --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ImportVolunteersComponent } from './import-volunteers.component'; + +describe('ImportVolunteersComponent', () => { + let component: ImportVolunteersComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ImportVolunteersComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ImportVolunteersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.ts b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.ts new file mode 100644 index 0000000..8236d39 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/import-volunteers/import-volunteers.component.ts @@ -0,0 +1,101 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { VolunteerService } from '@app/pages/volunteers/volunteers.service'; +import { FiltersService, AuthenticationService } from '@app/core'; +import { Location } from '@angular/common'; +import { Router } from '@angular/router'; +import { environment } from '@env/environment'; + +@Component({ + selector: 'app-import-volunteers', + templateUrl: './import-volunteers.component.html', + styleUrls: ['./import-volunteers.component.scss'] +}) +export class ImportVolunteersComponent implements OnInit { + /** + * csv reader input reference + */ + @ViewChild('csvReader', { static: true }) csvReader: any; + /** + * the file that will be extracted from file input + */ + file: any = null; + /** + * flag for HTML to display loading animation + */ + loading = false; + /** + * id of the org to which the resources will be added + */ + organisation_id: any = ''; + /** + * list of all the NGO from which the DSU can select + */ + NGOValues: any[] = []; + /** + * response from server. contains all errors + */ + public resp: any = {}; + + /** + * Csv download tempalte url + */ + public templateUrl = environment.serverUrl + '/volunteers/template'; + + constructor(private volunteerService: VolunteerService, + private filterService: FiltersService, + private router: Router, + public authService: AuthenticationService) { + this.resp.has_errors = false; + if (authService.is('NGO')) { + this.organisation_id = this.authService.user.organisation._id; + } + } + + ngOnInit() { + this.filterService.getorganisationbyName('').subscribe((data) => { + this.NGOValues = data; + }); + } +/** + * send file to service and upload to server + * @param {any} event contains the file + */ + uploadListener($event: any): void { + const files = $event.srcElement.files; + this.loading = true; + if (this.isValidCSVFile(files[0])) { + const input = $event.target; + this.file = input.files[0]; + this.volunteerService.importCsv(this.file, this.organisation_id).subscribe((response: any) => { + this.resp = response; + if (!this.resp.has_errors) { + this.loading = false; + this.router.navigateByUrl('/volunteers'); + } else { + this.loading = false; + } + }, error => { + this.loading = false; + }); + } else { + alert('Vă rog introduceți un fișier CSV valid.'); + this.fileReset(); + this.loading = false; + } + } +/** + * check if file is ending with csv + * @param {any} file that will be uploaded + * @returns {boolead} + */ + isValidCSVFile(file: any) { + return file.name.endsWith('.csv'); + } +/** + * reset file input and response records + * @returns observable with response + */ + fileReset() { + this.csvReader.nativeElement.value = ''; + } +} diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.html b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.html new file mode 100644 index 0000000..629480f --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.html @@ -0,0 +1,132 @@ +
                                                                                                                                                + +
                                                                                                                                                + Total: {{pager.total}} +    + Filtrează după:   + + +   + + +   + + +
                                                                                                                                                + + + + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                + Nume + Locație + OrganizațieSpecializări
                                                                                                                                                {{res.name}}{{res.city?.name}}, {{res.county?.name}}{{res.organisation?.name || 'Neafiliat'}}
                                                                                                                                                + {{elem.course_name.name}} +
                                                                                                                                                +
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.scss b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.scss new file mode 100644 index 0000000..2bc2005 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.scss @@ -0,0 +1,10 @@ +::ng-deep .specialization{ + .none-selected:before{ + content:'Specializări' !important; + } +} +::ng-deep .ngo{ + .none-selected:before{ + content:'Organizații' !important; + } +} \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.spec.ts b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.spec.ts new file mode 100644 index 0000000..7513087 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VolunteerDashboardComponent } from './volunteer-dashboard.component'; + +describe('VolunteerDashboardComponent', () => { + let component: VolunteerDashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ VolunteerDashboardComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(VolunteerDashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.ts b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.ts new file mode 100644 index 0000000..c546ca6 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-dashboard/volunteer-dashboard.component.ts @@ -0,0 +1,155 @@ +import { Component, OnInit } from '@angular/core'; +import { BreakpointObserver } from '@angular/cdk/layout'; +import { VolunteerService } from '../../../volunteers.service'; +import { CitiesCountiesService, FiltersService, AuthenticationService } from '@app/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-volunteer-dashboard', + templateUrl: './volunteer-dashboard.component.html', + styleUrls: ['./volunteer-dashboard.component.scss'] +}) +export class VolunteerDashboardComponent implements OnInit { + /** + * store the volunteers list + */ + volunteersData: any = []; + /** + * pager for the resources table + */ + pager: any = {}; + /** + * flag for HTML to know how to display data + */ + displayBlock = true; + /** + * selected filters array + */ + selected = Array(3); + /** + *values to select from when filtering + */ + NGOFilterValues: any[]; + locationFilterValues: any[]; + specializationFilterValues: any[]; + + constructor(private volunteerService: VolunteerService, public breakpointObserver: BreakpointObserver, + private citiesandcounties: CitiesCountiesService, private filterService: FiltersService, + public authService: AuthenticationService, private router: Router) { } + + ngOnInit() { + this.volunteerService.setPager(); + this.pager = this.volunteerService.getPager(); + + this.getData(); + /** + * get filterable values + */ + this.citiesandcounties.getCounties('').subscribe((response: any) => { + const aux = response; + aux.map((elem: { id: any; _id: any; }) => elem.id = elem._id); + this.locationFilterValues = aux; + }); + + this.filterService.getorganisationbyName('').subscribe((data) => { + this.NGOFilterValues = data.map((elem: any) => { + return {id: elem._id, name: elem.name}; + }); + // this.ngofilterResult = data.map((elem:any) => elem.name); + }); + this.filterService.getSpecializationFilters().subscribe((data) => { + this.specializationFilterValues = data.map((elem: any) => { + return {id: elem._id, name: elem.name}; + }); + }); + + /** + *observe screen chage and and switch to grid view if screen is too smal + */ + this.breakpointObserver.observe([ + '(max-width: 768px)' + ]).subscribe(result => { + if (result.matches) { + this.switchtoblock(); + } + }); + } +/** + * get data from server and store localy + + */ + getData() { + this.volunteerService.getVolunteers(this.pager).subscribe((element: any) => { + if (element) { + this.volunteersData = element.data; + this.pager.total = element.pager.total; + } + }); + } +/** + * send user to add volunteers. if is NGO the ngo id is static. + */ + addvolunteer() { + if (this.authService.is('NGO')) { + const navigationExtras = { + state: { + ngo: { + // TODO: extragere informatiilor din contu utilizatorului + name: this.authService.user.organisation.name, + ngoid: this.authService.user.organisation._id + } + } + }; + this.router.navigateByUrl('/volunteers/add', navigationExtras); + } else { + this.router.navigate(['volunteers/add']); + } + } +/** + * sort callback. Filters added to pager and then a request is made + * @param {any} pager the pager with the search filer added + */ + sortChanged(pager: any) { + this.pager = pager; + this.getData(); + } +/** + * search callback. Filters added to pager and then a request is made + * @param {any} pager the pager with the search filer added + */ + searchChanged(pager: any) { + this.pager = pager; + this.getData(); + } +/** + * filter callback. Filters added to pager and then a request is made + * @param {number} id the index in the pager filters and filters Selected array + */ + filterChanged(id?: number) { + console.log(this.selected[id]); + this.pager.filters[id] = this.selected[id].map((elem: any) => elem.id).join(','); + this.getData(); + } + + /** + * set flag for HTML to list view + */ + switchtolist() { + this.displayBlock = false; + } + /** + * set flag for HTML to grid view + */ + switchtoblock() { + this.displayBlock = true; + } + /** + * navigate to organisation by id + * @param {string} id of the NGO to display + */ + goToOrganisation(id: string, e: any) { + e.preventDefault(); + this.router.navigate(['../organisations/id/' + id]); + } + +} diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.html b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.html new file mode 100644 index 0000000..3d960a2 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.html @@ -0,0 +1,103 @@ +
                                                                                                                                                + +
                                                                                                                                                +

                                                                                                                                                Profil Voluntar: {{data?.name}}

                                                                                                                                                + + {{data?.email}} + {{data?.phone}} + Organizație: {{data?.organisation?.name || 'Neafiliat'}} + Localizare: {{data?.city.name}}, {{data?.county.name}} + CNP: {{data?.ssn }} + Profesie: {{data?.job || 'Nici o profesie' }} +
                                                                                                                                                + Data ultimului update: {{ (data?.updated_at | date: 'dd.MM.yyyy') || 'Nu există' }} +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + + + Listă Acreditări + +
                                                                                                                                                +
                                                                                                                                                + + + + + + + + + + + + + + + +
                                                                                                                                                Nume CursData AcredităriiAcreditat de
                                                                                                                                                {{res.course_name.name}}{{res.obtained | date: 'dd.MM.yyyy' }}{{res.accredited?.name}}
                                                                                                                                                + + +
                                                                                                                                                +
                                                                                                                                                + + Aceast voluntar nu are nici o acreditare adăugată în sistem. + +
                                                                                                                                                +
                                                                                                                                                + + + Listă Alocări + +
                                                                                                                                                +
                                                                                                                                                + + + + + + + + + + + + + + + +
                                                                                                                                                Nume OfițerData AlocăriiLocalizare
                                                                                                                                                {{res.rescue_officer.name}}{{res.created_at | date: 'dd.MM.yyyy' }}{{res.city.name}}, {{res.county.name}}
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + + Acest voluntar nu a fost alocat niciodată. + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.scss b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.spec.ts b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.spec.ts new file mode 100644 index 0000000..f6f0273 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VolunteerDetailsComponent } from './volunteer-details.component'; + +describe('VolunteerDetailsComponent', () => { + let component: VolunteerDetailsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [VolunteerDetailsComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(VolunteerDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.ts b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.ts new file mode 100644 index 0000000..1ac83e1 --- /dev/null +++ b/src/app/pages/volunteers/volunteers/components/volunteer-details/volunteer-details.component.ts @@ -0,0 +1,97 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { VolunteerService } from '../../../volunteers.service'; +import { AuthenticationService } from '@app/core'; +import { Location } from '@angular/common'; + +@Component({ + selector: 'app-volunteer-details', + templateUrl: './volunteer-details.component.html', + styleUrls: ['./volunteer-details.component.scss'] +}) +export class VolunteerDetailsComponent implements OnInit { + /** + * store volunteer data + */ + public data: any; + /** + * flag for ngtemplate in HTML + */ + hasAlocation = false; + hasAccreditation = false; + /** + * flag for HTML to display edit button + */ + canEdit = true; + /** + * flag for HTML to display loading animation + */ + loading = false; + /** + * store alocations data + */ + allocations: any[] = []; + + /** + * Vounteer details component + */ + + constructor(private volunteerService: VolunteerService, + private route: ActivatedRoute, + public authService: AuthenticationService, + private router: Router, + private location: Location) { } + + ngOnInit() { + this.getData(); + this.getAllocations(); + } +/** + * edit this volunteer + */ + edit() { + this.router.navigateByUrl(`/volunteers/edit/${this.data._id}`); + } +/** + * delete this volunteer + */ + deleteSelf() { + if (confirm('Sunteți sigur că doriți să ștergeți această intrare? Odată ștearsă nu va mai putea fi recuperată.')) { + this.loading = true; + this.volunteerService.deleteVolunteer(this.data._id).subscribe(() => { + this.loading = false; + this.location.back(); + }, () => { + this.loading = false; + }); + } + } +/** + * get alocations data from server + */ + getAllocations() { + this.volunteerService.getAllocations(this.route.snapshot.paramMap.get('id')).subscribe((data: any[]) => { + this.allocations = data; + + if (this.allocations.length > 0) { + this.hasAlocation = true; + } + }); + } +/** + * get volunteer data from server + */ + getData() { + this.volunteerService.getVolunteer(this.route.snapshot.paramMap.get('id')).subscribe((data) => { + this.data = data; + + if (data.courses && data.courses.length > 0) { + this.hasAccreditation = true; + } + + this.canEdit = this.authService.is('DSU') || + (this.authService.is('NGO') && (this.data.organisation._id === this.authService.user.organisation._id)); + }); + } + +} diff --git a/src/app/pages/volunteers/volunteers/volunteers.component.html b/src/app/pages/volunteers/volunteers/volunteers.component.html index 13b7491..90c6b64 100644 --- a/src/app/pages/volunteers/volunteers/volunteers.component.html +++ b/src/app/pages/volunteers/volunteers/volunteers.component.html @@ -1 +1 @@ -

                                                                                                                                                volunteers works!

                                                                                                                                                + \ No newline at end of file diff --git a/src/app/pages/volunteers/volunteers/volunteers.component.spec.ts b/src/app/pages/volunteers/volunteers/volunteers.component.spec.ts index 7a8cb30..e3f51cc 100644 --- a/src/app/pages/volunteers/volunteers/volunteers.component.spec.ts +++ b/src/app/pages/volunteers/volunteers/volunteers.component.spec.ts @@ -3,23 +3,23 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { VolunteersComponent } from './volunteers.component'; describe('VolunteersComponent', () => { - let component: VolunteersComponent; - let fixture: ComponentFixture; + let component: VolunteersComponent; + let fixture: ComponentFixture; - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ VolunteersComponent ] - }) - .compileComponents(); - })); + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [VolunteersComponent] + }) + .compileComponents(); + })); - beforeEach(() => { - fixture = TestBed.createComponent(VolunteersComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(VolunteersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/src/app/pages/volunteers/volunteers/volunteers.component.ts b/src/app/pages/volunteers/volunteers/volunteers.component.ts index 632a71d..321e300 100644 --- a/src/app/pages/volunteers/volunteers/volunteers.component.ts +++ b/src/app/pages/volunteers/volunteers/volunteers.component.ts @@ -1,15 +1,19 @@ import { Component, OnInit } from '@angular/core'; @Component({ - selector: 'app-volunteers', - templateUrl: './volunteers.component.html', - styleUrls: ['./volunteers.component.scss'] + selector: 'app-volunteers', + templateUrl: './volunteers.component.html', + styleUrls: ['./volunteers.component.scss'] }) + export class VolunteersComponent implements OnInit { - constructor() { } + /** + * wrapper for the volunteers pages. acts as frame + */ + constructor() { } - ngOnInit() { - } + ngOnInit() { + } } diff --git a/src/app/shared/back-button/back-button.component.html b/src/app/shared/back-button/back-button.component.html new file mode 100644 index 0000000..f3e7ca4 --- /dev/null +++ b/src/app/shared/back-button/back-button.component.html @@ -0,0 +1 @@ + << Înapoi diff --git a/src/app/shared/back-button/back-button.component.scss b/src/app/shared/back-button/back-button.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/shared/back-button/back-button.component.ts b/src/app/shared/back-button/back-button.component.ts new file mode 100644 index 0000000..8936184 --- /dev/null +++ b/src/app/shared/back-button/back-button.component.ts @@ -0,0 +1,29 @@ +import { Component, OnInit } from '@angular/core'; +import { Location } from '@angular/common'; + +@Component({ + selector: 'app-back-button', + templateUrl: './back-button.component.html', + styleUrls: ['./back-button.component.scss'] +}) + +export class BackButtonComponent implements OnInit { + + /** + * reusable back button component + */ + constructor(private location: Location) { } + + /** + * Angular ng on init + */ + ngOnInit() { } + + /** + * goes back in navigation history + */ + goBack() { + this.location.back(); + } + +} diff --git a/src/app/shared/back-button/index.ts b/src/app/shared/back-button/index.ts new file mode 100644 index 0000000..8fcb6da --- /dev/null +++ b/src/app/shared/back-button/index.ts @@ -0,0 +1,3 @@ +// start:ng42.barrel +export * from './back-button.component'; +// end:ng42.barrel diff --git a/src/app/shared/breadcrumb/breadcrumb.component.ts b/src/app/shared/breadcrumb/breadcrumb.component.ts index 4a4f43e..6d1bbcc 100755 --- a/src/app/shared/breadcrumb/breadcrumb.component.ts +++ b/src/app/shared/breadcrumb/breadcrumb.component.ts @@ -2,39 +2,41 @@ import { Component, Input, OnInit } from '@angular/core'; import { Title } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { filter, map, mergeMap } from 'rxjs/operators'; - +/** + * @ignore + */ @Component({ - selector: 'app-breadcrumb', - templateUrl: './breadcrumb.component.html', - styleUrls: ['./breadcrumb.component.scss'] + selector: 'app-breadcrumb', + templateUrl: './breadcrumb.component.html', + styleUrls: ['./breadcrumb.component.scss'] }) export class BreadcrumbComponent implements OnInit { - @Input() - layout: any; - pageInfo: any; + @Input() + layout: any; + pageInfo: any; - constructor( - private router: Router, - private activatedRoute: ActivatedRoute, - private titleService: Title - ) { - this.router.events - .pipe( - filter(event => event instanceof NavigationEnd), - map(() => this.activatedRoute), - map(route => { - while (route.firstChild) { - route = route.firstChild; - } - return route; - }), - filter(route => route.outlet === 'primary'), - mergeMap(route => route.data) - ) - .subscribe(event => { - this.titleService.setTitle(event['title']); - this.pageInfo = event; - }); - } - ngOnInit() {} + constructor( + private router: Router, + private activatedRoute: ActivatedRoute, + private titleService: Title + ) { + this.router.events + .pipe( + filter(event => event instanceof NavigationEnd), + map(() => this.activatedRoute), + map(route => { + while (route.firstChild) { + route = route.firstChild; + } + return route; + }), + filter(route => route.outlet === 'primary'), + mergeMap(route => route.data) + ) + .subscribe(event => { + this.titleService.setTitle(event['title']); + this.pageInfo = event; + }); + } + ngOnInit() {} } diff --git a/src/app/shared/button-loader/button-loader.component.ts b/src/app/shared/button-loader/button-loader.component.ts index 16ced8c..658e76f 100755 --- a/src/app/shared/button-loader/button-loader.component.ts +++ b/src/app/shared/button-loader/button-loader.component.ts @@ -1,17 +1,19 @@ import { Component, OnInit, Input } from '@angular/core'; - +/** + * @ignore + */ @Component({ - selector: 'app-button-loader', - templateUrl: './button-loader.component.html', - styleUrls: ['./button-loader.component.scss'] + selector: 'app-button-loader', + templateUrl: './button-loader.component.html', + styleUrls: ['./button-loader.component.scss'] }) export class ButtonLoaderComponent implements OnInit { - @Input() - isLoading: boolean; - @Input() - label: string; + @Input() + isLoading: boolean; + @Input() + label: string; - constructor() {} + constructor() {} - ngOnInit() {} + ngOnInit() {} } diff --git a/src/app/shared/date-parser-formatter.ts b/src/app/shared/date-parser-formatter.ts new file mode 100644 index 0000000..09a45be --- /dev/null +++ b/src/app/shared/date-parser-formatter.ts @@ -0,0 +1,126 @@ +import { Injectable } from '@angular/core'; +import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; +/** + * pad number with zeros + */ +function padNumber(value: number) { + if (isNumber(value)) { + return `0${value}`.slice(-2); + } else { + return ''; + } +} +/** + * check if is number + */ +function isNumber(value: any): boolean { + return !isNaN(toInteger(value)); +} +/** + * conver to integer + */ +function toInteger(value: any): number { + return parseInt(`${value}`, 10); +} + +/** + * Date parser class + */ +@Injectable() +export class DateParserFormatter extends NgbDateParserFormatter { + + /** + * Date parser internal variables + */ + separator: string; + ddIndex: number; + mmIndex: number; + yyIndex: number; + anioSumar = 0; + mask = 'dd.MM.yyyy'; + + /** + * Date parser set mask value + */ + + set Mask(value: string) { + this.mask = value; + } + + /** + * Date parser constructor + */ + constructor() { + super(); + this.separator = this.mask.indexOf('-') >= 0 ? '-' : this.mask.indexOf('.') >= 0 ? '.' : '/'; + const part = this.mask.split(this.separator); + this.ddIndex = part.indexOf('dd'); + this.mmIndex = part.indexOf('MM'); + this.yyIndex = part.indexOf('yyyy'); + if (this.yyIndex < 0) { + this.yyIndex = part.indexOf('yy'); + this.anioSumar = 2000; + } + } + + /** + * Date parser function + */ + parse(value: string): NgbDateStruct { + if (value) { + value = value.replace(/\.|\/|-/g, this.separator); + const dateParts = value.trim().split(this.separator); + if (dateParts.length !== 3) { + return { year: 0, month: 0, day: 0 }; + } + let anio = 0; + let mes = 0; + let dia = 0; + const today = new Date(); + if (isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { + // tslint:disable-next-line: max-line-length + dia = this.ddIndex === 0 ? toInteger(dateParts[0]) : this.ddIndex === 1 ? toInteger(dateParts[1]) : this.ddIndex === 2 ? toInteger(dateParts[2]) : 0; + // tslint:disable-next-line: max-line-length + mes = this.mmIndex === 0 ? toInteger(dateParts[0]) : this.mmIndex === 1 ? toInteger(dateParts[1]) : this.mmIndex === 2 ? toInteger(dateParts[2]) : 0; + anio = this.yyIndex === 0 ? (dateParts[0].length < 2) ? 0 : toInteger(dateParts[0]) + this.anioSumar : + this.yyIndex === 1 ? (dateParts[1].length < 2) ? 0 : toInteger(dateParts[1]) + this.anioSumar : + this.yyIndex === 2 ? (dateParts[2].length < 2) ? 0 : toInteger(dateParts[2]) + this.anioSumar : 0; + } + if (dia === 0 || mes === 0 || anio === 0) { + return { year: 0, month: 0, day: 0 }; + } + + if (anio < 100) { + anio = 2000 + anio; + } + + return { year: anio, month: mes, day: dia }; + } + return { year: 0, month: 0, day: 0 }; + } + + + /** + * Date parser format date + */ + format(date: NgbDateStruct): string { + let stringDate = ''; + if (date) { + const stringDay = isNumber(date.day) ? padNumber(date.day) : ''; + const stringMonth = isNumber(date.month) ? padNumber(date.month) : ''; + const stringYear = isNumber(date.year) ? (date.year - this.anioSumar).toString() : ''; + // tslint:disable-next-line: max-line-length + stringDate = (stringDay) ? this.mask.replace('dd', stringDay) : this.ddIndex === 0 ? this.mask.replace('dd' + this.separator, '') : this.mask.replace(this.separator + 'dd', ''); + // tslint:disable-next-line: max-line-length + stringDate = (stringMonth) ? stringDate.replace('MM', stringMonth) : this.mmIndex === 0 ? stringDate.replace('MM' + this.separator, '') : stringDate.replace(this.separator + 'MM', ''); + if (this.anioSumar) { + // tslint:disable-next-line: max-line-length + stringDate = (stringDay) ? stringDate.replace('yy', stringYear) : this.yyIndex === 0 ? stringDate.replace('yy' + this.separator, '') : stringDate.replace(this.separator + 'yy', ''); + } else { + // tslint:disable-next-line: max-line-length + stringDate = (stringDay) ? stringDate.replace('yyyy', stringYear) : this.yyIndex === 0 ? stringDate.replace('yyyy' + this.separator, '') : stringDate.replace(this.separator + 'yyyy', ''); + } + } + return stringDate; + } +} diff --git a/src/app/shared/form-error-wrapper/form-error-wrapper.component.html b/src/app/shared/form-error-wrapper/form-error-wrapper.component.html deleted file mode 100755 index c8ef00a..0000000 --- a/src/app/shared/form-error-wrapper/form-error-wrapper.component.html +++ /dev/null @@ -1,11 +0,0 @@ -
                                                                                                                                                - - - - {{formateError(errorObject[errorKey],control.errors[errorKey])}} - - - - {{apiErrorMessage}} - -
                                                                                                                                                diff --git a/src/app/shared/form-error-wrapper/form-error-wrapper.component.ts b/src/app/shared/form-error-wrapper/form-error-wrapper.component.ts deleted file mode 100755 index dea1826..0000000 --- a/src/app/shared/form-error-wrapper/form-error-wrapper.component.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { - Component, - Input, - OnChanges, - OnInit, - AfterViewInit -} from '@angular/core'; -import { ERROR_OBJECTS, ErrorMessageService } from '@app/core'; - -@Component({ - selector: 'app-form-error-wrapper', - templateUrl: './form-error-wrapper.component.html' -}) -export class FormErrorWrapperComponent - implements OnInit, OnChanges, AfterViewInit { - @Input() - public control: any; - @Input() - public controlName: string; - @Input() - public apiErrorType?: string; - // TODO : How to pass apiServiceUrl - @Input() - public apiServiceUrl?: string; - - public errorObject: Object = ERROR_OBJECTS; - public errorKeys: string[]; - public apiErrorMessage: string; - - constructor(private errorMessageService: ErrorMessageService) { - errorMessageService.errors$.subscribe( - (errors: ErrorModel.ErrorMessageObject[]) => { - errors - .filter( - e => e.type === this.apiErrorType - // && e.serviceUrl == this.apiServiceUrl - ) - .map(e => { - this.apiErrorMessage = e.error; - }); - } - ); - } - - ngOnInit() {} - - ngOnChanges() { - this.errorKeys = Object.keys(this.errorObject); - } - - ngAfterViewInit() { - this.control.valueChanges.subscribe(() => { - this.apiErrorMessage = ''; - }); - } - - formateError(errorMessage: string, errorObj: any): string { - const types = ['min', 'max', 'requiredLength']; - - types.forEach(type => { - if (!!errorObj[type]) { - errorMessage = errorMessage.replace(/{{value}}/g, errorObj[type]); - } - }); - return errorMessage.replace(/{{field}}/g, this.controlName); - } - - hasError() { - return ( - (this.control.errors && this.control.touched) || this.apiErrorMessage - ); - } -} diff --git a/src/app/shared/index.ts b/src/app/shared/index.ts index d62d714..56e6a91 100755 --- a/src/app/shared/index.ts +++ b/src/app/shared/index.ts @@ -6,4 +6,5 @@ export * from './button-loader'; export * from './layouts'; export * from './layouts/blank'; export * from './layouts/full'; +export * from './back-button'; // end:ng42.barrel diff --git a/src/app/shared/layouts/blank/blank.component.ts b/src/app/shared/layouts/blank/blank.component.ts index 7e566ad..de23716 100755 --- a/src/app/shared/layouts/blank/blank.component.ts +++ b/src/app/shared/layouts/blank/blank.component.ts @@ -1,8 +1,10 @@ import { Component } from '@angular/core'; - +/** + * @ignore + */ @Component({ - selector: 'app-blank-layout', - templateUrl: './blank.component.html', - styleUrls: [] + selector: 'app-blank-layout', + templateUrl: './blank.component.html', + styleUrls: [] }) export class BlankComponent {} diff --git a/src/app/shared/layouts/full/full.component.ts b/src/app/shared/layouts/full/full.component.ts index 71dcc5f..2d65daa 100755 --- a/src/app/shared/layouts/full/full.component.ts +++ b/src/app/shared/layouts/full/full.component.ts @@ -1,17 +1,19 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; - +/** + * @ignore + */ @Component({ - selector: 'app-full-layout', - templateUrl: './full.component.html', - styleUrls: ['./full.component.scss'] + selector: 'app-full-layout', + templateUrl: './full.component.html', + styleUrls: ['./full.component.scss'] }) export class FullComponent implements OnInit { - constructor(public router: Router) {} + constructor(public router: Router) {} - ngOnInit() { - if (this.router.url === '/') { - this.router.navigate(['/dashboard']); - } - } + ngOnInit() { + if (this.router.url === '/') { + this.router.navigate(['/dashboard']); + } + } } diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 497a3d2..f0fd886 100755 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -8,33 +8,33 @@ import { FullComponent } from '@app/shared/layouts/full/full.component'; import { SpinnerComponent } from '@app/shared/spinner.component'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { ButtonLoaderComponent } from '@app/shared/button-loader'; -import { FormErrorWrapperComponent } from '@app/shared/form-error-wrapper/form-error-wrapper.component'; - +import { TableSortDirective } from './table-sort/table-sort.directive'; +import { BackButtonComponent } from './back-button/back-button.component'; +import { TableSearchComponent } from './table-search/table-search.component'; +/** + * module list to be reused + */ +const list = [ + SpinnerComponent, + BreadcrumbComponent, + BlankComponent, + FullComponent, + ButtonLoaderComponent, + TableSortDirective, + TableSearchComponent, + BackButtonComponent +]; @NgModule({ - imports: [ - CommonModule, - FormsModule, - RouterModule, - NgbModule, - ReactiveFormsModule - ], - declarations: [ - SpinnerComponent, - BreadcrumbComponent, - BlankComponent, - FullComponent, - ButtonLoaderComponent, - FormErrorWrapperComponent - ], - exports: [ - SpinnerComponent, - BreadcrumbComponent, - BlankComponent, - FullComponent, - ButtonLoaderComponent, - FormErrorWrapperComponent - ], - entryComponents: [], - providers: [] + imports: [ + CommonModule, + FormsModule, + RouterModule, + NgbModule, + ReactiveFormsModule + ], + declarations: [...list], + exports: [...list], + entryComponents: [], + providers: [] }) export class SharedModule {} diff --git a/src/app/shared/spinner.component.ts b/src/app/shared/spinner.component.ts index 8ab510b..eecf42d 100755 --- a/src/app/shared/spinner.component.ts +++ b/src/app/shared/spinner.component.ts @@ -1,58 +1,69 @@ import { - Component, - Input, - OnDestroy, - Inject, - ViewEncapsulation + Component, + Input, + OnDestroy, + Inject, + ViewEncapsulation } from '@angular/core'; import { - Router, - NavigationStart, - NavigationEnd, - NavigationCancel, - NavigationError + Router, + NavigationStart, + NavigationEnd, + NavigationCancel, + NavigationError } from '@angular/router'; import { DOCUMENT } from '@angular/common'; @Component({ - selector: 'app-spinner', - template: `
                                                                                                                                                -
                                                                                                                                                -
                                                                                                                                                -
                                                                                                                                                -
                                                                                                                                                -
                                                                                                                                                `, - encapsulation: ViewEncapsulation.None + selector: 'app-spinner', + template: `
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                `, + encapsulation: ViewEncapsulation.None }) export class SpinnerComponent implements OnDestroy { - public isSpinnerVisible = true; + /** + * Variable for spinner visibility status + */ + public isSpinnerVisible = true; - @Input() - public backgroundColor = 'rgba(0, 115, 170, 0.69)'; + /** + * Background input variable + */ + @Input() + public backgroundColor = 'rgba(0, 115, 170, 0.69)'; + /** + * loading screen spinner trigger + */ + constructor( + private router: Router, + @Inject(DOCUMENT) private document: Document + ) { + this.router.events.subscribe( + event => { + if (event instanceof NavigationStart) { + this.isSpinnerVisible = true; + } else if ( + event instanceof NavigationEnd || + event instanceof NavigationCancel || + event instanceof NavigationError + ) { + this.isSpinnerVisible = false; + } + }, + () => { + this.isSpinnerVisible = false; + } + ); + } - constructor( - private router: Router, - @Inject(DOCUMENT) private document: Document - ) { - this.router.events.subscribe( - event => { - if (event instanceof NavigationStart) { - this.isSpinnerVisible = true; - } else if ( - event instanceof NavigationEnd || - event instanceof NavigationCancel || - event instanceof NavigationError - ) { - this.isSpinnerVisible = false; - } - }, - () => { - this.isSpinnerVisible = false; - } - ); - } - - ngOnDestroy(): void { - this.isSpinnerVisible = false; - } + /** + * Spinner component destroy method called by Angular internally + */ + ngOnDestroy(): void { + this.isSpinnerVisible = false; + } } diff --git a/src/app/shared/table-search/table-search.component.html b/src/app/shared/table-search/table-search.component.html new file mode 100644 index 0000000..9379f75 --- /dev/null +++ b/src/app/shared/table-search/table-search.component.html @@ -0,0 +1,9 @@ +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                \ No newline at end of file diff --git a/src/app/shared/table-search/table-search.component.ts b/src/app/shared/table-search/table-search.component.ts new file mode 100644 index 0000000..9a7349b --- /dev/null +++ b/src/app/shared/table-search/table-search.component.ts @@ -0,0 +1,83 @@ +import { Component, HostBinding, Input, Output, EventEmitter, HostListener, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { Subject, fromEvent } from 'rxjs'; +import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators'; + +@Component({ + selector: 'app-table-search', + templateUrl: './table-search.component.html'// , + // styleUrls: ['./table-search.directive.scss'] +}) +/** + * Reusable table search component + */ +export class TableSearchComponent implements OnInit { + /** + * internal pager value + */ + _pager: any = {}; + /** + * internal id for filter + */ + _id: number; + /** + * input val to set id for filter + */ + @Input() + set id(data: any) { + this._id = data; + } + /** + * return id + */ + get id() { + return this._id; + } + @ViewChild('searchInput', {static: true}) searchInput: ElementRef; +/** + * return pager + */ + get pager(): any { + return this._pager; + } +/** + * input val to set pager for filter + */ + @Input() + set pager(data: any) { + this._pager = data; + } +/** + * Observable sortChanged for triggering modifications in the main component + */ + @Output() searchChanged = new EventEmitter(); + + + constructor() { + } + + + ngOnInit() { + /** + * register to key events in the referenced input + */ + fromEvent(this.searchInput.nativeElement, 'keyup').pipe( + debounceTime(500), + map((event: any) => { + return event.target.value; + }), + filter(res => res.length > 2 || res.length === 0), + distinctUntilChanged(), + ).subscribe(term => { + this.search(term); + }); + } + /** + * emit search event with the input term + * @param {string} term the current value of the input + */ + search(term: string) { + this.pager.filters[this.id] = term; + this.searchChanged.emit({...this.pager}); + } + +} diff --git a/src/app/shared/table-sort/table-sort.directive.spec.ts b/src/app/shared/table-sort/table-sort.directive.spec.ts new file mode 100644 index 0000000..0744093 --- /dev/null +++ b/src/app/shared/table-sort/table-sort.directive.spec.ts @@ -0,0 +1,8 @@ +import { TableSortDirective } from './table-sort.directive'; + +describe('TableSortDirective', () => { + it('should create an instance', () => { + const directive = new TableSortDirective(); + expect(directive).toBeTruthy(); + }); +}); diff --git a/src/app/shared/table-sort/table-sort.directive.ts b/src/app/shared/table-sort/table-sort.directive.ts new file mode 100644 index 0000000..e52792f --- /dev/null +++ b/src/app/shared/table-sort/table-sort.directive.ts @@ -0,0 +1,63 @@ +import { Directive, HostBinding, Input, Output, EventEmitter, HostListener } from '@angular/core'; + +@Directive({ + selector: '[appTableSort]' +}) +export class TableSortDirective { + /** + * internal pager value + */ + _pager: any = {}; + /** + * angular bindings for class display + */ + @HostBinding('class.sort') active = false; + @HostBinding('class.asc') asc = false; + @HostBinding('class.desc') desc = false; +/** + * value + */ + @Input() value: any; +/** + * return pager + */ + get pager(): any { + return this._pager; + } +/** + * set pager from input value and adjendat values + */ + @Input() + set pager(data: any) { + this._pager = data; + this.active = this._pager.sort === this.value; + this.asc = this._pager.sort === this.value && this._pager.method === 'ASC'; + this.desc = this._pager.sort === this.value && this._pager.method === 'DESC'; + } + /** + * Observable sortChanged for triggering modifications in the main component + */ + @Output() sortChanged = new EventEmitter(); + /** + * register to click events in the referenced input + */ + @HostListener('click') onClick() { + this.sort(); + } + + constructor() { + } +/** + * emit sort event on click + */ + sort() { + if (this.pager.sort === this.value) { + this.pager.method = this.pager.method === 'ASC' ? 'DESC' : 'ASC'; + } else { + this.pager.method = 'ASC'; + } + this.pager.sort = this.value; + this.sortChanged.emit({...this.pager}); + } + +} diff --git a/src/app/top-bar/components/current-profile/current-profile.component.html b/src/app/top-bar/components/current-profile/current-profile.component.html index 0c370cb..318ef31 100644 --- a/src/app/top-bar/components/current-profile/current-profile.component.html +++ b/src/app/top-bar/components/current-profile/current-profile.component.html @@ -1,10 +1,10 @@
                                                                                                                                                - +
                                                                                                                                                - Test User - DSU + {{ user.name }} + {{ parseRole(user.role) }}
                                                                                                                                                \ No newline at end of file diff --git a/src/app/top-bar/components/current-profile/current-profile.component.scss b/src/app/top-bar/components/current-profile/current-profile.component.scss index 77b0f8b..0440d63 100644 --- a/src/app/top-bar/components/current-profile/current-profile.component.scss +++ b/src/app/top-bar/components/current-profile/current-profile.component.scss @@ -17,9 +17,17 @@ } } .name{ - span{ + span { display: block; + line-height: 20px; + margin-bottom: 0; + max-height: 40px; + max-width: 200px; + overflow: hidden; + white-space: pre-wrap; width: 100%; + word-break: break-word; + word-wrap: break-word; } } diff --git a/src/app/top-bar/components/current-profile/current-profile.component.ts b/src/app/top-bar/components/current-profile/current-profile.component.ts index 6183674..7f06d85 100644 --- a/src/app/top-bar/components/current-profile/current-profile.component.ts +++ b/src/app/top-bar/components/current-profile/current-profile.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { AuthenticationService } from '@app/core'; @Component({ selector: 'app-current-profile', @@ -6,10 +7,27 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./current-profile.component.scss'] }) export class CurrentProfileComponent implements OnInit { + /** + * user to be displayed + */ + user: any = { + 'email': 'no login' + }; - constructor() { } + constructor(public authService: AuthenticationService) {} + /** + * get current user from server + */ ngOnInit() { - } + this.user = this.authService.user; + } -} \ No newline at end of file + /** + * parse roleNumber in order to display role abreviation + */ + parseRole(roleNumber: number): string { + const roles = ['OFF', 'INS', 'NGO', 'DSU']; + return roles[roleNumber]; + } +} diff --git a/src/app/top-bar/top-bar.component.html b/src/app/top-bar/top-bar.component.html index a8eb433..328e2bd 100644 --- a/src/app/top-bar/top-bar.component.html +++ b/src/app/top-bar/top-bar.component.html @@ -1,44 +1,53 @@ -
                                                                                                                                                - +
                                                                                                                                                +
                                                                                                                                                - diff --git a/src/app/top-bar/top-bar.component.scss b/src/app/top-bar/top-bar.component.scss index 05eb840..292901a 100644 --- a/src/app/top-bar/top-bar.component.scss +++ b/src/app/top-bar/top-bar.component.scss @@ -5,6 +5,14 @@ header { .logo { display: inline-block; height: 60px; + width:60px; + margin: auto; + img{ + margin: auto; + display: block; + max-width: 100%; + max-height: 100%; + } } .nav { @@ -28,7 +36,8 @@ header { background-color: #264998; color: #fff; } -.yellow{ + +.yellow { background-color:rgb(243, 217, 115 ); } /* Layout */ @@ -53,30 +62,26 @@ header { height: 100%; } -/* Paddings */ -.padding-medium { - padding: 24px; -} - -.padding-left-medium { - padding-left: 24px; +.hidden-button { + display: none; } -.padding-right-medium { - padding-right: 24px; +@media (max-width: 1199px) { + .hidden-button { + display: block; + } } -.padding-left-xmedium { - padding-left: 30px; +.dropdown-item:active { + background-color: gray; } -.padding-right-xmedium { - padding-right: 30px; +.dropdown-item:focus { + outline:none; + border:none; } -.padding-top-xlarge { - padding-top: 54px; -} - -/* Margins */ - +.active-link { + background-color: #264998; + color: #fff!important; +} \ No newline at end of file diff --git a/src/app/top-bar/top-bar.component.ts b/src/app/top-bar/top-bar.component.ts index 38868d0..1c3db2e 100644 --- a/src/app/top-bar/top-bar.component.ts +++ b/src/app/top-bar/top-bar.component.ts @@ -1,14 +1,43 @@ import { Component, OnInit } from '@angular/core'; -import { CurrentProfileComponent } from './components/current-profile/current-profile.component' +import { AuthenticationService } from '@app/core'; +import { Router } from '@angular/router'; + @Component({ selector: 'app-top-bar', templateUrl: './top-bar.component.html', styleUrls: ['./top-bar.component.scss'] }) + export class TopBarComponent implements OnInit { + /** + * top bar to be shown over all the other components + */ + constructor(public authService: AuthenticationService, + private router: Router) {} + + ngOnInit() { } - constructor() { } + /** + * logout from account + */ + logout() { + this.authService.logout().subscribe( + (didlogout: Boolean) => { + if (didlogout) { + this.router.navigate(['/login']); + } + }, + (error: any) => { + console.log('logout error: ', error); + }); + } - ngOnInit() { + /** + * go to home path on icon click + */ + goToDashboard() { + this.router.navigate(['/' + this.authService.homePath()], { + replaceUrl: true + }); } -} \ No newline at end of file +} diff --git a/src/app/volunteers.ts b/src/app/volunteers.ts deleted file mode 100644 index 0a44313..0000000 --- a/src/app/volunteers.ts +++ /dev/null @@ -1,29 +0,0 @@ -export const volunteers = [ - { - first_name: 'Ion', - last_name: 'Popescu', - email: 'ion.popescu@example.com', - phone_number: '555-1212', - access_code: '1234', - county: 'Bihor', - specialization: 'Dogs', - }, - { - first_name: 'Ion', - last_name: 'Popescu', - email: 'ion.popescu@example.com', - phone_number: '555-1212', - access_code: '1234', - county: 'Bihor', - specialization: 'Dogs', - }, - { - first_name: 'Ion', - last_name: 'Popescu', - email: 'ion.popescu@example.com', - phone_number: '555-1212', - access_code: '1234', - county: 'Bihor', - specialization: 'Dogs', - } - ]; \ No newline at end of file diff --git a/src/assets/images/DSU_logo-orig.PNG b/src/assets/images/DSU_logo-orig.PNG new file mode 100644 index 0000000..c9d9af9 Binary files /dev/null and b/src/assets/images/DSU_logo-orig.PNG differ diff --git a/src/assets/images/DSU_logo.PNG b/src/assets/images/DSU_logo.PNG new file mode 100644 index 0000000..dd2c2b3 Binary files /dev/null and b/src/assets/images/DSU_logo.PNG differ diff --git a/src/assets/images/GFDPR_logo.jpg b/src/assets/images/GFDPR_logo.jpg new file mode 100644 index 0000000..ed5d14a Binary files /dev/null and b/src/assets/images/GFDPR_logo.jpg differ diff --git a/src/assets/images/code_4_romania_logo.svg b/src/assets/images/code_4_romania_logo.svg new file mode 100644 index 0000000..3c7f4c4 --- /dev/null +++ b/src/assets/images/code_4_romania_logo.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/dsu.jpg b/src/assets/images/dsu.jpg deleted file mode 100644 index b635757..0000000 Binary files a/src/assets/images/dsu.jpg and /dev/null differ diff --git a/src/assets/images/medkit.svg b/src/assets/images/medkit.svg new file mode 100644 index 0000000..5fd252b --- /dev/null +++ b/src/assets/images/medkit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/volunteers.svg b/src/assets/images/volunteers.svg new file mode 100644 index 0000000..1add45e --- /dev/null +++ b/src/assets/images/volunteers.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/world_bank_logo.JPG b/src/assets/images/world_bank_logo.JPG new file mode 100644 index 0000000..f2aa30e Binary files /dev/null and b/src/assets/images/world_bank_logo.JPG differ diff --git a/src/assets/json/category.json b/src/assets/json/category.json new file mode 100644 index 0000000..6dabd6a --- /dev/null +++ b/src/assets/json/category.json @@ -0,0 +1,7 @@ +[ +{"_id":"1","name":"Adapostire"}, +{"_id":"2","name":"Echipamente"}, +{"_id":"3","name":"Caini utilitari"}, +{"_id":"4","name":"Transport"}, +{"_id":"5","name":"Altele "} +] \ No newline at end of file diff --git a/src/assets/json/cities.json b/src/assets/json/cities.json new file mode 100644 index 0000000..bc62dff --- /dev/null +++ b/src/assets/json/cities.json @@ -0,0 +1,68747 @@ +[ + { + "id": 1, + "name": "Alba Iulia", + "county": "Alba" + }, + { + "id": 2, + "name": "Barabant", + "county": "Alba" + }, + { + "id": 3, + "name": "Micesti", + "county": "Alba" + }, + { + "id": 4, + "name": "Oarda", + "county": "Alba" + }, + { + "id": 5, + "name": "Paclisa", + "county": "Alba" + }, + { + "id": 6, + "name": "Ciugud", + "county": "Alba" + }, + { + "id": 7, + "name": "Drambar", + "county": "Alba" + }, + { + "id": 8, + "name": "Limba", + "county": "Alba" + }, + { + "id": 9, + "name": "Hapria", + "county": "Alba" + }, + { + "id": 10, + "name": "Seusa", + "county": "Alba" + }, + { + "id": 11, + "name": "Teleac", + "county": "Alba" + }, + { + "id": 12, + "name": "Abrud", + "county": "Alba" + }, + { + "id": 13, + "name": "Abrud-Sat", + "county": "Alba" + }, + { + "id": 14, + "name": "Gura Cornei", + "county": "Alba" + }, + { + "id": 15, + "name": "Soharu", + "county": "Alba" + }, + { + "id": 16, + "name": "Aiud", + "county": "Alba" + }, + { + "id": 17, + "name": "Aiudul de Sus", + "county": "Alba" + }, + { + "id": 18, + "name": "Gambas", + "county": "Alba" + }, + { + "id": 19, + "name": "Magina", + "county": "Alba" + }, + { + "id": 20, + "name": "Pagida", + "county": "Alba" + }, + { + "id": 21, + "name": "Ciumbrud", + "county": "Alba" + }, + { + "id": 22, + "name": "Garbova de Jos", + "county": "Alba" + }, + { + "id": 23, + "name": "Garbova de Sus", + "county": "Alba" + }, + { + "id": 24, + "name": "Garbovita", + "county": "Alba" + }, + { + "id": 25, + "name": "Sancrai", + "county": "Alba" + }, + { + "id": 26, + "name": "Tifra", + "county": "Alba" + }, + { + "id": 27, + "name": "Blaj", + "county": "Alba" + }, + { + "id": 28, + "name": "Deleni-Obarsie", + "county": "Alba" + }, + { + "id": 29, + "name": "Flitesti", + "county": "Alba" + }, + { + "id": 30, + "name": "Izvoarele", + "county": "Alba" + }, + { + "id": 31, + "name": "Petrisat", + "county": "Alba" + }, + { + "id": 32, + "name": "Tiur", + "county": "Alba" + }, + { + "id": 33, + "name": "Veza", + "county": "Alba" + }, + { + "id": 34, + "name": "Manarade", + "county": "Alba" + }, + { + "id": 35, + "name": "Spatac", + "county": "Alba" + }, + { + "id": 36, + "name": "Campeni", + "county": "Alba" + }, + { + "id": 37, + "name": "Boncesti", + "county": "Alba" + }, + { + "id": 38, + "name": "Borlesti", + "county": "Alba" + }, + { + "id": 39, + "name": "Botesti", + "county": "Alba" + }, + { + "id": 40, + "name": "Certege", + "county": "Alba" + }, + { + "id": 41, + "name": "Coasta Vascului", + "county": "Alba" + }, + { + "id": 42, + "name": "Dandut", + "county": "Alba" + }, + { + "id": 43, + "name": "Dealu Bistrii", + "county": "Alba" + }, + { + "id": 44, + "name": "Dealu Capsei", + "county": "Alba" + }, + { + "id": 45, + "name": "Dric", + "county": "Alba" + }, + { + "id": 46, + "name": "Fata Abrudului", + "county": "Alba" + }, + { + "id": 47, + "name": "Floresti", + "county": "Alba" + }, + { + "id": 48, + "name": "Furduiesti", + "county": "Alba" + }, + { + "id": 49, + "name": "Mihoesti", + "county": "Alba" + }, + { + "id": 50, + "name": "Motorasti", + "county": "Alba" + }, + { + "id": 51, + "name": "Peste Valea Bistrii", + "county": "Alba" + }, + { + "id": 52, + "name": "Poduri", + "county": "Alba" + }, + { + "id": 53, + "name": "Sorlita", + "county": "Alba" + }, + { + "id": 54, + "name": "Tomusesti", + "county": "Alba" + }, + { + "id": 55, + "name": "Valea Bistrii", + "county": "Alba" + }, + { + "id": 56, + "name": "Valea Caselor", + "county": "Alba" + }, + { + "id": 57, + "name": "Varsi", + "county": "Alba" + }, + { + "id": 58, + "name": "Cugir", + "county": "Alba" + }, + { + "id": 59, + "name": "Bocsitura", + "county": "Alba" + }, + { + "id": 60, + "name": "Bucuru", + "county": "Alba" + }, + { + "id": 61, + "name": "Calene", + "county": "Alba" + }, + { + "id": 62, + "name": "Feteni", + "county": "Alba" + }, + { + "id": 63, + "name": "Goasele", + "county": "Alba" + }, + { + "id": 64, + "name": "Mugesti", + "county": "Alba" + }, + { + "id": 65, + "name": "Vinerea", + "county": "Alba" + }, + { + "id": 66, + "name": "Ocna Mures", + "county": "Alba" + }, + { + "id": 67, + "name": "Uioara de Jos", + "county": "Alba" + }, + { + "id": 68, + "name": "Uioara de Sus", + "county": "Alba" + }, + { + "id": 69, + "name": "Cisteiu de Mures", + "county": "Alba" + }, + { + "id": 70, + "name": "Micoslaca", + "county": "Alba" + }, + { + "id": 71, + "name": "Razboieni-Cetate", + "county": "Alba" + }, + { + "id": 72, + "name": "Sebes", + "county": "Alba" + }, + { + "id": 73, + "name": "Lancram", + "county": "Alba" + }, + { + "id": 74, + "name": "Petresti", + "county": "Alba" + }, + { + "id": 75, + "name": "Rahau", + "county": "Alba" + }, + { + "id": 76, + "name": "Zlatna", + "county": "Alba" + }, + { + "id": 77, + "name": "Botesti", + "county": "Alba" + }, + { + "id": 78, + "name": "Budeni", + "county": "Alba" + }, + { + "id": 79, + "name": "Dealu Roatei", + "county": "Alba" + }, + { + "id": 80, + "name": "Dobrot", + "county": "Alba" + }, + { + "id": 81, + "name": "Dumbrava", + "county": "Alba" + }, + { + "id": 82, + "name": "Fenes", + "county": "Alba" + }, + { + "id": 83, + "name": "Galati", + "county": "Alba" + }, + { + "id": 84, + "name": "Izvoru Ampoiului", + "county": "Alba" + }, + { + "id": 85, + "name": "Patrangeni", + "county": "Alba" + }, + { + "id": 86, + "name": "Pirita", + "county": "Alba" + }, + { + "id": 87, + "name": "Parau Gruiului", + "county": "Alba" + }, + { + "id": 88, + "name": "Podu lui Paul", + "county": "Alba" + }, + { + "id": 89, + "name": "Runc", + "county": "Alba" + }, + { + "id": 90, + "name": "Rusi", + "county": "Alba" + }, + { + "id": 91, + "name": "Suseni", + "county": "Alba" + }, + { + "id": 92, + "name": "Trampoiele", + "county": "Alba" + }, + { + "id": 93, + "name": "Valea Mica", + "county": "Alba" + }, + { + "id": 94, + "name": "Valtori", + "county": "Alba" + }, + { + "id": 95, + "name": "Albac", + "county": "Alba" + }, + { + "id": 96, + "name": "Barasti", + "county": "Alba" + }, + { + "id": 97, + "name": "Budaiesti", + "county": "Alba" + }, + { + "id": 98, + "name": "Cionesti", + "county": "Alba" + }, + { + "id": 99, + "name": "Costesti", + "county": "Alba" + }, + { + "id": 100, + "name": "Dealu Lamasoi", + "county": "Alba" + }, + { + "id": 101, + "name": "Deve", + "county": "Alba" + }, + { + "id": 102, + "name": "Dupa Plese", + "county": "Alba" + }, + { + "id": 103, + "name": "Fata", + "county": "Alba" + }, + { + "id": 104, + "name": "Plesesti", + "county": "Alba" + }, + { + "id": 105, + "name": "Potionci", + "county": "Alba" + }, + { + "id": 106, + "name": "Rogoz", + "county": "Alba" + }, + { + "id": 107, + "name": "Rosesti", + "county": "Alba" + }, + { + "id": 108, + "name": "Rusesti", + "county": "Alba" + }, + { + "id": 109, + "name": "Sohodol", + "county": "Alba" + }, + { + "id": 110, + "name": "Tamboresti", + "county": "Alba" + }, + { + "id": 111, + "name": "Almasu Mare", + "county": "Alba" + }, + { + "id": 112, + "name": "Almasu de Mijloc", + "county": "Alba" + }, + { + "id": 113, + "name": "Bradet", + "county": "Alba" + }, + { + "id": 114, + "name": "Cheile Cibului", + "county": "Alba" + }, + { + "id": 115, + "name": "Cib", + "county": "Alba" + }, + { + "id": 116, + "name": "Glod", + "county": "Alba" + }, + { + "id": 117, + "name": "Nadastia", + "county": "Alba" + }, + { + "id": 118, + "name": "Arieseni", + "county": "Alba" + }, + { + "id": 119, + "name": "Avramesti", + "county": "Alba" + }, + { + "id": 120, + "name": "Bubesti", + "county": "Alba" + }, + { + "id": 121, + "name": "Casa de Piatra", + "county": "Alba" + }, + { + "id": 122, + "name": "Cobles", + "county": "Alba" + }, + { + "id": 123, + "name": "Dealu Bajului", + "county": "Alba" + }, + { + "id": 124, + "name": "Fata Cristesei", + "county": "Alba" + }, + { + "id": 125, + "name": "Fata Lapusului", + "county": "Alba" + }, + { + "id": 126, + "name": "Galbena", + "county": "Alba" + }, + { + "id": 127, + "name": "Hodobana", + "county": "Alba" + }, + { + "id": 128, + "name": "Izlaz", + "county": "Alba" + }, + { + "id": 129, + "name": "Pantesti", + "county": "Alba" + }, + { + "id": 130, + "name": "Patrahaitesti", + "county": "Alba" + }, + { + "id": 131, + "name": "Poienita", + "county": "Alba" + }, + { + "id": 132, + "name": "Ravicesti", + "county": "Alba" + }, + { + "id": 133, + "name": "Sturu", + "county": "Alba" + }, + { + "id": 134, + "name": "Stei-Arieseni", + "county": "Alba" + }, + { + "id": 135, + "name": "Vanvucesti", + "county": "Alba" + }, + { + "id": 136, + "name": "Avram Iancu", + "county": "Alba" + }, + { + "id": 137, + "name": "Achimetesti", + "county": "Alba" + }, + { + "id": 138, + "name": "Avramesti", + "county": "Alba" + }, + { + "id": 139, + "name": "Badai", + "county": "Alba" + }, + { + "id": 140, + "name": "Boldesti", + "county": "Alba" + }, + { + "id": 141, + "name": "Calugaresti", + "county": "Alba" + }, + { + "id": 142, + "name": "Casoaia", + "county": "Alba" + }, + { + "id": 143, + "name": "Candesti", + "county": "Alba" + }, + { + "id": 144, + "name": "Carasti", + "county": "Alba" + }, + { + "id": 145, + "name": "Cartulesti", + "county": "Alba" + }, + { + "id": 146, + "name": "Cocesti", + "county": "Alba" + }, + { + "id": 147, + "name": "Cocosesti", + "county": "Alba" + }, + { + "id": 148, + "name": "Coroiesti", + "county": "Alba" + }, + { + "id": 149, + "name": "Dealu Crisului", + "county": "Alba" + }, + { + "id": 150, + "name": "Dolesti", + "county": "Alba" + }, + { + "id": 151, + "name": "Dumacesti", + "county": "Alba" + }, + { + "id": 152, + "name": "Gojeiesti", + "county": "Alba" + }, + { + "id": 153, + "name": "Heleresti", + "county": "Alba" + }, + { + "id": 154, + "name": "Incesti", + "county": "Alba" + }, + { + "id": 155, + "name": "Jojei", + "county": "Alba" + }, + { + "id": 156, + "name": "Martesti", + "county": "Alba" + }, + { + "id": 157, + "name": "Orgesti", + "county": "Alba" + }, + { + "id": 158, + "name": "Patrutesti", + "county": "Alba" + }, + { + "id": 159, + "name": "Plai", + "county": "Alba" + }, + { + "id": 160, + "name": "Puselesti", + "county": "Alba" + }, + { + "id": 161, + "name": "Soicesti", + "county": "Alba" + }, + { + "id": 162, + "name": "Stertesti", + "county": "Alba" + }, + { + "id": 163, + "name": "Tarsa", + "county": "Alba" + }, + { + "id": 164, + "name": "Tarsa-Plai", + "county": "Alba" + }, + { + "id": 165, + "name": "Valea Maciului", + "county": "Alba" + }, + { + "id": 166, + "name": "Valea Utului", + "county": "Alba" + }, + { + "id": 167, + "name": "Verdesti", + "county": "Alba" + }, + { + "id": 168, + "name": "Vidrisoara", + "county": "Alba" + }, + { + "id": 169, + "name": "Baia de Aries", + "county": "Alba" + }, + { + "id": 170, + "name": "Brazesti", + "county": "Alba" + }, + { + "id": 171, + "name": "Cioara de Sus", + "county": "Alba" + }, + { + "id": 172, + "name": "Muncelu", + "county": "Alba" + }, + { + "id": 173, + "name": "Sartas", + "county": "Alba" + }, + { + "id": 174, + "name": "Simulesti", + "county": "Alba" + }, + { + "id": 175, + "name": "Berghin", + "county": "Alba" + }, + { + "id": 176, + "name": "Ghirbom", + "county": "Alba" + }, + { + "id": 177, + "name": "Henig", + "county": "Alba" + }, + { + "id": 178, + "name": "Straja", + "county": "Alba" + }, + { + "id": 179, + "name": "Bistra", + "county": "Alba" + }, + { + "id": 180, + "name": "Aronesti", + "county": "Alba" + }, + { + "id": 181, + "name": "Balesti", + "county": "Alba" + }, + { + "id": 182, + "name": "Balesti-Catun", + "county": "Alba" + }, + { + "id": 183, + "name": "Barlesti", + "county": "Alba" + }, + { + "id": 184, + "name": "Cheleteni", + "county": "Alba" + }, + { + "id": 185, + "name": "Ciuldesti", + "county": "Alba" + }, + { + "id": 186, + "name": "Cretesti", + "county": "Alba" + }, + { + "id": 187, + "name": "Dealu Muntelui", + "county": "Alba" + }, + { + "id": 188, + "name": "Dambureni", + "county": "Alba" + }, + { + "id": 189, + "name": "Durasti", + "county": "Alba" + }, + { + "id": 190, + "name": "Ganesti", + "county": "Alba" + }, + { + "id": 191, + "name": "Garde", + "county": "Alba" + }, + { + "id": 192, + "name": "Hodisesti", + "county": "Alba" + }, + { + "id": 193, + "name": "Hudricesti", + "county": "Alba" + }, + { + "id": 194, + "name": "Lipaia", + "county": "Alba" + }, + { + "id": 195, + "name": "Lunca Larga", + "county": "Alba" + }, + { + "id": 196, + "name": "Lunca Merilor", + "county": "Alba" + }, + { + "id": 197, + "name": "Mihaiesti", + "county": "Alba" + }, + { + "id": 198, + "name": "Namas", + "county": "Alba" + }, + { + "id": 199, + "name": "Novacesti", + "county": "Alba" + }, + { + "id": 200, + "name": "Perjesti", + "county": "Alba" + }, + { + "id": 201, + "name": "Poiana", + "county": "Alba" + }, + { + "id": 202, + "name": "Poiu", + "county": "Alba" + }, + { + "id": 203, + "name": "Ratitis", + "county": "Alba" + }, + { + "id": 204, + "name": "Runcuri", + "county": "Alba" + }, + { + "id": 205, + "name": "Salagesti", + "county": "Alba" + }, + { + "id": 206, + "name": "Stefanca", + "county": "Alba" + }, + { + "id": 207, + "name": "Tolacesti", + "county": "Alba" + }, + { + "id": 208, + "name": "Tomnatec", + "county": "Alba" + }, + { + "id": 209, + "name": "Trisoresti", + "county": "Alba" + }, + { + "id": 210, + "name": "Taranesti", + "county": "Alba" + }, + { + "id": 211, + "name": "Varsi-Rontu", + "county": "Alba" + }, + { + "id": 212, + "name": "Varsii Mari", + "county": "Alba" + }, + { + "id": 213, + "name": "Varsii Mici", + "county": "Alba" + }, + { + "id": 214, + "name": "Blandiana", + "county": "Alba" + }, + { + "id": 215, + "name": "Acmariu", + "county": "Alba" + }, + { + "id": 216, + "name": "Ibru", + "county": "Alba" + }, + { + "id": 217, + "name": "Poieni", + "county": "Alba" + }, + { + "id": 218, + "name": "Racatau", + "county": "Alba" + }, + { + "id": 219, + "name": "Bucium", + "county": "Alba" + }, + { + "id": 220, + "name": "Anghelesti", + "county": "Alba" + }, + { + "id": 221, + "name": "Bisericani", + "county": "Alba" + }, + { + "id": 222, + "name": "Bucium-Sat", + "county": "Alba" + }, + { + "id": 223, + "name": "Cerbu", + "county": "Alba" + }, + { + "id": 224, + "name": "Ciuculesti", + "county": "Alba" + }, + { + "id": 225, + "name": "Coleseni", + "county": "Alba" + }, + { + "id": 226, + "name": "Dogaresti", + "county": "Alba" + }, + { + "id": 227, + "name": "Feresti", + "county": "Alba" + }, + { + "id": 228, + "name": "Floresti", + "county": "Alba" + }, + { + "id": 229, + "name": "Gura Izbitei", + "county": "Alba" + }, + { + "id": 230, + "name": "Helesti", + "county": "Alba" + }, + { + "id": 231, + "name": "Izbicioara", + "county": "Alba" + }, + { + "id": 232, + "name": "Izbita", + "county": "Alba" + }, + { + "id": 233, + "name": "Jurcuiesti", + "county": "Alba" + }, + { + "id": 234, + "name": "Lupulesti", + "county": "Alba" + }, + { + "id": 235, + "name": "Magura", + "county": "Alba" + }, + { + "id": 236, + "name": "Muntari", + "county": "Alba" + }, + { + "id": 237, + "name": "Petreni", + "county": "Alba" + }, + { + "id": 238, + "name": "Poiana", + "county": "Alba" + }, + { + "id": 239, + "name": "Poieni", + "county": "Alba" + }, + { + "id": 240, + "name": "Stalnisoara", + "county": "Alba" + }, + { + "id": 241, + "name": "Valea Abruzel", + "county": "Alba" + }, + { + "id": 242, + "name": "Valea Alba", + "county": "Alba" + }, + { + "id": 243, + "name": "Valea Cerbului", + "county": "Alba" + }, + { + "id": 244, + "name": "Valea Negrilesii", + "county": "Alba" + }, + { + "id": 245, + "name": "Valea Poienii", + "county": "Alba" + }, + { + "id": 246, + "name": "Valea Sesii", + "county": "Alba" + }, + { + "id": 247, + "name": "Valeni", + "county": "Alba" + }, + { + "id": 248, + "name": "Valcea", + "county": "Alba" + }, + { + "id": 249, + "name": "Cenade", + "county": "Alba" + }, + { + "id": 250, + "name": "Capu Dealului", + "county": "Alba" + }, + { + "id": 251, + "name": "Gorgan", + "county": "Alba" + }, + { + "id": 252, + "name": "Cergau Mare", + "county": "Alba" + }, + { + "id": 253, + "name": "Cergau Mic", + "county": "Alba" + }, + { + "id": 254, + "name": "Lupu", + "county": "Alba" + }, + { + "id": 255, + "name": "Ceru-Bacainti", + "county": "Alba" + }, + { + "id": 256, + "name": "Bolovanesti", + "county": "Alba" + }, + { + "id": 257, + "name": "Bulbuc", + "county": "Alba" + }, + { + "id": 258, + "name": "Cucuta", + "county": "Alba" + }, + { + "id": 259, + "name": "Curpeni", + "county": "Alba" + }, + { + "id": 260, + "name": "Dumbravita", + "county": "Alba" + }, + { + "id": 261, + "name": "Fantanele", + "county": "Alba" + }, + { + "id": 262, + "name": "Grosi", + "county": "Alba" + }, + { + "id": 263, + "name": "Valea Mare", + "county": "Alba" + }, + { + "id": 264, + "name": "Viezuri", + "county": "Alba" + }, + { + "id": 265, + "name": "Cetatea de Balta", + "county": "Alba" + }, + { + "id": 266, + "name": "Craciunelu de Sus", + "county": "Alba" + }, + { + "id": 267, + "name": "Santamarie", + "county": "Alba" + }, + { + "id": 268, + "name": "Tatarlaua", + "county": "Alba" + }, + { + "id": 269, + "name": "Ciuruleasa", + "county": "Alba" + }, + { + "id": 270, + "name": "Bidigesti", + "county": "Alba" + }, + { + "id": 271, + "name": "Bodresti", + "county": "Alba" + }, + { + "id": 272, + "name": "Boglesti", + "county": "Alba" + }, + { + "id": 273, + "name": "Buninginea", + "county": "Alba" + }, + { + "id": 274, + "name": "Ghedulesti", + "county": "Alba" + }, + { + "id": 275, + "name": "Matisesti", + "county": "Alba" + }, + { + "id": 276, + "name": "Moraresti", + "county": "Alba" + }, + { + "id": 277, + "name": "Vulcan", + "county": "Alba" + }, + { + "id": 278, + "name": "Calnic", + "county": "Alba" + }, + { + "id": 279, + "name": "Cut", + "county": "Alba" + }, + { + "id": 280, + "name": "Deal", + "county": "Alba" + }, + { + "id": 281, + "name": "Cricau", + "county": "Alba" + }, + { + "id": 282, + "name": "Craiva", + "county": "Alba" + }, + { + "id": 283, + "name": "Tibru", + "county": "Alba" + }, + { + "id": 284, + "name": "Craciunelu de Jos", + "county": "Alba" + }, + { + "id": 285, + "name": "Bucerdea Granoasa", + "county": "Alba" + }, + { + "id": 286, + "name": "Cornu", + "county": "Alba" + }, + { + "id": 287, + "name": "Padure", + "county": "Alba" + }, + { + "id": 288, + "name": "Panca", + "county": "Alba" + }, + { + "id": 289, + "name": "Daia Romana", + "county": "Alba" + }, + { + "id": 290, + "name": "Dostat", + "county": "Alba" + }, + { + "id": 291, + "name": "Boz", + "county": "Alba" + }, + { + "id": 292, + "name": "Dealu Dostatului", + "county": "Alba" + }, + { + "id": 293, + "name": "Farau", + "county": "Alba" + }, + { + "id": 294, + "name": "Heria", + "county": "Alba" + }, + { + "id": 295, + "name": "Medves", + "county": "Alba" + }, + { + "id": 296, + "name": "Sanbenedic", + "county": "Alba" + }, + { + "id": 297, + "name": "Silea", + "county": "Alba" + }, + { + "id": 298, + "name": "Galda de Jos", + "county": "Alba" + }, + { + "id": 299, + "name": "Benic", + "county": "Alba" + }, + { + "id": 300, + "name": "Cetea", + "county": "Alba" + }, + { + "id": 301, + "name": "Galda de Sus", + "county": "Alba" + }, + { + "id": 302, + "name": "Lupseni", + "county": "Alba" + }, + { + "id": 303, + "name": "Magura", + "county": "Alba" + }, + { + "id": 304, + "name": "Mesentea", + "county": "Alba" + }, + { + "id": 305, + "name": "Oiejdea", + "county": "Alba" + }, + { + "id": 306, + "name": "Poiana Galdei", + "county": "Alba" + }, + { + "id": 307, + "name": "Raicani", + "county": "Alba" + }, + { + "id": 308, + "name": "Zagris", + "county": "Alba" + }, + { + "id": 309, + "name": "Garbova", + "county": "Alba" + }, + { + "id": 310, + "name": "Carpinis", + "county": "Alba" + }, + { + "id": 311, + "name": "Reciu", + "county": "Alba" + }, + { + "id": 312, + "name": "Garda de Sus", + "county": "Alba" + }, + { + "id": 313, + "name": "Biharia", + "county": "Alba" + }, + { + "id": 314, + "name": "Dealu Frumos", + "county": "Alba" + }, + { + "id": 315, + "name": "Dealu Ordancusii", + "county": "Alba" + }, + { + "id": 316, + "name": "Dobresti", + "county": "Alba" + }, + { + "id": 317, + "name": "Ghetari", + "county": "Alba" + }, + { + "id": 318, + "name": "Garda Seaca", + "county": "Alba" + }, + { + "id": 319, + "name": "Hanasesti", + "county": "Alba" + }, + { + "id": 320, + "name": "Huzaresti", + "county": "Alba" + }, + { + "id": 321, + "name": "Izvoarele", + "county": "Alba" + }, + { + "id": 322, + "name": "Mununa", + "county": "Alba" + }, + { + "id": 323, + "name": "Ocoale", + "county": "Alba" + }, + { + "id": 324, + "name": "Plai", + "county": "Alba" + }, + { + "id": 325, + "name": "Plisti", + "county": "Alba" + }, + { + "id": 326, + "name": "Scoarta", + "county": "Alba" + }, + { + "id": 327, + "name": "Sucesti", + "county": "Alba" + }, + { + "id": 328, + "name": "Snide", + "county": "Alba" + }, + { + "id": 329, + "name": "Hoparta", + "county": "Alba" + }, + { + "id": 330, + "name": "Silivas", + "county": "Alba" + }, + { + "id": 331, + "name": "Spalnaca", + "county": "Alba" + }, + { + "id": 332, + "name": "Turdas", + "county": "Alba" + }, + { + "id": 333, + "name": "Vama Seaca", + "county": "Alba" + }, + { + "id": 334, + "name": "Horea", + "county": "Alba" + }, + { + "id": 335, + "name": "Baba", + "county": "Alba" + }, + { + "id": 336, + "name": "Butesti", + "county": "Alba" + }, + { + "id": 337, + "name": "Darlesti", + "county": "Alba" + }, + { + "id": 338, + "name": "Fericet", + "county": "Alba" + }, + { + "id": 339, + "name": "Giurgiut", + "county": "Alba" + }, + { + "id": 340, + "name": "Mancesti", + "county": "Alba" + }, + { + "id": 341, + "name": "Matisesti", + "county": "Alba" + }, + { + "id": 342, + "name": "Niculesti", + "county": "Alba" + }, + { + "id": 343, + "name": "Patrusesti", + "county": "Alba" + }, + { + "id": 344, + "name": "Petreasa", + "county": "Alba" + }, + { + "id": 345, + "name": "Preluca", + "county": "Alba" + }, + { + "id": 346, + "name": "Teiu", + "county": "Alba" + }, + { + "id": 347, + "name": "Trifesti", + "county": "Alba" + }, + { + "id": 348, + "name": "Zanzesti", + "county": "Alba" + }, + { + "id": 349, + "name": "Ighiu", + "county": "Alba" + }, + { + "id": 350, + "name": "Bucerdea Vanoasa", + "county": "Alba" + }, + { + "id": 351, + "name": "Ighiel", + "county": "Alba" + }, + { + "id": 352, + "name": "Sard", + "county": "Alba" + }, + { + "id": 353, + "name": "Telna", + "county": "Alba" + }, + { + "id": 354, + "name": "Intregalde", + "county": "Alba" + }, + { + "id": 355, + "name": "Dealu Geoagiului", + "county": "Alba" + }, + { + "id": 356, + "name": "Ghioncani", + "county": "Alba" + }, + { + "id": 357, + "name": "Iliesti", + "county": "Alba" + }, + { + "id": 358, + "name": "Ivanis", + "county": "Alba" + }, + { + "id": 359, + "name": "Marinesti", + "county": "Alba" + }, + { + "id": 360, + "name": "Modolesti", + "county": "Alba" + }, + { + "id": 361, + "name": "Necrilesti", + "county": "Alba" + }, + { + "id": 362, + "name": "Popesti", + "county": "Alba" + }, + { + "id": 363, + "name": "Sfarcea", + "county": "Alba" + }, + { + "id": 364, + "name": "Tecsesti", + "county": "Alba" + }, + { + "id": 365, + "name": "Jidvei", + "county": "Alba" + }, + { + "id": 366, + "name": "Balcaciu", + "county": "Alba" + }, + { + "id": 367, + "name": "Capalna de Jos", + "county": "Alba" + }, + { + "id": 368, + "name": "Feisa", + "county": "Alba" + }, + { + "id": 369, + "name": "Veseus", + "county": "Alba" + }, + { + "id": 370, + "name": "Livezile", + "county": "Alba" + }, + { + "id": 371, + "name": "Izvoarele", + "county": "Alba" + }, + { + "id": 372, + "name": "Poiana Aiudului", + "county": "Alba" + }, + { + "id": 373, + "name": "Valisoara", + "county": "Alba" + }, + { + "id": 374, + "name": "Lopadea Noua", + "county": "Alba" + }, + { + "id": 375, + "name": "Asinip", + "county": "Alba" + }, + { + "id": 376, + "name": "Beta", + "county": "Alba" + }, + { + "id": 377, + "name": "Bagau", + "county": "Alba" + }, + { + "id": 378, + "name": "Cicard", + "county": "Alba" + }, + { + "id": 379, + "name": "Ciuguzel", + "county": "Alba" + }, + { + "id": 380, + "name": "Ocnisoara", + "county": "Alba" + }, + { + "id": 381, + "name": "Odverem", + "county": "Alba" + }, + { + "id": 382, + "name": "Lunca Muresului", + "county": "Alba" + }, + { + "id": 383, + "name": "Gura Ariesului", + "county": "Alba" + }, + { + "id": 384, + "name": "Lupsa", + "county": "Alba" + }, + { + "id": 385, + "name": "Bardesti", + "county": "Alba" + }, + { + "id": 386, + "name": "Barzan", + "county": "Alba" + }, + { + "id": 387, + "name": "Curmatura", + "county": "Alba" + }, + { + "id": 388, + "name": "Dupa Deal", + "county": "Alba" + }, + { + "id": 389, + "name": "Geamana", + "county": "Alba" + }, + { + "id": 390, + "name": "Hadarau", + "county": "Alba" + }, + { + "id": 391, + "name": "Holobani", + "county": "Alba" + }, + { + "id": 392, + "name": "Lazuri", + "county": "Alba" + }, + { + "id": 393, + "name": "Lunca", + "county": "Alba" + }, + { + "id": 394, + "name": "Manastire", + "county": "Alba" + }, + { + "id": 395, + "name": "Margaia", + "county": "Alba" + }, + { + "id": 396, + "name": "Musca", + "county": "Alba" + }, + { + "id": 397, + "name": "Pitiga", + "county": "Alba" + }, + { + "id": 398, + "name": "Parau-Carbunari", + "county": "Alba" + }, + { + "id": 399, + "name": "Posogani", + "county": "Alba" + }, + { + "id": 400, + "name": "Sasa", + "county": "Alba" + }, + { + "id": 401, + "name": "Trifesti", + "county": "Alba" + }, + { + "id": 402, + "name": "Valea Holhorii", + "county": "Alba" + }, + { + "id": 403, + "name": "Valea Lupsii", + "county": "Alba" + }, + { + "id": 404, + "name": "Valea Sesii", + "county": "Alba" + }, + { + "id": 405, + "name": "Vai", + "county": "Alba" + }, + { + "id": 406, + "name": "Vinta", + "county": "Alba" + }, + { + "id": 407, + "name": "Metes", + "county": "Alba" + }, + { + "id": 408, + "name": "Ampoita", + "county": "Alba" + }, + { + "id": 409, + "name": "Isca", + "county": "Alba" + }, + { + "id": 410, + "name": "Lunca Ampoitei", + "county": "Alba" + }, + { + "id": 411, + "name": "Lunca Metesului", + "county": "Alba" + }, + { + "id": 412, + "name": "Padurea", + "county": "Alba" + }, + { + "id": 413, + "name": "Poiana Ampoiului", + "county": "Alba" + }, + { + "id": 414, + "name": "Poiana Ursului", + "county": "Alba" + }, + { + "id": 415, + "name": "Presaca Ampoiului", + "county": "Alba" + }, + { + "id": 416, + "name": "Remetea", + "county": "Alba" + }, + { + "id": 417, + "name": "Tauti", + "county": "Alba" + }, + { + "id": 418, + "name": "Valeni", + "county": "Alba" + }, + { + "id": 419, + "name": "Mihalt", + "county": "Alba" + }, + { + "id": 420, + "name": "Cistei", + "county": "Alba" + }, + { + "id": 421, + "name": "Obreja", + "county": "Alba" + }, + { + "id": 422, + "name": "Zaries", + "county": "Alba" + }, + { + "id": 423, + "name": "Miraslau", + "county": "Alba" + }, + { + "id": 424, + "name": "Cicau", + "county": "Alba" + }, + { + "id": 425, + "name": "Decea", + "county": "Alba" + }, + { + "id": 426, + "name": "Lopadea Veche", + "county": "Alba" + }, + { + "id": 427, + "name": "Ormenis", + "county": "Alba" + }, + { + "id": 428, + "name": "Rachis", + "county": "Alba" + }, + { + "id": 429, + "name": "Mogos", + "county": "Alba" + }, + { + "id": 430, + "name": "Barbesti", + "county": "Alba" + }, + { + "id": 431, + "name": "Barlesti", + "county": "Alba" + }, + { + "id": 432, + "name": "Barlesti-Catun", + "county": "Alba" + }, + { + "id": 433, + "name": "Barzogani", + "county": "Alba" + }, + { + "id": 434, + "name": "Bocesti", + "county": "Alba" + }, + { + "id": 435, + "name": "Bogdanesti", + "county": "Alba" + }, + { + "id": 436, + "name": "Butesti", + "county": "Alba" + }, + { + "id": 437, + "name": "Cojocani", + "county": "Alba" + }, + { + "id": 438, + "name": "Cristesti", + "county": "Alba" + }, + { + "id": 439, + "name": "Mamaligani", + "county": "Alba" + }, + { + "id": 440, + "name": "Negresti", + "county": "Alba" + }, + { + "id": 441, + "name": "Oncesti", + "county": "Alba" + }, + { + "id": 442, + "name": "Poienile-Mogos", + "county": "Alba" + }, + { + "id": 443, + "name": "Tomesti", + "county": "Alba" + }, + { + "id": 444, + "name": "Valea Barlutesti", + "county": "Alba" + }, + { + "id": 445, + "name": "Valea Barnii", + "county": "Alba" + }, + { + "id": 446, + "name": "Valea Cocesti", + "county": "Alba" + }, + { + "id": 447, + "name": "Valea Giogesti", + "county": "Alba" + }, + { + "id": 448, + "name": "Valea Mlacii", + "county": "Alba" + }, + { + "id": 449, + "name": "Valea Tupilor", + "county": "Alba" + }, + { + "id": 450, + "name": "Noslac", + "county": "Alba" + }, + { + "id": 451, + "name": "Captalan", + "county": "Alba" + }, + { + "id": 452, + "name": "Copand", + "county": "Alba" + }, + { + "id": 453, + "name": "Gabud", + "county": "Alba" + }, + { + "id": 454, + "name": "Stana de Mures", + "county": "Alba" + }, + { + "id": 455, + "name": "Valea Ciuciului", + "county": "Alba" + }, + { + "id": 456, + "name": "Ocolis", + "county": "Alba" + }, + { + "id": 457, + "name": "Lunca Larga", + "county": "Alba" + }, + { + "id": 458, + "name": "Runc", + "county": "Alba" + }, + { + "id": 459, + "name": "Vidolm", + "county": "Alba" + }, + { + "id": 460, + "name": "Ohaba", + "county": "Alba" + }, + { + "id": 461, + "name": "Colibi", + "county": "Alba" + }, + { + "id": 462, + "name": "Maghierat", + "county": "Alba" + }, + { + "id": 463, + "name": "Secasel", + "county": "Alba" + }, + { + "id": 464, + "name": "Pianu de Sus", + "county": "Alba" + }, + { + "id": 465, + "name": "Pianu de Jos", + "county": "Alba" + }, + { + "id": 466, + "name": "Plaiuri", + "county": "Alba" + }, + { + "id": 467, + "name": "Purcareti", + "county": "Alba" + }, + { + "id": 468, + "name": "Strungari", + "county": "Alba" + }, + { + "id": 469, + "name": "Poiana Vadului", + "county": "Alba" + }, + { + "id": 470, + "name": "Costesti", + "county": "Alba" + }, + { + "id": 471, + "name": "Duduieni", + "county": "Alba" + }, + { + "id": 472, + "name": "Fagetu de Jos", + "county": "Alba" + }, + { + "id": 473, + "name": "Fagetu de Sus", + "county": "Alba" + }, + { + "id": 474, + "name": "Hanasesti", + "county": "Alba" + }, + { + "id": 475, + "name": "Lupaiesti", + "county": "Alba" + }, + { + "id": 476, + "name": "Morcanesti", + "county": "Alba" + }, + { + "id": 477, + "name": "Pastesti", + "county": "Alba" + }, + { + "id": 478, + "name": "Petelei", + "county": "Alba" + }, + { + "id": 479, + "name": "Stanesti", + "county": "Alba" + }, + { + "id": 480, + "name": "Ponor", + "county": "Alba" + }, + { + "id": 481, + "name": "Dupa Deal", + "county": "Alba" + }, + { + "id": 482, + "name": "Geogel", + "county": "Alba" + }, + { + "id": 483, + "name": "Macaresti", + "county": "Alba" + }, + { + "id": 484, + "name": "Valea Bucurului", + "county": "Alba" + }, + { + "id": 485, + "name": "Vale In Jos", + "county": "Alba" + }, + { + "id": 486, + "name": "Posaga de Jos", + "county": "Alba" + }, + { + "id": 487, + "name": "Cortesti", + "county": "Alba" + }, + { + "id": 488, + "name": "Incesti", + "county": "Alba" + }, + { + "id": 489, + "name": "Lunca", + "county": "Alba" + }, + { + "id": 490, + "name": "Orasti", + "county": "Alba" + }, + { + "id": 491, + "name": "Posaga de Sus", + "county": "Alba" + }, + { + "id": 492, + "name": "Sagagea", + "county": "Alba" + }, + { + "id": 493, + "name": "Radesti", + "county": "Alba" + }, + { + "id": 494, + "name": "Leorint", + "county": "Alba" + }, + { + "id": 495, + "name": "Mescreac", + "county": "Alba" + }, + { + "id": 496, + "name": "Soimus", + "county": "Alba" + }, + { + "id": 497, + "name": "Rametea", + "county": "Alba" + }, + { + "id": 498, + "name": "Coltesti", + "county": "Alba" + }, + { + "id": 499, + "name": "Ramet", + "county": "Alba" + }, + { + "id": 500, + "name": "Botani", + "county": "Alba" + }, + { + "id": 501, + "name": "Bradesti", + "county": "Alba" + }, + { + "id": 502, + "name": "Cheia", + "county": "Alba" + }, + { + "id": 503, + "name": "Cotorasti", + "county": "Alba" + }, + { + "id": 504, + "name": "Floresti", + "county": "Alba" + }, + { + "id": 505, + "name": "Olteni", + "county": "Alba" + }, + { + "id": 506, + "name": "Valea Fagetului", + "county": "Alba" + }, + { + "id": 507, + "name": "Valea Inzelului", + "county": "Alba" + }, + { + "id": 508, + "name": "Valea Manastirii", + "county": "Alba" + }, + { + "id": 509, + "name": "Valea Poienii", + "county": "Alba" + }, + { + "id": 510, + "name": "Valea Uzei", + "county": "Alba" + }, + { + "id": 511, + "name": "Vladesti", + "county": "Alba" + }, + { + "id": 512, + "name": "Rosia Montana", + "county": "Alba" + }, + { + "id": 513, + "name": "Balmosesti", + "county": "Alba" + }, + { + "id": 514, + "name": "Blidesti", + "county": "Alba" + }, + { + "id": 515, + "name": "Bunta", + "county": "Alba" + }, + { + "id": 516, + "name": "Carpinis", + "county": "Alba" + }, + { + "id": 517, + "name": "Coasta Hentii", + "county": "Alba" + }, + { + "id": 518, + "name": "Corna", + "county": "Alba" + }, + { + "id": 519, + "name": "Curaturi", + "county": "Alba" + }, + { + "id": 520, + "name": "Daroaia", + "county": "Alba" + }, + { + "id": 521, + "name": "Garda-Barbulesti", + "county": "Alba" + }, + { + "id": 522, + "name": "Gura Rosiei", + "county": "Alba" + }, + { + "id": 523, + "name": "Iacobesti", + "county": "Alba" + }, + { + "id": 524, + "name": "Ignatesti", + "county": "Alba" + }, + { + "id": 525, + "name": "Soal", + "county": "Alba" + }, + { + "id": 526, + "name": "Tarina", + "county": "Alba" + }, + { + "id": 527, + "name": "Vartop", + "county": "Alba" + }, + { + "id": 528, + "name": "Rosia de Secas", + "county": "Alba" + }, + { + "id": 529, + "name": "Tau", + "county": "Alba" + }, + { + "id": 530, + "name": "Ungurei", + "county": "Alba" + }, + { + "id": 531, + "name": "Salciua de Jos", + "county": "Alba" + }, + { + "id": 532, + "name": "Dealu Caselor", + "county": "Alba" + }, + { + "id": 533, + "name": "Dumesti", + "county": "Alba" + }, + { + "id": 534, + "name": "Salciua de Sus", + "county": "Alba" + }, + { + "id": 535, + "name": "Sub Piatra", + "county": "Alba" + }, + { + "id": 536, + "name": "Valea Larga", + "county": "Alba" + }, + { + "id": 537, + "name": "Salistea", + "county": "Alba" + }, + { + "id": 538, + "name": "Margineni", + "county": "Alba" + }, + { + "id": 539, + "name": "Salistea-Deal", + "county": "Alba" + }, + { + "id": 540, + "name": "Tartaria", + "county": "Alba" + }, + { + "id": 541, + "name": "Sasciori", + "county": "Alba" + }, + { + "id": 542, + "name": "Capalna", + "county": "Alba" + }, + { + "id": 543, + "name": "Dumbrava", + "county": "Alba" + }, + { + "id": 544, + "name": "Laz", + "county": "Alba" + }, + { + "id": 545, + "name": "Loman", + "county": "Alba" + }, + { + "id": 546, + "name": "Plesi", + "county": "Alba" + }, + { + "id": 547, + "name": "Rachita", + "county": "Alba" + }, + { + "id": 548, + "name": "Sebesel", + "county": "Alba" + }, + { + "id": 549, + "name": "Tonea", + "county": "Alba" + }, + { + "id": 550, + "name": "Scarisoara", + "county": "Alba" + }, + { + "id": 551, + "name": "Barlesti", + "county": "Alba" + }, + { + "id": 552, + "name": "Botesti", + "county": "Alba" + }, + { + "id": 553, + "name": "Fata-Lazesti", + "county": "Alba" + }, + { + "id": 554, + "name": "Floresti", + "county": "Alba" + }, + { + "id": 555, + "name": "Lazesti", + "county": "Alba" + }, + { + "id": 556, + "name": "Lespezea", + "county": "Alba" + }, + { + "id": 557, + "name": "Matei", + "county": "Alba" + }, + { + "id": 558, + "name": "Negesti", + "county": "Alba" + }, + { + "id": 559, + "name": "Preluca", + "county": "Alba" + }, + { + "id": 560, + "name": "Runc", + "county": "Alba" + }, + { + "id": 561, + "name": "Sfoartea", + "county": "Alba" + }, + { + "id": 562, + "name": "Stiuleti", + "county": "Alba" + }, + { + "id": 563, + "name": "Trancesti", + "county": "Alba" + }, + { + "id": 564, + "name": "Sancel", + "county": "Alba" + }, + { + "id": 565, + "name": "Iclod", + "county": "Alba" + }, + { + "id": 566, + "name": "Panade", + "county": "Alba" + }, + { + "id": 567, + "name": "Santimbru", + "county": "Alba" + }, + { + "id": 568, + "name": "Coslariu", + "county": "Alba" + }, + { + "id": 569, + "name": "Dumitra", + "county": "Alba" + }, + { + "id": 570, + "name": "Galtiu", + "county": "Alba" + }, + { + "id": 571, + "name": "Totoi", + "county": "Alba" + }, + { + "id": 572, + "name": "Sohodol", + "county": "Alba" + }, + { + "id": 573, + "name": "Bazesti", + "county": "Alba" + }, + { + "id": 574, + "name": "Bilanesti", + "county": "Alba" + }, + { + "id": 575, + "name": "Bobaresti", + "county": "Alba" + }, + { + "id": 576, + "name": "Bradeana", + "county": "Alba" + }, + { + "id": 577, + "name": "Burzonesti", + "county": "Alba" + }, + { + "id": 578, + "name": "Deoncesti", + "county": "Alba" + }, + { + "id": 579, + "name": "Dilimani", + "county": "Alba" + }, + { + "id": 580, + "name": "Furduiesti", + "county": "Alba" + }, + { + "id": 581, + "name": "Gura Sohodol", + "county": "Alba" + }, + { + "id": 582, + "name": "Hoanca", + "county": "Alba" + }, + { + "id": 583, + "name": "Joldisesti", + "county": "Alba" + }, + { + "id": 584, + "name": "Lazuri", + "county": "Alba" + }, + { + "id": 585, + "name": "Lehesti", + "county": "Alba" + }, + { + "id": 586, + "name": "Luminesti", + "county": "Alba" + }, + { + "id": 587, + "name": "Medresti", + "county": "Alba" + }, + { + "id": 588, + "name": "Moraresti", + "county": "Alba" + }, + { + "id": 589, + "name": "Munesti", + "county": "Alba" + }, + { + "id": 590, + "name": "Napaiesti", + "county": "Alba" + }, + { + "id": 591, + "name": "Nelegesti", + "county": "Alba" + }, + { + "id": 592, + "name": "Nicoresti", + "county": "Alba" + }, + { + "id": 593, + "name": "Peles", + "county": "Alba" + }, + { + "id": 594, + "name": "Poiana", + "county": "Alba" + }, + { + "id": 595, + "name": "Robesti", + "county": "Alba" + }, + { + "id": 596, + "name": "Sicoiesti", + "county": "Alba" + }, + { + "id": 597, + "name": "Surdesti", + "county": "Alba" + }, + { + "id": 598, + "name": "Sebisesti", + "county": "Alba" + }, + { + "id": 599, + "name": "Simocesti", + "county": "Alba" + }, + { + "id": 600, + "name": "Toci", + "county": "Alba" + }, + { + "id": 601, + "name": "Valea Verde", + "county": "Alba" + }, + { + "id": 602, + "name": "Vladosesti", + "county": "Alba" + }, + { + "id": 603, + "name": "Stremt", + "county": "Alba" + }, + { + "id": 604, + "name": "Fata Pietrii", + "county": "Alba" + }, + { + "id": 605, + "name": "Geoagiu de Sus", + "county": "Alba" + }, + { + "id": 606, + "name": "Geomal", + "county": "Alba" + }, + { + "id": 607, + "name": "Sibot", + "county": "Alba" + }, + { + "id": 608, + "name": "Balomiru de Camp", + "county": "Alba" + }, + { + "id": 609, + "name": "Bacainti", + "county": "Alba" + }, + { + "id": 610, + "name": "Saracsau", + "county": "Alba" + }, + { + "id": 611, + "name": "Sona", + "county": "Alba" + }, + { + "id": 612, + "name": "Alecus", + "county": "Alba" + }, + { + "id": 613, + "name": "Biia", + "county": "Alba" + }, + { + "id": 614, + "name": "Doptau", + "county": "Alba" + }, + { + "id": 615, + "name": "Lunca Tarnavei", + "county": "Alba" + }, + { + "id": 616, + "name": "Sanmiclaus", + "county": "Alba" + }, + { + "id": 617, + "name": "Valea Sasului", + "county": "Alba" + }, + { + "id": 618, + "name": "Spring", + "county": "Alba" + }, + { + "id": 619, + "name": "Carpen", + "county": "Alba" + }, + { + "id": 620, + "name": "Carpenii de Sus", + "county": "Alba" + }, + { + "id": 621, + "name": "Cunta", + "county": "Alba" + }, + { + "id": 622, + "name": "Drasov", + "county": "Alba" + }, + { + "id": 623, + "name": "Vingard", + "county": "Alba" + }, + { + "id": 624, + "name": "Sugag", + "county": "Alba" + }, + { + "id": 625, + "name": "Arti", + "county": "Alba" + }, + { + "id": 626, + "name": "Barsana", + "county": "Alba" + }, + { + "id": 627, + "name": "Dobra", + "county": "Alba" + }, + { + "id": 628, + "name": "Jidostina", + "county": "Alba" + }, + { + "id": 629, + "name": "Martinie", + "county": "Alba" + }, + { + "id": 630, + "name": "Tau Bistra", + "county": "Alba" + }, + { + "id": 631, + "name": "Teius", + "county": "Alba" + }, + { + "id": 632, + "name": "Beldiu", + "county": "Alba" + }, + { + "id": 633, + "name": "Capud", + "county": "Alba" + }, + { + "id": 634, + "name": "Coslariu Nou", + "county": "Alba" + }, + { + "id": 635, + "name": "Petelca", + "county": "Alba" + }, + { + "id": 636, + "name": "Unirea", + "county": "Alba" + }, + { + "id": 637, + "name": "Ciugudu de Jos", + "county": "Alba" + }, + { + "id": 638, + "name": "Ciugudu de Sus", + "county": "Alba" + }, + { + "id": 639, + "name": "Dumbrava", + "county": "Alba" + }, + { + "id": 640, + "name": "Inoc", + "county": "Alba" + }, + { + "id": 641, + "name": "Mahaceni", + "county": "Alba" + }, + { + "id": 642, + "name": "Vadu Motilor", + "county": "Alba" + }, + { + "id": 643, + "name": "Bodesti", + "county": "Alba" + }, + { + "id": 644, + "name": "Burzesti", + "county": "Alba" + }, + { + "id": 645, + "name": "Dealu Frumos", + "county": "Alba" + }, + { + "id": 646, + "name": "Lazesti", + "county": "Alba" + }, + { + "id": 647, + "name": "Necsesti", + "county": "Alba" + }, + { + "id": 648, + "name": "Poduri-Bricesti", + "county": "Alba" + }, + { + "id": 649, + "name": "Popestii de Jos", + "county": "Alba" + }, + { + "id": 650, + "name": "Popestii de Sus", + "county": "Alba" + }, + { + "id": 651, + "name": "Tomutesti", + "county": "Alba" + }, + { + "id": 652, + "name": "Totesti", + "county": "Alba" + }, + { + "id": 653, + "name": "Valtori", + "county": "Alba" + }, + { + "id": 654, + "name": "Valea Lunga", + "county": "Alba" + }, + { + "id": 655, + "name": "Faget", + "county": "Alba" + }, + { + "id": 656, + "name": "Glogovet", + "county": "Alba" + }, + { + "id": 657, + "name": "Lodroman", + "county": "Alba" + }, + { + "id": 658, + "name": "Lunca", + "county": "Alba" + }, + { + "id": 659, + "name": "Tauni", + "county": "Alba" + }, + { + "id": 660, + "name": "Vidra", + "county": "Alba" + }, + { + "id": 661, + "name": "Bai", + "county": "Alba" + }, + { + "id": 662, + "name": "Bobaresti", + "county": "Alba" + }, + { + "id": 663, + "name": "Bogdanesti", + "county": "Alba" + }, + { + "id": 664, + "name": "Bordestii Poieni", + "county": "Alba" + }, + { + "id": 665, + "name": "Culdesti", + "county": "Alba" + }, + { + "id": 666, + "name": "Dealu Goiesti", + "county": "Alba" + }, + { + "id": 667, + "name": "Dos", + "county": "Alba" + }, + { + "id": 668, + "name": "Dosu Luncii", + "county": "Alba" + }, + { + "id": 669, + "name": "Dosu Vasesti", + "county": "Alba" + }, + { + "id": 670, + "name": "Dragoiesti-Lunca", + "county": "Alba" + }, + { + "id": 671, + "name": "Ficaresti", + "county": "Alba" + }, + { + "id": 672, + "name": "Gligoresti", + "county": "Alba" + }, + { + "id": 673, + "name": "Goiesti", + "county": "Alba" + }, + { + "id": 674, + "name": "Haiducesti", + "county": "Alba" + }, + { + "id": 675, + "name": "Harasti", + "county": "Alba" + }, + { + "id": 676, + "name": "Hoanca", + "county": "Alba" + }, + { + "id": 677, + "name": "Jeflesti", + "county": "Alba" + }, + { + "id": 678, + "name": "Lunca", + "county": "Alba" + }, + { + "id": 679, + "name": "Lunca Bisericii", + "county": "Alba" + }, + { + "id": 680, + "name": "Lunca de Jos", + "county": "Alba" + }, + { + "id": 681, + "name": "Lunca Goiesti", + "county": "Alba" + }, + { + "id": 682, + "name": "Lunca Vesesti", + "county": "Alba" + }, + { + "id": 683, + "name": "Modolesti", + "county": "Alba" + }, + { + "id": 684, + "name": "Nemesi", + "county": "Alba" + }, + { + "id": 685, + "name": "Oidesti", + "county": "Alba" + }, + { + "id": 686, + "name": "Pitarcesti", + "county": "Alba" + }, + { + "id": 687, + "name": "Plescuta", + "county": "Alba" + }, + { + "id": 688, + "name": "Poieni", + "county": "Alba" + }, + { + "id": 689, + "name": "Ponorel", + "county": "Alba" + }, + { + "id": 690, + "name": "Puiuletesti", + "county": "Alba" + }, + { + "id": 691, + "name": "Runc", + "county": "Alba" + }, + { + "id": 692, + "name": "Segaj", + "county": "Alba" + }, + { + "id": 693, + "name": "Urdes", + "county": "Alba" + }, + { + "id": 694, + "name": "Valea Morii", + "county": "Alba" + }, + { + "id": 695, + "name": "Vasesti", + "county": "Alba" + }, + { + "id": 696, + "name": "Valcaneasa", + "county": "Alba" + }, + { + "id": 697, + "name": "Valcesti", + "county": "Alba" + }, + { + "id": 698, + "name": "Vartanesti", + "county": "Alba" + }, + { + "id": 699, + "name": "Vintu de Jos", + "county": "Alba" + }, + { + "id": 700, + "name": "Ciocasu", + "county": "Alba" + }, + { + "id": 701, + "name": "Campu Goblii", + "county": "Alba" + }, + { + "id": 702, + "name": "Criseni", + "county": "Alba" + }, + { + "id": 703, + "name": "Dealu Ferului", + "county": "Alba" + }, + { + "id": 704, + "name": "Gura Cutului", + "county": "Alba" + }, + { + "id": 705, + "name": "Hategana", + "county": "Alba" + }, + { + "id": 706, + "name": "Inuri", + "county": "Alba" + }, + { + "id": 707, + "name": "Laz", + "county": "Alba" + }, + { + "id": 708, + "name": "Matacina", + "county": "Alba" + }, + { + "id": 709, + "name": "Mereteu", + "county": "Alba" + }, + { + "id": 710, + "name": "Parau lui Mihai", + "county": "Alba" + }, + { + "id": 711, + "name": "Poienita", + "county": "Alba" + }, + { + "id": 712, + "name": "Stauini", + "county": "Alba" + }, + { + "id": 713, + "name": "Valea Goblii", + "county": "Alba" + }, + { + "id": 714, + "name": "Valea lui Mihai", + "county": "Alba" + }, + { + "id": 715, + "name": "Valea Vintului", + "county": "Alba" + }, + { + "id": 716, + "name": "Vurpar", + "county": "Alba" + }, + { + "id": 717, + "name": "Arad", + "county": "Arad" + }, + { + "id": 718, + "name": "Fantanele", + "county": "Arad" + }, + { + "id": 719, + "name": "Alunis", + "county": "Arad" + }, + { + "id": 720, + "name": "Frumuseni", + "county": "Arad" + }, + { + "id": 721, + "name": "Tisa Noua", + "county": "Arad" + }, + { + "id": 722, + "name": "Livada", + "county": "Arad" + }, + { + "id": 723, + "name": "Sanleani", + "county": "Arad" + }, + { + "id": 724, + "name": "Sofronea", + "county": "Arad" + }, + { + "id": 725, + "name": "Sanpaul", + "county": "Arad" + }, + { + "id": 726, + "name": "Vladimirescu", + "county": "Arad" + }, + { + "id": 727, + "name": "Cicir", + "county": "Arad" + }, + { + "id": 728, + "name": "Horia", + "county": "Arad" + }, + { + "id": 729, + "name": "Mandruloc", + "county": "Arad" + }, + { + "id": 730, + "name": "Chisineu-Cris", + "county": "Arad" + }, + { + "id": 731, + "name": "Nadab", + "county": "Arad" + }, + { + "id": 732, + "name": "Curtici", + "county": "Arad" + }, + { + "id": 733, + "name": "Dorobanti", + "county": "Arad" + }, + { + "id": 734, + "name": "Ineu", + "county": "Arad" + }, + { + "id": 735, + "name": "Mocrea", + "county": "Arad" + }, + { + "id": 736, + "name": "Lipova", + "county": "Arad" + }, + { + "id": 737, + "name": "Radna", + "county": "Arad" + }, + { + "id": 738, + "name": "Soimos", + "county": "Arad" + }, + { + "id": 739, + "name": "Nadlac", + "county": "Arad" + }, + { + "id": 740, + "name": "Pancota", + "county": "Arad" + }, + { + "id": 741, + "name": "Maderat", + "county": "Arad" + }, + { + "id": 742, + "name": "Sebis", + "county": "Arad" + }, + { + "id": 743, + "name": "Donceni", + "county": "Arad" + }, + { + "id": 744, + "name": "Prunisor", + "county": "Arad" + }, + { + "id": 745, + "name": "Salajeni", + "county": "Arad" + }, + { + "id": 746, + "name": "Almas", + "county": "Arad" + }, + { + "id": 747, + "name": "Cil", + "county": "Arad" + }, + { + "id": 748, + "name": "Joia Mare", + "county": "Arad" + }, + { + "id": 749, + "name": "Radesti", + "county": "Arad" + }, + { + "id": 750, + "name": "Apateu", + "county": "Arad" + }, + { + "id": 751, + "name": "Berechiu", + "county": "Arad" + }, + { + "id": 752, + "name": "Motiori", + "county": "Arad" + }, + { + "id": 753, + "name": "Archis", + "county": "Arad" + }, + { + "id": 754, + "name": "Barzesti", + "county": "Arad" + }, + { + "id": 755, + "name": "Groseni", + "county": "Arad" + }, + { + "id": 756, + "name": "Nermis", + "county": "Arad" + }, + { + "id": 757, + "name": "Bata", + "county": "Arad" + }, + { + "id": 758, + "name": "Bacau de Mijloc", + "county": "Arad" + }, + { + "id": 759, + "name": "Bulci", + "county": "Arad" + }, + { + "id": 760, + "name": "Tela", + "county": "Arad" + }, + { + "id": 761, + "name": "Beliu", + "county": "Arad" + }, + { + "id": 762, + "name": "Benesti", + "county": "Arad" + }, + { + "id": 763, + "name": "Bochia", + "county": "Arad" + }, + { + "id": 764, + "name": "Vasile Goldis", + "county": "Arad" + }, + { + "id": 765, + "name": "Secaci", + "county": "Arad" + }, + { + "id": 766, + "name": "Tagadau", + "county": "Arad" + }, + { + "id": 767, + "name": "Birchis", + "county": "Arad" + }, + { + "id": 768, + "name": "Capalnas", + "county": "Arad" + }, + { + "id": 769, + "name": "Ostrov", + "county": "Arad" + }, + { + "id": 770, + "name": "Virismort", + "county": "Arad" + }, + { + "id": 771, + "name": "Barsa", + "county": "Arad" + }, + { + "id": 772, + "name": "Aldesti", + "county": "Arad" + }, + { + "id": 773, + "name": "Hodis", + "county": "Arad" + }, + { + "id": 774, + "name": "Voivodeni", + "county": "Arad" + }, + { + "id": 775, + "name": "Barzava", + "county": "Arad" + }, + { + "id": 776, + "name": "Batuta", + "county": "Arad" + }, + { + "id": 777, + "name": "Capruta", + "county": "Arad" + }, + { + "id": 778, + "name": "Dumbravita", + "county": "Arad" + }, + { + "id": 779, + "name": "Grosii Noi", + "county": "Arad" + }, + { + "id": 780, + "name": "Lalasint", + "county": "Arad" + }, + { + "id": 781, + "name": "Monorostia", + "county": "Arad" + }, + { + "id": 782, + "name": "Slatina de Mures", + "county": "Arad" + }, + { + "id": 783, + "name": "Bocsig", + "county": "Arad" + }, + { + "id": 784, + "name": "Manerau", + "county": "Arad" + }, + { + "id": 785, + "name": "Rapsig", + "county": "Arad" + }, + { + "id": 786, + "name": "Brazii", + "county": "Arad" + }, + { + "id": 787, + "name": "Buceava-Soimus", + "county": "Arad" + }, + { + "id": 788, + "name": "Iacobini", + "county": "Arad" + }, + { + "id": 789, + "name": "Madrigesti", + "county": "Arad" + }, + { + "id": 790, + "name": "Secas", + "county": "Arad" + }, + { + "id": 791, + "name": "Buteni", + "county": "Arad" + }, + { + "id": 792, + "name": "Berindia", + "county": "Arad" + }, + { + "id": 793, + "name": "Cuied", + "county": "Arad" + }, + { + "id": 794, + "name": "Paulian", + "county": "Arad" + }, + { + "id": 795, + "name": "Carand", + "county": "Arad" + }, + { + "id": 796, + "name": "Selistea", + "county": "Arad" + }, + { + "id": 797, + "name": "Cermei", + "county": "Arad" + }, + { + "id": 798, + "name": "Avram Iancu", + "county": "Arad" + }, + { + "id": 799, + "name": "Somosches", + "county": "Arad" + }, + { + "id": 800, + "name": "Chisindia", + "county": "Arad" + }, + { + "id": 801, + "name": "Paiuseni", + "county": "Arad" + }, + { + "id": 802, + "name": "Vasoaia", + "county": "Arad" + }, + { + "id": 803, + "name": "Conop", + "county": "Arad" + }, + { + "id": 804, + "name": "Belotint", + "county": "Arad" + }, + { + "id": 805, + "name": "Chelmac", + "county": "Arad" + }, + { + "id": 806, + "name": "Milova", + "county": "Arad" + }, + { + "id": 807, + "name": "Odvos", + "county": "Arad" + }, + { + "id": 808, + "name": "Covasint", + "county": "Arad" + }, + { + "id": 809, + "name": "Craiva", + "county": "Arad" + }, + { + "id": 810, + "name": "Chislaca", + "county": "Arad" + }, + { + "id": 811, + "name": "Ciuntesti", + "county": "Arad" + }, + { + "id": 812, + "name": "Coroi", + "county": "Arad" + }, + { + "id": 813, + "name": "Maraus", + "county": "Arad" + }, + { + "id": 814, + "name": "Rogoz de Beliu", + "county": "Arad" + }, + { + "id": 815, + "name": "Stoinesti", + "county": "Arad" + }, + { + "id": 816, + "name": "Susag", + "county": "Arad" + }, + { + "id": 817, + "name": "Siad", + "county": "Arad" + }, + { + "id": 818, + "name": "Talmaci", + "county": "Arad" + }, + { + "id": 819, + "name": "Dezna", + "county": "Arad" + }, + { + "id": 820, + "name": "Buhani", + "county": "Arad" + }, + { + "id": 821, + "name": "Laz", + "county": "Arad" + }, + { + "id": 822, + "name": "Neagra", + "county": "Arad" + }, + { + "id": 823, + "name": "Slatina de Cris", + "county": "Arad" + }, + { + "id": 824, + "name": "Dieci", + "county": "Arad" + }, + { + "id": 825, + "name": "Cociuba", + "county": "Arad" + }, + { + "id": 826, + "name": "Crocna", + "county": "Arad" + }, + { + "id": 827, + "name": "Revetis", + "county": "Arad" + }, + { + "id": 828, + "name": "Rosia", + "county": "Arad" + }, + { + "id": 829, + "name": "Dorgos", + "county": "Arad" + }, + { + "id": 830, + "name": "Bruznic", + "county": "Arad" + }, + { + "id": 831, + "name": "Patars", + "county": "Arad" + }, + { + "id": 832, + "name": "Ususau", + "county": "Arad" + }, + { + "id": 833, + "name": "Zabalt", + "county": "Arad" + }, + { + "id": 834, + "name": "Felnac", + "county": "Arad" + }, + { + "id": 835, + "name": "Bodrogu Nou", + "county": "Arad" + }, + { + "id": 836, + "name": "Calugareni", + "county": "Arad" + }, + { + "id": 837, + "name": "Zadareni", + "county": "Arad" + }, + { + "id": 838, + "name": "Ghioroc", + "county": "Arad" + }, + { + "id": 839, + "name": "Cuvin", + "county": "Arad" + }, + { + "id": 840, + "name": "Minis", + "county": "Arad" + }, + { + "id": 841, + "name": "Graniceri", + "county": "Arad" + }, + { + "id": 842, + "name": "Siclau", + "county": "Arad" + }, + { + "id": 843, + "name": "Gurahont", + "county": "Arad" + }, + { + "id": 844, + "name": "Bontesti", + "county": "Arad" + }, + { + "id": 845, + "name": "Dulcele", + "county": "Arad" + }, + { + "id": 846, + "name": "Fenis", + "county": "Arad" + }, + { + "id": 847, + "name": "Hontisor", + "county": "Arad" + }, + { + "id": 848, + "name": "Iosas", + "county": "Arad" + }, + { + "id": 849, + "name": "Mustesti", + "county": "Arad" + }, + { + "id": 850, + "name": "Pescari", + "county": "Arad" + }, + { + "id": 851, + "name": "Valea Mare", + "county": "Arad" + }, + { + "id": 852, + "name": "Zimbru", + "county": "Arad" + }, + { + "id": 853, + "name": "Halmagiu", + "county": "Arad" + }, + { + "id": 854, + "name": "Banesti", + "county": "Arad" + }, + { + "id": 855, + "name": "Bodesti", + "county": "Arad" + }, + { + "id": 856, + "name": "Brusturi", + "county": "Arad" + }, + { + "id": 857, + "name": "Cristesti", + "county": "Arad" + }, + { + "id": 858, + "name": "Ionesti", + "county": "Arad" + }, + { + "id": 859, + "name": "Leasa", + "county": "Arad" + }, + { + "id": 860, + "name": "Lestioara", + "county": "Arad" + }, + { + "id": 861, + "name": "Poienari", + "county": "Arad" + }, + { + "id": 862, + "name": "Tisa", + "county": "Arad" + }, + { + "id": 863, + "name": "Tarmure", + "county": "Arad" + }, + { + "id": 864, + "name": "Halmagel", + "county": "Arad" + }, + { + "id": 865, + "name": "Luncsoara", + "county": "Arad" + }, + { + "id": 866, + "name": "Sarbi", + "county": "Arad" + }, + { + "id": 867, + "name": "Tarnavita", + "county": "Arad" + }, + { + "id": 868, + "name": "Tohesti", + "county": "Arad" + }, + { + "id": 869, + "name": "Hasmas", + "county": "Arad" + }, + { + "id": 870, + "name": "Agrisu Mic", + "county": "Arad" + }, + { + "id": 871, + "name": "Botfei", + "county": "Arad" + }, + { + "id": 872, + "name": "Clit", + "county": "Arad" + }, + { + "id": 873, + "name": "Comanesti", + "county": "Arad" + }, + { + "id": 874, + "name": "Urvisu de Beliu", + "county": "Arad" + }, + { + "id": 875, + "name": "Ignesti", + "county": "Arad" + }, + { + "id": 876, + "name": "Minead", + "county": "Arad" + }, + { + "id": 877, + "name": "Nadalbesti", + "county": "Arad" + }, + { + "id": 878, + "name": "Susani", + "county": "Arad" + }, + { + "id": 879, + "name": "Iratosu", + "county": "Arad" + }, + { + "id": 880, + "name": "Variasu Mare", + "county": "Arad" + }, + { + "id": 881, + "name": "Variasu Mic", + "county": "Arad" + }, + { + "id": 882, + "name": "Macea", + "county": "Arad" + }, + { + "id": 883, + "name": "Sanmartin", + "county": "Arad" + }, + { + "id": 884, + "name": "Misca", + "county": "Arad" + }, + { + "id": 885, + "name": "Satu Nou", + "county": "Arad" + }, + { + "id": 886, + "name": "Vanatori", + "county": "Arad" + }, + { + "id": 887, + "name": "Zerindu Mic", + "county": "Arad" + }, + { + "id": 888, + "name": "Moneasa", + "county": "Arad" + }, + { + "id": 889, + "name": "Ranusa", + "county": "Arad" + }, + { + "id": 890, + "name": "Olari", + "county": "Arad" + }, + { + "id": 891, + "name": "Sintea Mica", + "county": "Arad" + }, + { + "id": 892, + "name": "Paulis", + "county": "Arad" + }, + { + "id": 893, + "name": "Baratca", + "county": "Arad" + }, + { + "id": 894, + "name": "Cladova", + "county": "Arad" + }, + { + "id": 895, + "name": "Sambateni", + "county": "Arad" + }, + { + "id": 896, + "name": "Pecica", + "county": "Arad" + }, + { + "id": 897, + "name": "Bodrogu Vechi", + "county": "Arad" + }, + { + "id": 898, + "name": "Sederhat", + "county": "Arad" + }, + { + "id": 899, + "name": "Turnu", + "county": "Arad" + }, + { + "id": 900, + "name": "Peregu Mare", + "county": "Arad" + }, + { + "id": 901, + "name": "Peregu Mic", + "county": "Arad" + }, + { + "id": 902, + "name": "Petris", + "county": "Arad" + }, + { + "id": 903, + "name": "Corbesti", + "county": "Arad" + }, + { + "id": 904, + "name": "Ilteu", + "county": "Arad" + }, + { + "id": 905, + "name": "Obarsia", + "county": "Arad" + }, + { + "id": 906, + "name": "Rosia Noua", + "county": "Arad" + }, + { + "id": 907, + "name": "Seliste", + "county": "Arad" + }, + { + "id": 908, + "name": "Pilu", + "county": "Arad" + }, + { + "id": 909, + "name": "Varsand", + "county": "Arad" + }, + { + "id": 910, + "name": "Plescuta", + "county": "Arad" + }, + { + "id": 911, + "name": "Aciuta", + "county": "Arad" + }, + { + "id": 912, + "name": "Budesti", + "county": "Arad" + }, + { + "id": 913, + "name": "Dumbrava", + "county": "Arad" + }, + { + "id": 914, + "name": "Gura Vaii", + "county": "Arad" + }, + { + "id": 915, + "name": "Rostoci", + "county": "Arad" + }, + { + "id": 916, + "name": "Talagiu", + "county": "Arad" + }, + { + "id": 917, + "name": "Savarsin", + "county": "Arad" + }, + { + "id": 918, + "name": "Caprioara", + "county": "Arad" + }, + { + "id": 919, + "name": "Cuias", + "county": "Arad" + }, + { + "id": 920, + "name": "Halalis", + "county": "Arad" + }, + { + "id": 921, + "name": "Parnesti", + "county": "Arad" + }, + { + "id": 922, + "name": "Temesesti", + "county": "Arad" + }, + { + "id": 923, + "name": "Toc", + "county": "Arad" + }, + { + "id": 924, + "name": "Troas", + "county": "Arad" + }, + { + "id": 925, + "name": "Valea Mare", + "county": "Arad" + }, + { + "id": 926, + "name": "Secusigiu", + "county": "Arad" + }, + { + "id": 927, + "name": "Munar", + "county": "Arad" + }, + { + "id": 928, + "name": "Satu Mare", + "county": "Arad" + }, + { + "id": 929, + "name": "Sanpetru German", + "county": "Arad" + }, + { + "id": 930, + "name": "Seleus", + "county": "Arad" + }, + { + "id": 931, + "name": "Iermata", + "county": "Arad" + }, + { + "id": 932, + "name": "Moroda", + "county": "Arad" + }, + { + "id": 933, + "name": "Semlac", + "county": "Arad" + }, + { + "id": 934, + "name": "Sintea Mare", + "county": "Arad" + }, + { + "id": 935, + "name": "Adea", + "county": "Arad" + }, + { + "id": 936, + "name": "Tipar", + "county": "Arad" + }, + { + "id": 937, + "name": "Santana", + "county": "Arad" + }, + { + "id": 938, + "name": "Caporal Alexa", + "county": "Arad" + }, + { + "id": 939, + "name": "Socodor", + "county": "Arad" + }, + { + "id": 940, + "name": "Sagu", + "county": "Arad" + }, + { + "id": 941, + "name": "Cruceni", + "county": "Arad" + }, + { + "id": 942, + "name": "Firiteaz", + "county": "Arad" + }, + { + "id": 943, + "name": "Fiscut", + "county": "Arad" + }, + { + "id": 944, + "name": "Hunedoara Timisana", + "county": "Arad" + }, + { + "id": 945, + "name": "Seitin", + "county": "Arad" + }, + { + "id": 946, + "name": "Sepreus", + "county": "Arad" + }, + { + "id": 947, + "name": "Sicula", + "county": "Arad" + }, + { + "id": 948, + "name": "Cherelus", + "county": "Arad" + }, + { + "id": 949, + "name": "Gurba", + "county": "Arad" + }, + { + "id": 950, + "name": "Silindia", + "county": "Arad" + }, + { + "id": 951, + "name": "Camna", + "county": "Arad" + }, + { + "id": 952, + "name": "Iercoseni", + "county": "Arad" + }, + { + "id": 953, + "name": "Luguzau", + "county": "Arad" + }, + { + "id": 954, + "name": "Satu Mic", + "county": "Arad" + }, + { + "id": 955, + "name": "Simand", + "county": "Arad" + }, + { + "id": 956, + "name": "Siria", + "county": "Arad" + }, + { + "id": 957, + "name": "Galsa", + "county": "Arad" + }, + { + "id": 958, + "name": "Masca", + "county": "Arad" + }, + { + "id": 959, + "name": "Sistarovat", + "county": "Arad" + }, + { + "id": 960, + "name": "Cuvesdia", + "county": "Arad" + }, + { + "id": 961, + "name": "Labasint", + "county": "Arad" + }, + { + "id": 962, + "name": "Varnita", + "county": "Arad" + }, + { + "id": 963, + "name": "Taut", + "county": "Arad" + }, + { + "id": 964, + "name": "Minisel", + "county": "Arad" + }, + { + "id": 965, + "name": "Minisu de Sus", + "county": "Arad" + }, + { + "id": 966, + "name": "Nadas", + "county": "Arad" + }, + { + "id": 967, + "name": "Tarnova", + "county": "Arad" + }, + { + "id": 968, + "name": "Agrisu Mare", + "county": "Arad" + }, + { + "id": 969, + "name": "Araneag", + "county": "Arad" + }, + { + "id": 970, + "name": "Chier", + "county": "Arad" + }, + { + "id": 971, + "name": "Draut", + "county": "Arad" + }, + { + "id": 972, + "name": "Dud", + "county": "Arad" + }, + { + "id": 973, + "name": "Varadia de Mures", + "county": "Arad" + }, + { + "id": 974, + "name": "Baia", + "county": "Arad" + }, + { + "id": 975, + "name": "Julita", + "county": "Arad" + }, + { + "id": 976, + "name": "Lupesti", + "county": "Arad" + }, + { + "id": 977, + "name": "Nicolae Balcescu", + "county": "Arad" + }, + { + "id": 978, + "name": "Stejar", + "county": "Arad" + }, + { + "id": 979, + "name": "Vinga", + "county": "Arad" + }, + { + "id": 980, + "name": "Mailat", + "county": "Arad" + }, + { + "id": 981, + "name": "Manastur", + "county": "Arad" + }, + { + "id": 982, + "name": "Varfurile", + "county": "Arad" + }, + { + "id": 983, + "name": "Avram Iancu", + "county": "Arad" + }, + { + "id": 984, + "name": "Grosi", + "county": "Arad" + }, + { + "id": 985, + "name": "Lazuri", + "county": "Arad" + }, + { + "id": 986, + "name": "Magulicea", + "county": "Arad" + }, + { + "id": 987, + "name": "Mermesti", + "county": "Arad" + }, + { + "id": 988, + "name": "Poiana", + "county": "Arad" + }, + { + "id": 989, + "name": "Vidra", + "county": "Arad" + }, + { + "id": 990, + "name": "Zabrani", + "county": "Arad" + }, + { + "id": 991, + "name": "Chesint", + "county": "Arad" + }, + { + "id": 992, + "name": "Neudorf", + "county": "Arad" + }, + { + "id": 993, + "name": "Zarand", + "county": "Arad" + }, + { + "id": 994, + "name": "Cintei", + "county": "Arad" + }, + { + "id": 995, + "name": "Zerind", + "county": "Arad" + }, + { + "id": 996, + "name": "Iermata Neagra", + "county": "Arad" + }, + { + "id": 997, + "name": "Zimandu Nou", + "county": "Arad" + }, + { + "id": 998, + "name": "Andrei Saguna", + "county": "Arad" + }, + { + "id": 999, + "name": "Zimandcuz", + "county": "Arad" + }, + { + "id": 1000, + "name": "Pitesti", + "county": "Arges" + }, + { + "id": 1001, + "name": "Bascov", + "county": "Arges" + }, + { + "id": 1002, + "name": "Braileni", + "county": "Arges" + }, + { + "id": 1003, + "name": "Glambocu", + "county": "Arges" + }, + { + "id": 1004, + "name": "Mica", + "county": "Arges" + }, + { + "id": 1005, + "name": "Prislopu Mic", + "county": "Arges" + }, + { + "id": 1006, + "name": "Scheau", + "county": "Arges" + }, + { + "id": 1007, + "name": "Uiasca", + "county": "Arges" + }, + { + "id": 1008, + "name": "Valea Ursului", + "county": "Arges" + }, + { + "id": 1009, + "name": "Bradu", + "county": "Arges" + }, + { + "id": 1010, + "name": "Geamana", + "county": "Arges" + }, + { + "id": 1011, + "name": "Mioveni", + "county": "Arges" + }, + { + "id": 1012, + "name": "Clucereasa", + "county": "Arges" + }, + { + "id": 1013, + "name": "Colibasi", + "county": "Arges" + }, + { + "id": 1014, + "name": "Fagetu", + "county": "Arges" + }, + { + "id": 1015, + "name": "Racovita", + "county": "Arges" + }, + { + "id": 1016, + "name": "Maracineni", + "county": "Arges" + }, + { + "id": 1017, + "name": "Argeselu", + "county": "Arges" + }, + { + "id": 1018, + "name": "Stefanesti", + "county": "Arges" + }, + { + "id": 1019, + "name": "Enculesti", + "county": "Arges" + }, + { + "id": 1020, + "name": "Golesti", + "county": "Arges" + }, + { + "id": 1021, + "name": "Izvorani", + "county": "Arges" + }, + { + "id": 1022, + "name": "Stefanestii Noi", + "county": "Arges" + }, + { + "id": 1023, + "name": "Valea Mare-Podgoria", + "county": "Arges" + }, + { + "id": 1024, + "name": "Viisoara", + "county": "Arges" + }, + { + "id": 1025, + "name": "Zavoi", + "county": "Arges" + }, + { + "id": 1026, + "name": "Campulung", + "county": "Arges" + }, + { + "id": 1027, + "name": "Valea Rumanestilor", + "county": "Arges" + }, + { + "id": 1028, + "name": "Valea Mare Pravat", + "county": "Arges" + }, + { + "id": 1029, + "name": "Bilcesti", + "county": "Arges" + }, + { + "id": 1030, + "name": "Colnic", + "county": "Arges" + }, + { + "id": 1031, + "name": "Fantanea", + "county": "Arges" + }, + { + "id": 1032, + "name": "Gura Pravat", + "county": "Arges" + }, + { + "id": 1033, + "name": "Namaesti", + "county": "Arges" + }, + { + "id": 1034, + "name": "Pietroasa", + "county": "Arges" + }, + { + "id": 1035, + "name": "Selari", + "county": "Arges" + }, + { + "id": 1036, + "name": "Curtea de Arges", + "county": "Arges" + }, + { + "id": 1037, + "name": "Noaptes", + "county": "Arges" + }, + { + "id": 1038, + "name": "Costesti", + "county": "Arges" + }, + { + "id": 1039, + "name": "Brosteni", + "county": "Arges" + }, + { + "id": 1040, + "name": "Laceni", + "county": "Arges" + }, + { + "id": 1041, + "name": "Parvu Rosu", + "county": "Arges" + }, + { + "id": 1042, + "name": "Podu Brosteni", + "county": "Arges" + }, + { + "id": 1043, + "name": "Smei", + "county": "Arges" + }, + { + "id": 1044, + "name": "Starci", + "county": "Arges" + }, + { + "id": 1045, + "name": "Topoloveni", + "county": "Arges" + }, + { + "id": 1046, + "name": "Botarcani", + "county": "Arges" + }, + { + "id": 1047, + "name": "Crintesti", + "county": "Arges" + }, + { + "id": 1048, + "name": "Goranesti", + "county": "Arges" + }, + { + "id": 1049, + "name": "Tiganesti", + "county": "Arges" + }, + { + "id": 1050, + "name": "Albestii Pamanteni", + "county": "Arges" + }, + { + "id": 1051, + "name": "Albestii Ungureni", + "county": "Arges" + }, + { + "id": 1052, + "name": "Bratesti", + "county": "Arges" + }, + { + "id": 1053, + "name": "Doblea", + "county": "Arges" + }, + { + "id": 1054, + "name": "Dobrotu", + "county": "Arges" + }, + { + "id": 1055, + "name": "Dumiresti", + "county": "Arges" + }, + { + "id": 1056, + "name": "Florieni", + "county": "Arges" + }, + { + "id": 1057, + "name": "Bughea de Sus", + "county": "Arges" + }, + { + "id": 1058, + "name": "Albesti", + "county": "Arges" + }, + { + "id": 1059, + "name": "Candesti", + "county": "Arges" + }, + { + "id": 1060, + "name": "Albota", + "county": "Arges" + }, + { + "id": 1061, + "name": "Cerbu", + "county": "Arges" + }, + { + "id": 1062, + "name": "Fratesti", + "county": "Arges" + }, + { + "id": 1063, + "name": "Gura Vaii", + "county": "Arges" + }, + { + "id": 1064, + "name": "Mares", + "county": "Arges" + }, + { + "id": 1065, + "name": "Aninoasa", + "county": "Arges" + }, + { + "id": 1066, + "name": "Brosteni", + "county": "Arges" + }, + { + "id": 1067, + "name": "Slanic", + "county": "Arges" + }, + { + "id": 1068, + "name": "Valea Silistii", + "county": "Arges" + }, + { + "id": 1069, + "name": "Capatanenii Pamanteni", + "county": "Arges" + }, + { + "id": 1070, + "name": "Arefu", + "county": "Arges" + }, + { + "id": 1071, + "name": "Capatanenii Ungureni", + "county": "Arges" + }, + { + "id": 1072, + "name": "Babana", + "county": "Arges" + }, + { + "id": 1073, + "name": "Bajanesti", + "county": "Arges" + }, + { + "id": 1074, + "name": "Ciobanesti", + "county": "Arges" + }, + { + "id": 1075, + "name": "Cotmenita", + "county": "Arges" + }, + { + "id": 1076, + "name": "Grosi", + "county": "Arges" + }, + { + "id": 1077, + "name": "Lupueni", + "county": "Arges" + }, + { + "id": 1078, + "name": "Slaatioarele", + "county": "Arges" + }, + { + "id": 1079, + "name": "Baiculesti", + "county": "Arges" + }, + { + "id": 1080, + "name": "Alunisu", + "county": "Arges" + }, + { + "id": 1081, + "name": "Anghinesti", + "county": "Arges" + }, + { + "id": 1082, + "name": "Argesani", + "county": "Arges" + }, + { + "id": 1083, + "name": "Manicesti", + "county": "Arges" + }, + { + "id": 1084, + "name": "Stejari", + "county": "Arges" + }, + { + "id": 1085, + "name": "Tutana", + "county": "Arges" + }, + { + "id": 1086, + "name": "Valea Brazilor", + "county": "Arges" + }, + { + "id": 1087, + "name": "Valea lui Enache", + "county": "Arges" + }, + { + "id": 1088, + "name": "Zigoneni", + "county": "Arges" + }, + { + "id": 1089, + "name": "Balilesti", + "county": "Arges" + }, + { + "id": 1090, + "name": "Bajesti", + "county": "Arges" + }, + { + "id": 1091, + "name": "Golesti", + "county": "Arges" + }, + { + "id": 1092, + "name": "Poienita", + "county": "Arges" + }, + { + "id": 1093, + "name": "Priboaia", + "county": "Arges" + }, + { + "id": 1094, + "name": "Ulita", + "county": "Arges" + }, + { + "id": 1095, + "name": "Valea Mare-Bratia", + "county": "Arges" + }, + { + "id": 1096, + "name": "Zgripcesti", + "county": "Arges" + }, + { + "id": 1097, + "name": "Beleti", + "county": "Arges" + }, + { + "id": 1098, + "name": "Lentea", + "county": "Arges" + }, + { + "id": 1099, + "name": "Negresti", + "county": "Arges" + }, + { + "id": 1100, + "name": "Berevoesti", + "county": "Arges" + }, + { + "id": 1101, + "name": "Bratia", + "county": "Arges" + }, + { + "id": 1102, + "name": "Gamacesti", + "county": "Arges" + }, + { + "id": 1103, + "name": "Otelu", + "county": "Arges" + }, + { + "id": 1104, + "name": "Barla", + "county": "Arges" + }, + { + "id": 1105, + "name": "Afrimesti", + "county": "Arges" + }, + { + "id": 1106, + "name": "Badesti", + "county": "Arges" + }, + { + "id": 1107, + "name": "Brabeti", + "county": "Arges" + }, + { + "id": 1108, + "name": "Ciocesti", + "county": "Arges" + }, + { + "id": 1109, + "name": "Malu", + "county": "Arges" + }, + { + "id": 1110, + "name": "Mandra", + "county": "Arges" + }, + { + "id": 1111, + "name": "Mozacenii-Vale", + "county": "Arges" + }, + { + "id": 1112, + "name": "Podisoru", + "county": "Arges" + }, + { + "id": 1113, + "name": "Selareasca", + "county": "Arges" + }, + { + "id": 1114, + "name": "Urlueni", + "county": "Arges" + }, + { + "id": 1115, + "name": "Zuvelcati", + "county": "Arges" + }, + { + "id": 1116, + "name": "Bogati", + "county": "Arges" + }, + { + "id": 1117, + "name": "Barloi", + "county": "Arges" + }, + { + "id": 1118, + "name": "Bujoi", + "county": "Arges" + }, + { + "id": 1119, + "name": "Chitesti", + "county": "Arges" + }, + { + "id": 1120, + "name": "Dumbrava", + "county": "Arges" + }, + { + "id": 1121, + "name": "Glambocel", + "county": "Arges" + }, + { + "id": 1122, + "name": "Glambocelu", + "county": "Arges" + }, + { + "id": 1123, + "name": "Suseni", + "county": "Arges" + }, + { + "id": 1124, + "name": "Boteni", + "county": "Arges" + }, + { + "id": 1125, + "name": "Balabani", + "county": "Arges" + }, + { + "id": 1126, + "name": "Lunca", + "county": "Arges" + }, + { + "id": 1127, + "name": "Muscel", + "county": "Arges" + }, + { + "id": 1128, + "name": "Botesti", + "county": "Arges" + }, + { + "id": 1129, + "name": "Mosteni-Greci", + "county": "Arges" + }, + { + "id": 1130, + "name": "Bradulet", + "county": "Arges" + }, + { + "id": 1131, + "name": "Alunisu", + "county": "Arges" + }, + { + "id": 1132, + "name": "Bradetu", + "county": "Arges" + }, + { + "id": 1133, + "name": "Cosaci", + "county": "Arges" + }, + { + "id": 1134, + "name": "Galesu", + "county": "Arges" + }, + { + "id": 1135, + "name": "Piatra", + "county": "Arges" + }, + { + "id": 1136, + "name": "Slamnesti", + "county": "Arges" + }, + { + "id": 1137, + "name": "Uleni", + "county": "Arges" + }, + { + "id": 1138, + "name": "Ungureni", + "county": "Arges" + }, + { + "id": 1139, + "name": "Budeasa Mare", + "county": "Arges" + }, + { + "id": 1140, + "name": "Budeasa Mica", + "county": "Arges" + }, + { + "id": 1141, + "name": "Calotesti", + "county": "Arges" + }, + { + "id": 1142, + "name": "Galasesti", + "county": "Arges" + }, + { + "id": 1143, + "name": "Rogojina", + "county": "Arges" + }, + { + "id": 1144, + "name": "Valea Marului", + "county": "Arges" + }, + { + "id": 1145, + "name": "Bughea de Jos", + "county": "Arges" + }, + { + "id": 1146, + "name": "Vulpesti", + "county": "Arges" + }, + { + "id": 1147, + "name": "Bujoreni", + "county": "Arges" + }, + { + "id": 1148, + "name": "Buzoesti", + "county": "Arges" + }, + { + "id": 1149, + "name": "Cornatel", + "county": "Arges" + }, + { + "id": 1150, + "name": "Curteanca", + "county": "Arges" + }, + { + "id": 1151, + "name": "Ionesti", + "county": "Arges" + }, + { + "id": 1152, + "name": "Podeni", + "county": "Arges" + }, + { + "id": 1153, + "name": "Redea", + "county": "Arges" + }, + { + "id": 1154, + "name": "Serboeni", + "county": "Arges" + }, + { + "id": 1155, + "name": "Tomsanca", + "county": "Arges" + }, + { + "id": 1156, + "name": "Vladuta", + "county": "Arges" + }, + { + "id": 1157, + "name": "Caldararu", + "county": "Arges" + }, + { + "id": 1158, + "name": "Burdea", + "county": "Arges" + }, + { + "id": 1159, + "name": "Strambeni", + "county": "Arges" + }, + { + "id": 1160, + "name": "Vranesti", + "county": "Arges" + }, + { + "id": 1161, + "name": "Calinesti", + "county": "Arges" + }, + { + "id": 1162, + "name": "Ciocanesti", + "county": "Arges" + }, + { + "id": 1163, + "name": "Carstieni", + "county": "Arges" + }, + { + "id": 1164, + "name": "Glodu", + "county": "Arges" + }, + { + "id": 1165, + "name": "Gorganu", + "county": "Arges" + }, + { + "id": 1166, + "name": "Radu Negru", + "county": "Arges" + }, + { + "id": 1167, + "name": "Rancaciov", + "county": "Arges" + }, + { + "id": 1168, + "name": "Udeni-Zavoi", + "county": "Arges" + }, + { + "id": 1169, + "name": "Urlucea", + "county": "Arges" + }, + { + "id": 1170, + "name": "Valea Corbului", + "county": "Arges" + }, + { + "id": 1171, + "name": "Valeni-Podgoria", + "county": "Arges" + }, + { + "id": 1172, + "name": "Cateasca", + "county": "Arges" + }, + { + "id": 1173, + "name": "Catanele", + "county": "Arges" + }, + { + "id": 1174, + "name": "Ciresu", + "county": "Arges" + }, + { + "id": 1175, + "name": "Coseri", + "county": "Arges" + }, + { + "id": 1176, + "name": "Gruiu", + "county": "Arges" + }, + { + "id": 1177, + "name": "Recea", + "county": "Arges" + }, + { + "id": 1178, + "name": "Silistea", + "county": "Arges" + }, + { + "id": 1179, + "name": "Ceparii Pamanteni", + "county": "Arges" + }, + { + "id": 1180, + "name": "Carpenis", + "county": "Arges" + }, + { + "id": 1181, + "name": "Ceparii Ungureni", + "county": "Arges" + }, + { + "id": 1182, + "name": "Morasti", + "county": "Arges" + }, + { + "id": 1183, + "name": "Sendrulesti", + "county": "Arges" + }, + { + "id": 1184, + "name": "Urluiesti", + "county": "Arges" + }, + { + "id": 1185, + "name": "Valea Magurei", + "county": "Arges" + }, + { + "id": 1186, + "name": "Zamfiresti", + "county": "Arges" + }, + { + "id": 1187, + "name": "Cetateni", + "county": "Arges" + }, + { + "id": 1188, + "name": "Laicai", + "county": "Arges" + }, + { + "id": 1189, + "name": "Valea Cetatuia", + "county": "Arges" + }, + { + "id": 1190, + "name": "Cicanesti", + "county": "Arges" + }, + { + "id": 1191, + "name": "Barasti", + "county": "Arges" + }, + { + "id": 1192, + "name": "Mioarele", + "county": "Arges" + }, + { + "id": 1193, + "name": "Urechesti", + "county": "Arges" + }, + { + "id": 1194, + "name": "Ciofrangeni", + "county": "Arges" + }, + { + "id": 1195, + "name": "Burlusi", + "county": "Arges" + }, + { + "id": 1196, + "name": "Lacurile", + "county": "Arges" + }, + { + "id": 1197, + "name": "Piatra", + "county": "Arges" + }, + { + "id": 1198, + "name": "Schitu-Matei", + "county": "Arges" + }, + { + "id": 1199, + "name": "Radutesti", + "county": "Arges" + }, + { + "id": 1200, + "name": "Beculesti", + "county": "Arges" + }, + { + "id": 1201, + "name": "Bratia", + "county": "Arges" + }, + { + "id": 1202, + "name": "Ciomagesti", + "county": "Arges" + }, + { + "id": 1203, + "name": "Cungrea", + "county": "Arges" + }, + { + "id": 1204, + "name": "Dogari", + "county": "Arges" + }, + { + "id": 1205, + "name": "Fedelesoiu", + "county": "Arges" + }, + { + "id": 1206, + "name": "Giuclani", + "county": "Arges" + }, + { + "id": 1207, + "name": "Paunesti", + "county": "Arges" + }, + { + "id": 1208, + "name": "Rachitele de Jos", + "county": "Arges" + }, + { + "id": 1209, + "name": "Barbatesti", + "county": "Arges" + }, + { + "id": 1210, + "name": "Cocu", + "county": "Arges" + }, + { + "id": 1211, + "name": "Crucisoara", + "county": "Arges" + }, + { + "id": 1212, + "name": "Facaletesti", + "county": "Arges" + }, + { + "id": 1213, + "name": "Greabanu", + "county": "Arges" + }, + { + "id": 1214, + "name": "Popesti", + "county": "Arges" + }, + { + "id": 1215, + "name": "Rachitele de Sus", + "county": "Arges" + }, + { + "id": 1216, + "name": "Corbeni", + "county": "Arges" + }, + { + "id": 1217, + "name": "Berindesti", + "county": "Arges" + }, + { + "id": 1218, + "name": "Bucsenesti", + "county": "Arges" + }, + { + "id": 1219, + "name": "Oestii Pamanteni", + "county": "Arges" + }, + { + "id": 1220, + "name": "Oestii Ungureni", + "county": "Arges" + }, + { + "id": 1221, + "name": "Poienari", + "county": "Arges" + }, + { + "id": 1222, + "name": "Rotunda", + "county": "Arges" + }, + { + "id": 1223, + "name": "Turburea", + "county": "Arges" + }, + { + "id": 1224, + "name": "Corbi", + "county": "Arges" + }, + { + "id": 1225, + "name": "Corbsori", + "county": "Arges" + }, + { + "id": 1226, + "name": "Jgheaburi", + "county": "Arges" + }, + { + "id": 1227, + "name": "Poduri", + "county": "Arges" + }, + { + "id": 1228, + "name": "Poienarei", + "county": "Arges" + }, + { + "id": 1229, + "name": "Stanesti", + "county": "Arges" + }, + { + "id": 1230, + "name": "Cosesti", + "county": "Arges" + }, + { + "id": 1231, + "name": "Jupanesti", + "county": "Arges" + }, + { + "id": 1232, + "name": "Lapusani", + "county": "Arges" + }, + { + "id": 1233, + "name": "Leicesti", + "county": "Arges" + }, + { + "id": 1234, + "name": "Pacioiu", + "county": "Arges" + }, + { + "id": 1235, + "name": "Petresti", + "county": "Arges" + }, + { + "id": 1236, + "name": "Priseaca", + "county": "Arges" + }, + { + "id": 1237, + "name": "Cotmeana", + "county": "Arges" + }, + { + "id": 1238, + "name": "Bascovele", + "county": "Arges" + }, + { + "id": 1239, + "name": "Bunesti", + "county": "Arges" + }, + { + "id": 1240, + "name": "Costesti", + "county": "Arges" + }, + { + "id": 1241, + "name": "Dealu Padurii", + "county": "Arges" + }, + { + "id": 1242, + "name": "Dragolesti", + "county": "Arges" + }, + { + "id": 1243, + "name": "Lintesti", + "county": "Arges" + }, + { + "id": 1244, + "name": "Negesti", + "county": "Arges" + }, + { + "id": 1245, + "name": "Pielesti", + "county": "Arges" + }, + { + "id": 1246, + "name": "Sandulesti", + "county": "Arges" + }, + { + "id": 1247, + "name": "Spiridoni", + "county": "Arges" + }, + { + "id": 1248, + "name": "Ursoaia", + "county": "Arges" + }, + { + "id": 1249, + "name": "Varloveni", + "county": "Arges" + }, + { + "id": 1250, + "name": "Zamfiresti", + "county": "Arges" + }, + { + "id": 1251, + "name": "Cuca", + "county": "Arges" + }, + { + "id": 1252, + "name": "Baltata", + "county": "Arges" + }, + { + "id": 1253, + "name": "Barbalani", + "county": "Arges" + }, + { + "id": 1254, + "name": "Carcesti", + "county": "Arges" + }, + { + "id": 1255, + "name": "Cotu", + "county": "Arges" + }, + { + "id": 1256, + "name": "Crivatu", + "county": "Arges" + }, + { + "id": 1257, + "name": "Launele de Sus", + "county": "Arges" + }, + { + "id": 1258, + "name": "Macai", + "county": "Arges" + }, + { + "id": 1259, + "name": "Manesti", + "county": "Arges" + }, + { + "id": 1260, + "name": "Sinesti", + "county": "Arges" + }, + { + "id": 1261, + "name": "Stanicei", + "county": "Arges" + }, + { + "id": 1262, + "name": "Teodoresti", + "county": "Arges" + }, + { + "id": 1263, + "name": "Valea Cucii", + "county": "Arges" + }, + { + "id": 1264, + "name": "Vonigeasa", + "county": "Arges" + }, + { + "id": 1265, + "name": "Davidesti", + "county": "Arges" + }, + { + "id": 1266, + "name": "Contesti", + "county": "Arges" + }, + { + "id": 1267, + "name": "Voroveni", + "county": "Arges" + }, + { + "id": 1268, + "name": "Dambovicioara", + "county": "Arges" + }, + { + "id": 1269, + "name": "Ciocanu", + "county": "Arges" + }, + { + "id": 1270, + "name": "Podu Dambovitei", + "county": "Arges" + }, + { + "id": 1271, + "name": "Darmanesti", + "county": "Arges" + }, + { + "id": 1272, + "name": "Negreni", + "county": "Arges" + }, + { + "id": 1273, + "name": "Piscani", + "county": "Arges" + }, + { + "id": 1274, + "name": "Valea Nandrii", + "county": "Arges" + }, + { + "id": 1275, + "name": "Valea Rizii", + "county": "Arges" + }, + { + "id": 1276, + "name": "Dobresti", + "county": "Arges" + }, + { + "id": 1277, + "name": "Furesti", + "county": "Arges" + }, + { + "id": 1278, + "name": "Domnesti", + "county": "Arges" + }, + { + "id": 1279, + "name": "Dragoslavele", + "county": "Arges" + }, + { + "id": 1280, + "name": "Valea Hotarului", + "county": "Arges" + }, + { + "id": 1281, + "name": "Draganu-Olteni", + "county": "Arges" + }, + { + "id": 1282, + "name": "Bacesti", + "county": "Arges" + }, + { + "id": 1283, + "name": "Dumbravesti", + "county": "Arges" + }, + { + "id": 1284, + "name": "Prislopu Mare", + "county": "Arges" + }, + { + "id": 1285, + "name": "Godeni", + "county": "Arges" + }, + { + "id": 1286, + "name": "Bordeieni", + "county": "Arges" + }, + { + "id": 1287, + "name": "Capu Piscului", + "county": "Arges" + }, + { + "id": 1288, + "name": "Cotesti", + "county": "Arges" + }, + { + "id": 1289, + "name": "Malu", + "county": "Arges" + }, + { + "id": 1290, + "name": "Harsesti", + "county": "Arges" + }, + { + "id": 1291, + "name": "Ciobani", + "county": "Arges" + }, + { + "id": 1292, + "name": "Martalogi", + "county": "Arges" + }, + { + "id": 1293, + "name": "Hartiesti", + "county": "Arges" + }, + { + "id": 1294, + "name": "Barzesti", + "county": "Arges" + }, + { + "id": 1295, + "name": "Dealu", + "county": "Arges" + }, + { + "id": 1296, + "name": "Huluba", + "county": "Arges" + }, + { + "id": 1297, + "name": "Lespezi", + "county": "Arges" + }, + { + "id": 1298, + "name": "Lucieni", + "county": "Arges" + }, + { + "id": 1299, + "name": "Vulturesti", + "county": "Arges" + }, + { + "id": 1300, + "name": "Izvoru", + "county": "Arges" + }, + { + "id": 1301, + "name": "Leordeni", + "county": "Arges" + }, + { + "id": 1302, + "name": "Baloteasca", + "county": "Arges" + }, + { + "id": 1303, + "name": "Baila", + "county": "Arges" + }, + { + "id": 1304, + "name": "Bantau", + "county": "Arges" + }, + { + "id": 1305, + "name": "Budisteni", + "county": "Arges" + }, + { + "id": 1306, + "name": "Ciolcesti", + "county": "Arges" + }, + { + "id": 1307, + "name": "Ciulnita", + "county": "Arges" + }, + { + "id": 1308, + "name": "Carciumaresti", + "county": "Arges" + }, + { + "id": 1309, + "name": "Cotu Malului", + "county": "Arges" + }, + { + "id": 1310, + "name": "Glambocata", + "county": "Arges" + }, + { + "id": 1311, + "name": "Glambocata-Deal", + "county": "Arges" + }, + { + "id": 1312, + "name": "Glodu", + "county": "Arges" + }, + { + "id": 1313, + "name": "Moara Mocanului", + "county": "Arges" + }, + { + "id": 1314, + "name": "Schitu Scoicesti", + "county": "Arges" + }, + { + "id": 1315, + "name": "Leresti", + "county": "Arges" + }, + { + "id": 1316, + "name": "Pojorata", + "county": "Arges" + }, + { + "id": 1317, + "name": "Voinesti", + "county": "Arges" + }, + { + "id": 1318, + "name": "Lunca Corbului", + "county": "Arges" + }, + { + "id": 1319, + "name": "Bumbueni", + "county": "Arges" + }, + { + "id": 1320, + "name": "Catane", + "county": "Arges" + }, + { + "id": 1321, + "name": "Ciesti", + "county": "Arges" + }, + { + "id": 1322, + "name": "Langesti", + "county": "Arges" + }, + { + "id": 1323, + "name": "Marghia de Jos", + "county": "Arges" + }, + { + "id": 1324, + "name": "Marghia de Sus", + "county": "Arges" + }, + { + "id": 1325, + "name": "Padureti", + "county": "Arges" + }, + { + "id": 1326, + "name": "Silisteni", + "county": "Arges" + }, + { + "id": 1327, + "name": "Malureni", + "county": "Arges" + }, + { + "id": 1328, + "name": "Bunesti", + "county": "Arges" + }, + { + "id": 1329, + "name": "Pauleasca", + "county": "Arges" + }, + { + "id": 1330, + "name": "Toplita", + "county": "Arges" + }, + { + "id": 1331, + "name": "Zarnesti", + "county": "Arges" + }, + { + "id": 1332, + "name": "Merisani", + "county": "Arges" + }, + { + "id": 1333, + "name": "Borlesti", + "county": "Arges" + }, + { + "id": 1334, + "name": "Brateasca", + "county": "Arges" + }, + { + "id": 1335, + "name": "Capu Piscului", + "county": "Arges" + }, + { + "id": 1336, + "name": "Crampotani", + "county": "Arges" + }, + { + "id": 1337, + "name": "Dobrogostea", + "county": "Arges" + }, + { + "id": 1338, + "name": "Malu Vanat", + "county": "Arges" + }, + { + "id": 1339, + "name": "Varzaru", + "county": "Arges" + }, + { + "id": 1340, + "name": "Valcelele", + "county": "Arges" + }, + { + "id": 1341, + "name": "Micesti", + "county": "Arges" + }, + { + "id": 1342, + "name": "Branzari", + "county": "Arges" + }, + { + "id": 1343, + "name": "Pauleasca", + "county": "Arges" + }, + { + "id": 1344, + "name": "Purcareni", + "county": "Arges" + }, + { + "id": 1345, + "name": "Mihaesti", + "county": "Arges" + }, + { + "id": 1346, + "name": "Draghici", + "county": "Arges" + }, + { + "id": 1347, + "name": "Furnicosi", + "county": "Arges" + }, + { + "id": 1348, + "name": "Rudeni", + "county": "Arges" + }, + { + "id": 1349, + "name": "Valea Bradului", + "county": "Arges" + }, + { + "id": 1350, + "name": "Valea Popii", + "county": "Arges" + }, + { + "id": 1351, + "name": "Vacarea", + "county": "Arges" + }, + { + "id": 1352, + "name": "Matau", + "county": "Arges" + }, + { + "id": 1353, + "name": "Alunis", + "county": "Arges" + }, + { + "id": 1354, + "name": "Chilii", + "county": "Arges" + }, + { + "id": 1355, + "name": "Cocenesti", + "county": "Arges" + }, + { + "id": 1356, + "name": "Suslanesti", + "county": "Arges" + }, + { + "id": 1357, + "name": "Mirosi", + "county": "Arges" + }, + { + "id": 1358, + "name": "Surdulesti", + "county": "Arges" + }, + { + "id": 1359, + "name": "Moraresti", + "county": "Arges" + }, + { + "id": 1360, + "name": "Dedulesti", + "county": "Arges" + }, + { + "id": 1361, + "name": "Dealu Obejdeanului", + "county": "Arges" + }, + { + "id": 1362, + "name": "Luminile", + "county": "Arges" + }, + { + "id": 1363, + "name": "Mancioiu", + "county": "Arges" + }, + { + "id": 1364, + "name": "Sapunari", + "county": "Arges" + }, + { + "id": 1365, + "name": "Mosoaia", + "county": "Arges" + }, + { + "id": 1366, + "name": "Batrani", + "county": "Arges" + }, + { + "id": 1367, + "name": "Ciocanai", + "county": "Arges" + }, + { + "id": 1368, + "name": "Dealu Viilor", + "county": "Arges" + }, + { + "id": 1369, + "name": "Hintesti", + "county": "Arges" + }, + { + "id": 1370, + "name": "Lazaresti", + "county": "Arges" + }, + { + "id": 1371, + "name": "Smeura", + "county": "Arges" + }, + { + "id": 1372, + "name": "Mozaceni", + "county": "Arges" + }, + { + "id": 1373, + "name": "Babaroaga", + "county": "Arges" + }, + { + "id": 1374, + "name": "Zidurile", + "county": "Arges" + }, + { + "id": 1375, + "name": "Valsanesti", + "county": "Arges" + }, + { + "id": 1376, + "name": "Bolovanesti", + "county": "Arges" + }, + { + "id": 1377, + "name": "Costesti-Vaslan", + "county": "Arges" + }, + { + "id": 1378, + "name": "Musatesti", + "county": "Arges" + }, + { + "id": 1379, + "name": "Prosia", + "county": "Arges" + }, + { + "id": 1380, + "name": "Robaia", + "county": "Arges" + }, + { + "id": 1381, + "name": "Stroesti", + "county": "Arges" + }, + { + "id": 1382, + "name": "Valea Faurului", + "county": "Arges" + }, + { + "id": 1383, + "name": "Valea lui Mas", + "county": "Arges" + }, + { + "id": 1384, + "name": "Valea Muscelului", + "county": "Arges" + }, + { + "id": 1385, + "name": "Negrasi", + "county": "Arges" + }, + { + "id": 1386, + "name": "Barlogu", + "county": "Arges" + }, + { + "id": 1387, + "name": "Buta", + "county": "Arges" + }, + { + "id": 1388, + "name": "Mozacu", + "county": "Arges" + }, + { + "id": 1389, + "name": "Nucsoara", + "county": "Arges" + }, + { + "id": 1390, + "name": "Gruiu", + "county": "Arges" + }, + { + "id": 1391, + "name": "Sboghitesti", + "county": "Arges" + }, + { + "id": 1392, + "name": "Slatina", + "county": "Arges" + }, + { + "id": 1393, + "name": "Oarja", + "county": "Arges" + }, + { + "id": 1394, + "name": "Ceausesti", + "county": "Arges" + }, + { + "id": 1395, + "name": "Pietrosani", + "county": "Arges" + }, + { + "id": 1396, + "name": "Badesti", + "county": "Arges" + }, + { + "id": 1397, + "name": "Ganesti", + "county": "Arges" + }, + { + "id": 1398, + "name": "Retevoiesti", + "county": "Arges" + }, + { + "id": 1399, + "name": "Varzaroaia", + "county": "Arges" + }, + { + "id": 1400, + "name": "Poienari", + "county": "Arges" + }, + { + "id": 1401, + "name": "Ceauresti", + "county": "Arges" + }, + { + "id": 1402, + "name": "Ioanicesti", + "county": "Arges" + }, + { + "id": 1403, + "name": "Tomulesti", + "county": "Arges" + }, + { + "id": 1404, + "name": "Poienari", + "county": "Arges" + }, + { + "id": 1405, + "name": "Grosani", + "county": "Arges" + }, + { + "id": 1406, + "name": "Jugur", + "county": "Arges" + }, + { + "id": 1407, + "name": "Serbanesti", + "county": "Arges" + }, + { + "id": 1408, + "name": "Valea Indarat", + "county": "Arges" + }, + { + "id": 1409, + "name": "Poiana Lacului", + "county": "Arges" + }, + { + "id": 1410, + "name": "Catunasi", + "county": "Arges" + }, + { + "id": 1411, + "name": "Cepari", + "county": "Arges" + }, + { + "id": 1412, + "name": "Dealu Orasului", + "county": "Arges" + }, + { + "id": 1413, + "name": "Dealu Viilor", + "county": "Arges" + }, + { + "id": 1414, + "name": "Dinculesti", + "county": "Arges" + }, + { + "id": 1415, + "name": "Galeteanu", + "county": "Arges" + }, + { + "id": 1416, + "name": "Gardinesti", + "county": "Arges" + }, + { + "id": 1417, + "name": "Galcesti", + "county": "Arges" + }, + { + "id": 1418, + "name": "Metofu", + "county": "Arges" + }, + { + "id": 1419, + "name": "Paduroiu din Deal", + "county": "Arges" + }, + { + "id": 1420, + "name": "Paduroiu din Vale", + "county": "Arges" + }, + { + "id": 1421, + "name": "Samara", + "county": "Arges" + }, + { + "id": 1422, + "name": "Popesti", + "county": "Arges" + }, + { + "id": 1423, + "name": "Adunati", + "county": "Arges" + }, + { + "id": 1424, + "name": "Bucov", + "county": "Arges" + }, + { + "id": 1425, + "name": "Palanga", + "county": "Arges" + }, + { + "id": 1426, + "name": "Purcareni", + "county": "Arges" + }, + { + "id": 1427, + "name": "Raca", + "county": "Arges" + }, + { + "id": 1428, + "name": "Slobozia", + "county": "Arges" + }, + { + "id": 1429, + "name": "Priboieni", + "county": "Arges" + }, + { + "id": 1430, + "name": "Albotele", + "county": "Arges" + }, + { + "id": 1431, + "name": "Paraschivesti", + "county": "Arges" + }, + { + "id": 1432, + "name": "Samaila", + "county": "Arges" + }, + { + "id": 1433, + "name": "Pitoi", + "county": "Arges" + }, + { + "id": 1434, + "name": "Valea Mare", + "county": "Arges" + }, + { + "id": 1435, + "name": "Valea Nenii", + "county": "Arges" + }, + { + "id": 1436, + "name": "Valea Popii", + "county": "Arges" + }, + { + "id": 1437, + "name": "Ratesti", + "county": "Arges" + }, + { + "id": 1438, + "name": "Ciupa-Manciulescu", + "county": "Arges" + }, + { + "id": 1439, + "name": "Furduesti", + "county": "Arges" + }, + { + "id": 1440, + "name": "Mavrodolu", + "county": "Arges" + }, + { + "id": 1441, + "name": "Nejlovelu", + "county": "Arges" + }, + { + "id": 1442, + "name": "Patuleni", + "county": "Arges" + }, + { + "id": 1443, + "name": "Tigveni", + "county": "Arges" + }, + { + "id": 1444, + "name": "Recea", + "county": "Arges" + }, + { + "id": 1445, + "name": "Deagu de Jos", + "county": "Arges" + }, + { + "id": 1446, + "name": "Deagu de Sus", + "county": "Arges" + }, + { + "id": 1447, + "name": "Goleasca", + "county": "Arges" + }, + { + "id": 1448, + "name": "Orodel", + "county": "Arges" + }, + { + "id": 1449, + "name": "Rociu", + "county": "Arges" + }, + { + "id": 1450, + "name": "Gliganu de Jos", + "county": "Arges" + }, + { + "id": 1451, + "name": "Gliganu de Sus", + "county": "Arges" + }, + { + "id": 1452, + "name": "Serbanesti", + "county": "Arges" + }, + { + "id": 1453, + "name": "Rucar", + "county": "Arges" + }, + { + "id": 1454, + "name": "Satic", + "county": "Arges" + }, + { + "id": 1455, + "name": "Salatrucu", + "county": "Arges" + }, + { + "id": 1456, + "name": "Valeni", + "county": "Arges" + }, + { + "id": 1457, + "name": "Martesti", + "county": "Arges" + }, + { + "id": 1458, + "name": "Banaresti", + "county": "Arges" + }, + { + "id": 1459, + "name": "Dealu Bradului", + "county": "Arges" + }, + { + "id": 1460, + "name": "Draghicesti", + "county": "Arges" + }, + { + "id": 1461, + "name": "Gainusa", + "county": "Arges" + }, + { + "id": 1462, + "name": "Lipia", + "county": "Arges" + }, + { + "id": 1463, + "name": "Popesti", + "county": "Arges" + }, + { + "id": 1464, + "name": "Turcesti", + "county": "Arges" + }, + { + "id": 1465, + "name": "Schitu Golesti", + "county": "Arges" + }, + { + "id": 1466, + "name": "Burnesti", + "county": "Arges" + }, + { + "id": 1467, + "name": "Costita", + "county": "Arges" + }, + { + "id": 1468, + "name": "Lazaresti", + "county": "Arges" + }, + { + "id": 1469, + "name": "Loturi", + "county": "Arges" + }, + { + "id": 1470, + "name": "Valea Pechii", + "county": "Arges" + }, + { + "id": 1471, + "name": "Slobozia", + "county": "Arges" + }, + { + "id": 1472, + "name": "Nigrisoara", + "county": "Arges" + }, + { + "id": 1473, + "name": "Stalpeni", + "county": "Arges" + }, + { + "id": 1474, + "name": "Dealu Frumos", + "county": "Arges" + }, + { + "id": 1475, + "name": "Livezeni", + "county": "Arges" + }, + { + "id": 1476, + "name": "Ogrezea", + "county": "Arges" + }, + { + "id": 1477, + "name": "Opresti", + "county": "Arges" + }, + { + "id": 1478, + "name": "Pitigaia", + "county": "Arges" + }, + { + "id": 1479, + "name": "Radesti", + "county": "Arges" + }, + { + "id": 1480, + "name": "Stoenesti", + "county": "Arges" + }, + { + "id": 1481, + "name": "Badeni", + "county": "Arges" + }, + { + "id": 1482, + "name": "Cotenesti", + "county": "Arges" + }, + { + "id": 1483, + "name": "Lunca Gartii", + "county": "Arges" + }, + { + "id": 1484, + "name": "Piatra", + "county": "Arges" + }, + { + "id": 1485, + "name": "Slobozia", + "county": "Arges" + }, + { + "id": 1486, + "name": "Valea Badenilor", + "county": "Arges" + }, + { + "id": 1487, + "name": "Stolnici", + "county": "Arges" + }, + { + "id": 1488, + "name": "Cochinesti", + "county": "Arges" + }, + { + "id": 1489, + "name": "Cotmeana", + "county": "Arges" + }, + { + "id": 1490, + "name": "Falfani", + "county": "Arges" + }, + { + "id": 1491, + "name": "Izbasesti", + "county": "Arges" + }, + { + "id": 1492, + "name": "Vlascuta", + "county": "Arges" + }, + { + "id": 1493, + "name": "Suseni", + "county": "Arges" + }, + { + "id": 1494, + "name": "Burdesti", + "county": "Arges" + }, + { + "id": 1495, + "name": "Cersani", + "county": "Arges" + }, + { + "id": 1496, + "name": "Chiritesti", + "county": "Arges" + }, + { + "id": 1497, + "name": "Galesesti", + "county": "Arges" + }, + { + "id": 1498, + "name": "Odaeni", + "county": "Arges" + }, + { + "id": 1499, + "name": "Padureni", + "county": "Arges" + }, + { + "id": 1500, + "name": "Strambeni", + "county": "Arges" + }, + { + "id": 1501, + "name": "Stefanesti", + "county": "Arges" + }, + { + "id": 1502, + "name": "Tutulesti", + "county": "Arges" + }, + { + "id": 1503, + "name": "Stefan cel Mare", + "county": "Arges" + }, + { + "id": 1504, + "name": "Glavacioc", + "county": "Arges" + }, + { + "id": 1505, + "name": "Suici", + "county": "Arges" + }, + { + "id": 1506, + "name": "Ianculesti", + "county": "Arges" + }, + { + "id": 1507, + "name": "Paltenu", + "county": "Arges" + }, + { + "id": 1508, + "name": "Pauleni", + "county": "Arges" + }, + { + "id": 1509, + "name": "Rudeni", + "county": "Arges" + }, + { + "id": 1510, + "name": "Valea Calului", + "county": "Arges" + }, + { + "id": 1511, + "name": "Teiu", + "county": "Arges" + }, + { + "id": 1512, + "name": "Lesile", + "county": "Arges" + }, + { + "id": 1513, + "name": "Tigveni", + "county": "Arges" + }, + { + "id": 1514, + "name": "Badislava", + "county": "Arges" + }, + { + "id": 1515, + "name": "Balilesti", + "county": "Arges" + }, + { + "id": 1516, + "name": "Balteni", + "county": "Arges" + }, + { + "id": 1517, + "name": "Barsestii de Jos", + "county": "Arges" + }, + { + "id": 1518, + "name": "Barsestii de Sus", + "county": "Arges" + }, + { + "id": 1519, + "name": "Blaju", + "county": "Arges" + }, + { + "id": 1520, + "name": "Vladesti", + "county": "Arges" + }, + { + "id": 1521, + "name": "Titesti", + "county": "Arges" + }, + { + "id": 1522, + "name": "Bucsenesti-Lotasi", + "county": "Arges" + }, + { + "id": 1523, + "name": "Cismea", + "county": "Arges" + }, + { + "id": 1524, + "name": "Valea Manastirii", + "county": "Arges" + }, + { + "id": 1525, + "name": "Valea Stanii", + "county": "Arges" + }, + { + "id": 1526, + "name": "Uda", + "county": "Arges" + }, + { + "id": 1527, + "name": "Badulesti", + "county": "Arges" + }, + { + "id": 1528, + "name": "Baranesti", + "county": "Arges" + }, + { + "id": 1529, + "name": "Branistea", + "county": "Arges" + }, + { + "id": 1530, + "name": "Chiritesti", + "county": "Arges" + }, + { + "id": 1531, + "name": "Cotu", + "county": "Arges" + }, + { + "id": 1532, + "name": "Dealu Bisericii", + "county": "Arges" + }, + { + "id": 1533, + "name": "Dealu Tolcesii", + "county": "Arges" + }, + { + "id": 1534, + "name": "Diconesti", + "county": "Arges" + }, + { + "id": 1535, + "name": "Gorani", + "county": "Arges" + }, + { + "id": 1536, + "name": "Greaban", + "county": "Arges" + }, + { + "id": 1537, + "name": "Lungulesti", + "county": "Arges" + }, + { + "id": 1538, + "name": "Miercani", + "county": "Arges" + }, + { + "id": 1539, + "name": "Rajletu-Govora", + "county": "Arges" + }, + { + "id": 1540, + "name": "Romana", + "county": "Arges" + }, + { + "id": 1541, + "name": "Salistea", + "county": "Arges" + }, + { + "id": 1542, + "name": "Ungheni", + "county": "Arges" + }, + { + "id": 1543, + "name": "Coltu", + "county": "Arges" + }, + { + "id": 1544, + "name": "Gaujani", + "county": "Arges" + }, + { + "id": 1545, + "name": "Goia", + "county": "Arges" + }, + { + "id": 1546, + "name": "Humele", + "county": "Arges" + }, + { + "id": 1547, + "name": "Satu Nou", + "county": "Arges" + }, + { + "id": 1548, + "name": "Valea Danului", + "county": "Arges" + }, + { + "id": 1549, + "name": "Banicesti", + "county": "Arges" + }, + { + "id": 1550, + "name": "Bolculesti", + "county": "Arges" + }, + { + "id": 1551, + "name": "Borobanesti", + "county": "Arges" + }, + { + "id": 1552, + "name": "Vernesti", + "county": "Arges" + }, + { + "id": 1553, + "name": "Valea Iasului", + "county": "Arges" + }, + { + "id": 1554, + "name": "Badila", + "county": "Arges" + }, + { + "id": 1555, + "name": "Barbalatesti", + "county": "Arges" + }, + { + "id": 1556, + "name": "Borovinesti", + "county": "Arges" + }, + { + "id": 1557, + "name": "Cerbureni", + "county": "Arges" + }, + { + "id": 1558, + "name": "Mustatesti", + "county": "Arges" + }, + { + "id": 1559, + "name": "Ruginoasa", + "county": "Arges" + }, + { + "id": 1560, + "name": "Ungureni", + "county": "Arges" + }, + { + "id": 1561, + "name": "Valea Uleiului", + "county": "Arges" + }, + { + "id": 1562, + "name": "Vedea", + "county": "Arges" + }, + { + "id": 1563, + "name": "Badicea", + "county": "Arges" + }, + { + "id": 1564, + "name": "Blejani", + "county": "Arges" + }, + { + "id": 1565, + "name": "Buretesti", + "county": "Arges" + }, + { + "id": 1566, + "name": "Chiritesti", + "county": "Arges" + }, + { + "id": 1567, + "name": "Chitani", + "county": "Arges" + }, + { + "id": 1568, + "name": "Ciuresti", + "county": "Arges" + }, + { + "id": 1569, + "name": "Dincani", + "county": "Arges" + }, + { + "id": 1570, + "name": "Fata", + "county": "Arges" + }, + { + "id": 1571, + "name": "Fratici", + "county": "Arges" + }, + { + "id": 1572, + "name": "Izvoru de Jos", + "county": "Arges" + }, + { + "id": 1573, + "name": "Izvoru de Sus", + "county": "Arges" + }, + { + "id": 1574, + "name": "Lungani", + "county": "Arges" + }, + { + "id": 1575, + "name": "Mogosesti", + "county": "Arges" + }, + { + "id": 1576, + "name": "Prodani", + "county": "Arges" + }, + { + "id": 1577, + "name": "Ratoi", + "county": "Arges" + }, + { + "id": 1578, + "name": "Vata", + "county": "Arges" + }, + { + "id": 1579, + "name": "Vetisoara", + "county": "Arges" + }, + { + "id": 1580, + "name": "Varsesti", + "county": "Arges" + }, + { + "id": 1581, + "name": "Vladesti", + "county": "Arges" + }, + { + "id": 1582, + "name": "Coteasca", + "county": "Arges" + }, + { + "id": 1583, + "name": "Draghescu", + "county": "Arges" + }, + { + "id": 1584, + "name": "Putina", + "county": "Arges" + }, + { + "id": 1585, + "name": "Bacau", + "county": "Bacau" + }, + { + "id": 1586, + "name": "Hemeius", + "county": "Bacau" + }, + { + "id": 1587, + "name": "Fantanele", + "county": "Bacau" + }, + { + "id": 1588, + "name": "Lilieci", + "county": "Bacau" + }, + { + "id": 1589, + "name": "Letea Veche", + "county": "Bacau" + }, + { + "id": 1590, + "name": "Holt", + "county": "Bacau" + }, + { + "id": 1591, + "name": "Radomiresti", + "county": "Bacau" + }, + { + "id": 1592, + "name": "Rusi-Ciutea", + "county": "Bacau" + }, + { + "id": 1593, + "name": "Siretu", + "county": "Bacau" + }, + { + "id": 1594, + "name": "Magura", + "county": "Bacau" + }, + { + "id": 1595, + "name": "Crihan", + "county": "Bacau" + }, + { + "id": 1596, + "name": "Dealu-Mare", + "county": "Bacau" + }, + { + "id": 1597, + "name": "Sohodol", + "county": "Bacau" + }, + { + "id": 1598, + "name": "Margineni", + "county": "Bacau" + }, + { + "id": 1599, + "name": "Barati", + "county": "Bacau" + }, + { + "id": 1600, + "name": "Luncani", + "county": "Bacau" + }, + { + "id": 1601, + "name": "Padureni", + "county": "Bacau" + }, + { + "id": 1602, + "name": "Podis", + "county": "Bacau" + }, + { + "id": 1603, + "name": "Poiana", + "county": "Bacau" + }, + { + "id": 1604, + "name": "Trebes", + "county": "Bacau" + }, + { + "id": 1605, + "name": "Valea Budului", + "county": "Bacau" + }, + { + "id": 1606, + "name": "Onesti", + "county": "Bacau" + }, + { + "id": 1607, + "name": "Borzesti", + "county": "Bacau" + }, + { + "id": 1608, + "name": "Slobozia", + "county": "Bacau" + }, + { + "id": 1609, + "name": "Gura Vaii", + "county": "Bacau" + }, + { + "id": 1610, + "name": "Capata", + "county": "Bacau" + }, + { + "id": 1611, + "name": "Dumbrava", + "county": "Bacau" + }, + { + "id": 1612, + "name": "Motocesti", + "county": "Bacau" + }, + { + "id": 1613, + "name": "Paltinata", + "county": "Bacau" + }, + { + "id": 1614, + "name": "Temelia", + "county": "Bacau" + }, + { + "id": 1615, + "name": "Stefan cel Mare", + "county": "Bacau" + }, + { + "id": 1616, + "name": "Bogdana", + "county": "Bacau" + }, + { + "id": 1617, + "name": "Buciumi", + "county": "Bacau" + }, + { + "id": 1618, + "name": "Gutinas", + "county": "Bacau" + }, + { + "id": 1619, + "name": "Negoiesti", + "county": "Bacau" + }, + { + "id": 1620, + "name": "Racauti", + "county": "Bacau" + }, + { + "id": 1621, + "name": "Radeana", + "county": "Bacau" + }, + { + "id": 1622, + "name": "Viisoara", + "county": "Bacau" + }, + { + "id": 1623, + "name": "Buhusi", + "county": "Bacau" + }, + { + "id": 1624, + "name": "Marginea", + "county": "Bacau" + }, + { + "id": 1625, + "name": "Runcu", + "county": "Bacau" + }, + { + "id": 1626, + "name": "Comanesti", + "county": "Bacau" + }, + { + "id": 1627, + "name": "Podei", + "county": "Bacau" + }, + { + "id": 1628, + "name": "Vermesti", + "county": "Bacau" + }, + { + "id": 1629, + "name": "Moinesti", + "county": "Bacau" + }, + { + "id": 1630, + "name": "Gazarie", + "county": "Bacau" + }, + { + "id": 1631, + "name": "Slanic-Moldova", + "county": "Bacau" + }, + { + "id": 1632, + "name": "Cerdac", + "county": "Bacau" + }, + { + "id": 1633, + "name": "Ciresoaia", + "county": "Bacau" + }, + { + "id": 1634, + "name": "Targu Ocna", + "county": "Bacau" + }, + { + "id": 1635, + "name": "Poieni", + "county": "Bacau" + }, + { + "id": 1636, + "name": "Valcele", + "county": "Bacau" + }, + { + "id": 1637, + "name": "Agas", + "county": "Bacau" + }, + { + "id": 1638, + "name": "Beleghet", + "county": "Bacau" + }, + { + "id": 1639, + "name": "Cosnea", + "county": "Bacau" + }, + { + "id": 1640, + "name": "Cotumba", + "county": "Bacau" + }, + { + "id": 1641, + "name": "Diaconesti", + "county": "Bacau" + }, + { + "id": 1642, + "name": "Goioasa", + "county": "Bacau" + }, + { + "id": 1643, + "name": "Preluci", + "county": "Bacau" + }, + { + "id": 1644, + "name": "Sulta", + "county": "Bacau" + }, + { + "id": 1645, + "name": "Ardeoani", + "county": "Bacau" + }, + { + "id": 1646, + "name": "Leontinesti", + "county": "Bacau" + }, + { + "id": 1647, + "name": "Asau", + "county": "Bacau" + }, + { + "id": 1648, + "name": "Apa Asau", + "county": "Bacau" + }, + { + "id": 1649, + "name": "Ciobanus", + "county": "Bacau" + }, + { + "id": 1650, + "name": "Lunca Asau", + "county": "Bacau" + }, + { + "id": 1651, + "name": "Paltinis", + "county": "Bacau" + }, + { + "id": 1652, + "name": "Straja", + "county": "Bacau" + }, + { + "id": 1653, + "name": "Balcani", + "county": "Bacau" + }, + { + "id": 1654, + "name": "Frumoasa", + "county": "Bacau" + }, + { + "id": 1655, + "name": "Ludasi", + "county": "Bacau" + }, + { + "id": 1656, + "name": "Schitu Frumoasa", + "county": "Bacau" + }, + { + "id": 1657, + "name": "Beresti-Bistrita", + "county": "Bacau" + }, + { + "id": 1658, + "name": "Brad", + "county": "Bacau" + }, + { + "id": 1659, + "name": "Ciumasi", + "county": "Bacau" + }, + { + "id": 1660, + "name": "Climesti", + "county": "Bacau" + }, + { + "id": 1661, + "name": "Dumbrava", + "county": "Bacau" + }, + { + "id": 1662, + "name": "Fagetel", + "county": "Bacau" + }, + { + "id": 1663, + "name": "Itesti", + "county": "Bacau" + }, + { + "id": 1664, + "name": "Padureni", + "county": "Bacau" + }, + { + "id": 1665, + "name": "Beresti-Tazlau", + "county": "Bacau" + }, + { + "id": 1666, + "name": "Bosoteni", + "county": "Bacau" + }, + { + "id": 1667, + "name": "Enachesti", + "county": "Bacau" + }, + { + "id": 1668, + "name": "Prisaca", + "county": "Bacau" + }, + { + "id": 1669, + "name": "Romanesti", + "county": "Bacau" + }, + { + "id": 1670, + "name": "Tescani", + "county": "Bacau" + }, + { + "id": 1671, + "name": "Turluianu", + "county": "Bacau" + }, + { + "id": 1672, + "name": "Berzunti", + "county": "Bacau" + }, + { + "id": 1673, + "name": "Buda", + "county": "Bacau" + }, + { + "id": 1674, + "name": "Dragomir", + "county": "Bacau" + }, + { + "id": 1675, + "name": "Barsanesti", + "county": "Bacau" + }, + { + "id": 1676, + "name": "Albele", + "county": "Bacau" + }, + { + "id": 1677, + "name": "Bratesti", + "county": "Bacau" + }, + { + "id": 1678, + "name": "Caraclau", + "county": "Bacau" + }, + { + "id": 1679, + "name": "Blagesti", + "county": "Bacau" + }, + { + "id": 1680, + "name": "Buda", + "county": "Bacau" + }, + { + "id": 1681, + "name": "Poiana Negustorului", + "county": "Bacau" + }, + { + "id": 1682, + "name": "Tardenii Mari", + "county": "Bacau" + }, + { + "id": 1683, + "name": "Valea lui Ion", + "county": "Bacau" + }, + { + "id": 1684, + "name": "Bogdanesti", + "county": "Bacau" + }, + { + "id": 1685, + "name": "Filipesti", + "county": "Bacau" + }, + { + "id": 1686, + "name": "Brusturoasa", + "county": "Bacau" + }, + { + "id": 1687, + "name": "Buruienis", + "county": "Bacau" + }, + { + "id": 1688, + "name": "Buruienisu de Sus", + "county": "Bacau" + }, + { + "id": 1689, + "name": "Camenca", + "county": "Bacau" + }, + { + "id": 1690, + "name": "Cuchinis", + "county": "Bacau" + }, + { + "id": 1691, + "name": "Hanganesti", + "county": "Bacau" + }, + { + "id": 1692, + "name": "Buhoci", + "county": "Bacau" + }, + { + "id": 1693, + "name": "Bijghir", + "county": "Bacau" + }, + { + "id": 1694, + "name": "Buhocel", + "county": "Bacau" + }, + { + "id": 1695, + "name": "Coteni", + "county": "Bacau" + }, + { + "id": 1696, + "name": "Dospinesti", + "county": "Bacau" + }, + { + "id": 1697, + "name": "Casin", + "county": "Bacau" + }, + { + "id": 1698, + "name": "Curita", + "county": "Bacau" + }, + { + "id": 1699, + "name": "Caiuti", + "county": "Bacau" + }, + { + "id": 1700, + "name": "Blidari", + "county": "Bacau" + }, + { + "id": 1701, + "name": "Boistea", + "county": "Bacau" + }, + { + "id": 1702, + "name": "Floresti", + "county": "Bacau" + }, + { + "id": 1703, + "name": "Heltiu", + "county": "Bacau" + }, + { + "id": 1704, + "name": "Marcesti", + "county": "Bacau" + }, + { + "id": 1705, + "name": "Popeni", + "county": "Bacau" + }, + { + "id": 1706, + "name": "Pralea", + "county": "Bacau" + }, + { + "id": 1707, + "name": "Vranceni", + "county": "Bacau" + }, + { + "id": 1708, + "name": "Cleja", + "county": "Bacau" + }, + { + "id": 1709, + "name": "Somusca", + "county": "Bacau" + }, + { + "id": 1710, + "name": "Valea Mica", + "county": "Bacau" + }, + { + "id": 1711, + "name": "Colonesti", + "county": "Bacau" + }, + { + "id": 1712, + "name": "Calini", + "county": "Bacau" + }, + { + "id": 1713, + "name": "Poiana", + "county": "Bacau" + }, + { + "id": 1714, + "name": "Satu Nou", + "county": "Bacau" + }, + { + "id": 1715, + "name": "Spria", + "county": "Bacau" + }, + { + "id": 1716, + "name": "Valea Mare", + "county": "Bacau" + }, + { + "id": 1717, + "name": "Zapodia", + "county": "Bacau" + }, + { + "id": 1718, + "name": "Corbasca", + "county": "Bacau" + }, + { + "id": 1719, + "name": "Bacioiu", + "county": "Bacau" + }, + { + "id": 1720, + "name": "Marvila", + "county": "Bacau" + }, + { + "id": 1721, + "name": "Poglet", + "county": "Bacau" + }, + { + "id": 1722, + "name": "Rogoaza", + "county": "Bacau" + }, + { + "id": 1723, + "name": "Scarisoara", + "county": "Bacau" + }, + { + "id": 1724, + "name": "Valcele", + "county": "Bacau" + }, + { + "id": 1725, + "name": "Cotofanesti", + "county": "Bacau" + }, + { + "id": 1726, + "name": "Balca", + "county": "Bacau" + }, + { + "id": 1727, + "name": "Boistea de Jos", + "county": "Bacau" + }, + { + "id": 1728, + "name": "Borsani", + "county": "Bacau" + }, + { + "id": 1729, + "name": "Tamasoaia", + "county": "Bacau" + }, + { + "id": 1730, + "name": "Damienesti", + "county": "Bacau" + }, + { + "id": 1731, + "name": "Calugareni", + "county": "Bacau" + }, + { + "id": 1732, + "name": "Dragesti", + "county": "Bacau" + }, + { + "id": 1733, + "name": "Padureni", + "county": "Bacau" + }, + { + "id": 1734, + "name": "Darmanesti", + "county": "Bacau" + }, + { + "id": 1735, + "name": "Darmaneasca", + "county": "Bacau" + }, + { + "id": 1736, + "name": "Lapos", + "county": "Bacau" + }, + { + "id": 1737, + "name": "Pagubeni", + "county": "Bacau" + }, + { + "id": 1738, + "name": "Plopu", + "county": "Bacau" + }, + { + "id": 1739, + "name": "Salatruc", + "county": "Bacau" + }, + { + "id": 1740, + "name": "Dealu Morii", + "county": "Bacau" + }, + { + "id": 1741, + "name": "Banca", + "county": "Bacau" + }, + { + "id": 1742, + "name": "Balanesti", + "county": "Bacau" + }, + { + "id": 1743, + "name": "Blaga", + "county": "Bacau" + }, + { + "id": 1744, + "name": "Bobos", + "county": "Bacau" + }, + { + "id": 1745, + "name": "Bodeasa", + "county": "Bacau" + }, + { + "id": 1746, + "name": "Bostanesti", + "county": "Bacau" + }, + { + "id": 1747, + "name": "Calapodesti", + "county": "Bacau" + }, + { + "id": 1748, + "name": "Cauia", + "county": "Bacau" + }, + { + "id": 1749, + "name": "Dorofei", + "county": "Bacau" + }, + { + "id": 1750, + "name": "Ghionoaia", + "county": "Bacau" + }, + { + "id": 1751, + "name": "Gradesti", + "county": "Bacau" + }, + { + "id": 1752, + "name": "Negulesti", + "county": "Bacau" + }, + { + "id": 1753, + "name": "Tavadaresti", + "county": "Bacau" + }, + { + "id": 1754, + "name": "Dofteana", + "county": "Bacau" + }, + { + "id": 1755, + "name": "Bogata", + "county": "Bacau" + }, + { + "id": 1756, + "name": "Cucuieti", + "county": "Bacau" + }, + { + "id": 1757, + "name": "Haghiac", + "county": "Bacau" + }, + { + "id": 1758, + "name": "Larga", + "county": "Bacau" + }, + { + "id": 1759, + "name": "Seaca", + "county": "Bacau" + }, + { + "id": 1760, + "name": "Stefan Voda", + "county": "Bacau" + }, + { + "id": 1761, + "name": "Faraoani", + "county": "Bacau" + }, + { + "id": 1762, + "name": "Filipeni", + "county": "Bacau" + }, + { + "id": 1763, + "name": "Balaia", + "county": "Bacau" + }, + { + "id": 1764, + "name": "Brad", + "county": "Bacau" + }, + { + "id": 1765, + "name": "Fruntesti", + "county": "Bacau" + }, + { + "id": 1766, + "name": "Marasti", + "county": "Bacau" + }, + { + "id": 1767, + "name": "Padureni", + "county": "Bacau" + }, + { + "id": 1768, + "name": "Slobozia", + "county": "Bacau" + }, + { + "id": 1769, + "name": "Valea Botului", + "county": "Bacau" + }, + { + "id": 1770, + "name": "Filipesti", + "county": "Bacau" + }, + { + "id": 1771, + "name": "Boanta", + "county": "Bacau" + }, + { + "id": 1772, + "name": "Carligi", + "county": "Bacau" + }, + { + "id": 1773, + "name": "Cornesti", + "county": "Bacau" + }, + { + "id": 1774, + "name": "Cotu Grosului", + "county": "Bacau" + }, + { + "id": 1775, + "name": "Galbeni", + "county": "Bacau" + }, + { + "id": 1776, + "name": "Harlesti", + "county": "Bacau" + }, + { + "id": 1777, + "name": "Oniscani", + "county": "Bacau" + }, + { + "id": 1778, + "name": "Gaiceana", + "county": "Bacau" + }, + { + "id": 1779, + "name": "Arini", + "county": "Bacau" + }, + { + "id": 1780, + "name": "Hutu", + "county": "Bacau" + }, + { + "id": 1781, + "name": "Popesti", + "county": "Bacau" + }, + { + "id": 1782, + "name": "Faget", + "county": "Bacau" + }, + { + "id": 1783, + "name": "Bolovanis", + "county": "Bacau" + }, + { + "id": 1784, + "name": "Fagetu de Sus", + "county": "Bacau" + }, + { + "id": 1785, + "name": "Ghimes", + "county": "Bacau" + }, + { + "id": 1786, + "name": "Rachitis", + "county": "Bacau" + }, + { + "id": 1787, + "name": "Tarhausi", + "county": "Bacau" + }, + { + "id": 1788, + "name": "Garlenii de Sus", + "county": "Bacau" + }, + { + "id": 1789, + "name": "Garleni", + "county": "Bacau" + }, + { + "id": 1790, + "name": "Lespezi", + "county": "Bacau" + }, + { + "id": 1791, + "name": "Surina", + "county": "Bacau" + }, + { + "id": 1792, + "name": "Glavanesti", + "county": "Bacau" + }, + { + "id": 1793, + "name": "Frumuselu", + "county": "Bacau" + }, + { + "id": 1794, + "name": "Muncelu", + "county": "Bacau" + }, + { + "id": 1795, + "name": "Putredeni", + "county": "Bacau" + }, + { + "id": 1796, + "name": "Razesu", + "county": "Bacau" + }, + { + "id": 1797, + "name": "Helegiu", + "county": "Bacau" + }, + { + "id": 1798, + "name": "Bratila", + "county": "Bacau" + }, + { + "id": 1799, + "name": "Deleni", + "county": "Bacau" + }, + { + "id": 1800, + "name": "Dragugesti", + "county": "Bacau" + }, + { + "id": 1801, + "name": "Horgesti", + "county": "Bacau" + }, + { + "id": 1802, + "name": "Bazga", + "county": "Bacau" + }, + { + "id": 1803, + "name": "Galeri", + "county": "Bacau" + }, + { + "id": 1804, + "name": "Marascu", + "county": "Bacau" + }, + { + "id": 1805, + "name": "Racatau-Razesi", + "county": "Bacau" + }, + { + "id": 1806, + "name": "Racatau de Jos", + "county": "Bacau" + }, + { + "id": 1807, + "name": "Recea", + "county": "Bacau" + }, + { + "id": 1808, + "name": "Sohodor", + "county": "Bacau" + }, + { + "id": 1809, + "name": "Valeni", + "county": "Bacau" + }, + { + "id": 1810, + "name": "Huruiesti", + "county": "Bacau" + }, + { + "id": 1811, + "name": "Capotesti", + "county": "Bacau" + }, + { + "id": 1812, + "name": "Floresti", + "county": "Bacau" + }, + { + "id": 1813, + "name": "Fundoaia", + "county": "Bacau" + }, + { + "id": 1814, + "name": "Ocheni", + "county": "Bacau" + }, + { + "id": 1815, + "name": "Perchiu", + "county": "Bacau" + }, + { + "id": 1816, + "name": "Pradais", + "county": "Bacau" + }, + { + "id": 1817, + "name": "Izvoru Berheciului", + "county": "Bacau" + }, + { + "id": 1818, + "name": "Antohesti", + "county": "Bacau" + }, + { + "id": 1819, + "name": "Baimac", + "county": "Bacau" + }, + { + "id": 1820, + "name": "Faghieni", + "county": "Bacau" + }, + { + "id": 1821, + "name": "Obarsia", + "county": "Bacau" + }, + { + "id": 1822, + "name": "Otelesti", + "county": "Bacau" + }, + { + "id": 1823, + "name": "Padureni", + "county": "Bacau" + }, + { + "id": 1824, + "name": "Lipova", + "county": "Bacau" + }, + { + "id": 1825, + "name": "Malosu", + "county": "Bacau" + }, + { + "id": 1826, + "name": "Satu Nou", + "county": "Bacau" + }, + { + "id": 1827, + "name": "Valea Caselor", + "county": "Bacau" + }, + { + "id": 1828, + "name": "Valea Hogei", + "county": "Bacau" + }, + { + "id": 1829, + "name": "Valea Marului", + "county": "Bacau" + }, + { + "id": 1830, + "name": "Valea Mosneagului", + "county": "Bacau" + }, + { + "id": 1831, + "name": "Livezi", + "county": "Bacau" + }, + { + "id": 1832, + "name": "Balaneasa", + "county": "Bacau" + }, + { + "id": 1833, + "name": "Orasa", + "county": "Bacau" + }, + { + "id": 1834, + "name": "Poiana", + "county": "Bacau" + }, + { + "id": 1835, + "name": "Prajoaia", + "county": "Bacau" + }, + { + "id": 1836, + "name": "Scariga", + "county": "Bacau" + }, + { + "id": 1837, + "name": "Luizi-Calugara", + "county": "Bacau" + }, + { + "id": 1838, + "name": "Osebiti", + "county": "Bacau" + }, + { + "id": 1839, + "name": "Magiresti", + "county": "Bacau" + }, + { + "id": 1840, + "name": "Prajesti", + "county": "Bacau" + }, + { + "id": 1841, + "name": "Stanesti", + "county": "Bacau" + }, + { + "id": 1842, + "name": "Sesuri", + "county": "Bacau" + }, + { + "id": 1843, + "name": "Valea Arinilor", + "county": "Bacau" + }, + { + "id": 1844, + "name": "Manastirea Casin", + "county": "Bacau" + }, + { + "id": 1845, + "name": "Lupesti", + "county": "Bacau" + }, + { + "id": 1846, + "name": "Parvulesti", + "county": "Bacau" + }, + { + "id": 1847, + "name": "Scutaru", + "county": "Bacau" + }, + { + "id": 1848, + "name": "Motoseni", + "county": "Bacau" + }, + { + "id": 1849, + "name": "Baclesti", + "county": "Bacau" + }, + { + "id": 1850, + "name": "Chetreni", + "county": "Bacau" + }, + { + "id": 1851, + "name": "Chicerea", + "county": "Bacau" + }, + { + "id": 1852, + "name": "Cociu", + "county": "Bacau" + }, + { + "id": 1853, + "name": "Cornatelu", + "county": "Bacau" + }, + { + "id": 1854, + "name": "Fantanele", + "county": "Bacau" + }, + { + "id": 1855, + "name": "Fundatura", + "county": "Bacau" + }, + { + "id": 1856, + "name": "Gura Craiesti", + "county": "Bacau" + }, + { + "id": 1857, + "name": "Poiana", + "county": "Bacau" + }, + { + "id": 1858, + "name": "Praja", + "county": "Bacau" + }, + { + "id": 1859, + "name": "Rotaria", + "county": "Bacau" + }, + { + "id": 1860, + "name": "Sendresti", + "county": "Bacau" + }, + { + "id": 1861, + "name": "Tepoaia", + "county": "Bacau" + }, + { + "id": 1862, + "name": "Negri", + "county": "Bacau" + }, + { + "id": 1863, + "name": "Brad", + "county": "Bacau" + }, + { + "id": 1864, + "name": "Calinesti", + "county": "Bacau" + }, + { + "id": 1865, + "name": "Magla", + "county": "Bacau" + }, + { + "id": 1866, + "name": "Poiana", + "county": "Bacau" + }, + { + "id": 1867, + "name": "Ursoaia", + "county": "Bacau" + }, + { + "id": 1868, + "name": "Nicolae Balcescu", + "county": "Bacau" + }, + { + "id": 1869, + "name": "Baltata", + "county": "Bacau" + }, + { + "id": 1870, + "name": "Buchila", + "county": "Bacau" + }, + { + "id": 1871, + "name": "Galbeni", + "county": "Bacau" + }, + { + "id": 1872, + "name": "Larguta", + "county": "Bacau" + }, + { + "id": 1873, + "name": "Sarata", + "county": "Bacau" + }, + { + "id": 1874, + "name": "Valea Seaca", + "county": "Bacau" + }, + { + "id": 1875, + "name": "Oituz", + "county": "Bacau" + }, + { + "id": 1876, + "name": "Calcai", + "county": "Bacau" + }, + { + "id": 1877, + "name": "Ferestrau-Oituz", + "county": "Bacau" + }, + { + "id": 1878, + "name": "Harja", + "county": "Bacau" + }, + { + "id": 1879, + "name": "Marginea", + "county": "Bacau" + }, + { + "id": 1880, + "name": "Poiana Sarata", + "county": "Bacau" + }, + { + "id": 1881, + "name": "Oncesti", + "county": "Bacau" + }, + { + "id": 1882, + "name": "Barboasa", + "county": "Bacau" + }, + { + "id": 1883, + "name": "Dealu Perjului", + "county": "Bacau" + }, + { + "id": 1884, + "name": "Oncestii Vechi", + "county": "Bacau" + }, + { + "id": 1885, + "name": "Satu Nou", + "county": "Bacau" + }, + { + "id": 1886, + "name": "Tarnita", + "county": "Bacau" + }, + { + "id": 1887, + "name": "Taula", + "county": "Bacau" + }, + { + "id": 1888, + "name": "Orbeni", + "county": "Bacau" + }, + { + "id": 1889, + "name": "Scurta", + "county": "Bacau" + }, + { + "id": 1890, + "name": "Palanca", + "county": "Bacau" + }, + { + "id": 1891, + "name": "Cadaresti", + "county": "Bacau" + }, + { + "id": 1892, + "name": "Ciughes", + "county": "Bacau" + }, + { + "id": 1893, + "name": "Pajistea", + "county": "Bacau" + }, + { + "id": 1894, + "name": "Popoiu", + "county": "Bacau" + }, + { + "id": 1895, + "name": "Parava", + "county": "Bacau" + }, + { + "id": 1896, + "name": "Dragusani", + "county": "Bacau" + }, + { + "id": 1897, + "name": "Radoaia", + "county": "Bacau" + }, + { + "id": 1898, + "name": "Teius", + "county": "Bacau" + }, + { + "id": 1899, + "name": "Parincea", + "county": "Bacau" + }, + { + "id": 1900, + "name": "Barna", + "county": "Bacau" + }, + { + "id": 1901, + "name": "Milestii de Jos", + "county": "Bacau" + }, + { + "id": 1902, + "name": "Milestii de Sus", + "county": "Bacau" + }, + { + "id": 1903, + "name": "Nanesti", + "county": "Bacau" + }, + { + "id": 1904, + "name": "Nastaseni", + "county": "Bacau" + }, + { + "id": 1905, + "name": "Poieni", + "county": "Bacau" + }, + { + "id": 1906, + "name": "Satu Nou", + "county": "Bacau" + }, + { + "id": 1907, + "name": "Vladnic", + "county": "Bacau" + }, + { + "id": 1908, + "name": "Pancesti", + "county": "Bacau" + }, + { + "id": 1909, + "name": "Chilia Benei", + "county": "Bacau" + }, + { + "id": 1910, + "name": "Dienet", + "county": "Bacau" + }, + { + "id": 1911, + "name": "Fulgeris", + "county": "Bacau" + }, + { + "id": 1912, + "name": "Fundu Vaii", + "county": "Bacau" + }, + { + "id": 1913, + "name": "Motoc", + "county": "Bacau" + }, + { + "id": 1914, + "name": "Petresti", + "county": "Bacau" + }, + { + "id": 1915, + "name": "Soci", + "county": "Bacau" + }, + { + "id": 1916, + "name": "Pargaresti", + "county": "Bacau" + }, + { + "id": 1917, + "name": "Bahna", + "county": "Bacau" + }, + { + "id": 1918, + "name": "Nicoresti", + "county": "Bacau" + }, + { + "id": 1919, + "name": "Parau Boghii", + "county": "Bacau" + }, + { + "id": 1920, + "name": "Satu Nou", + "county": "Bacau" + }, + { + "id": 1921, + "name": "Parjol", + "county": "Bacau" + }, + { + "id": 1922, + "name": "Bahnaseni", + "county": "Bacau" + }, + { + "id": 1923, + "name": "Barnesti", + "county": "Bacau" + }, + { + "id": 1924, + "name": "Basasti", + "county": "Bacau" + }, + { + "id": 1925, + "name": "Campeni", + "county": "Bacau" + }, + { + "id": 1926, + "name": "Haineala", + "county": "Bacau" + }, + { + "id": 1927, + "name": "Pustiana", + "county": "Bacau" + }, + { + "id": 1928, + "name": "Tarata", + "county": "Bacau" + }, + { + "id": 1929, + "name": "Plopana", + "county": "Bacau" + }, + { + "id": 1930, + "name": "Budesti", + "county": "Bacau" + }, + { + "id": 1931, + "name": "Dorneni", + "county": "Bacau" + }, + { + "id": 1932, + "name": "Fundu Tutovei", + "county": "Bacau" + }, + { + "id": 1933, + "name": "Itcani", + "county": "Bacau" + }, + { + "id": 1934, + "name": "Rusenii Razesi", + "county": "Bacau" + }, + { + "id": 1935, + "name": "Rusenii de Sus", + "county": "Bacau" + }, + { + "id": 1936, + "name": "Straminoasa", + "county": "Bacau" + }, + { + "id": 1937, + "name": "Tagara", + "county": "Bacau" + }, + { + "id": 1938, + "name": "Podu Turcului", + "county": "Bacau" + }, + { + "id": 1939, + "name": "Balanesti", + "county": "Bacau" + }, + { + "id": 1940, + "name": "Cabesti", + "county": "Bacau" + }, + { + "id": 1941, + "name": "Fichitesti", + "county": "Bacau" + }, + { + "id": 1942, + "name": "Giurgioana", + "county": "Bacau" + }, + { + "id": 1943, + "name": "Hanta", + "county": "Bacau" + }, + { + "id": 1944, + "name": "Lehancea", + "county": "Bacau" + }, + { + "id": 1945, + "name": "Plopu", + "county": "Bacau" + }, + { + "id": 1946, + "name": "Racusana", + "county": "Bacau" + }, + { + "id": 1947, + "name": "Sarbi", + "county": "Bacau" + }, + { + "id": 1948, + "name": "Poduri", + "county": "Bacau" + }, + { + "id": 1949, + "name": "Bucsesti", + "county": "Bacau" + }, + { + "id": 1950, + "name": "Cernu", + "county": "Bacau" + }, + { + "id": 1951, + "name": "Cornet", + "county": "Bacau" + }, + { + "id": 1952, + "name": "Negreni", + "county": "Bacau" + }, + { + "id": 1953, + "name": "Prohozesti", + "county": "Bacau" + }, + { + "id": 1954, + "name": "Valea Sosii", + "county": "Bacau" + }, + { + "id": 1955, + "name": "Racova", + "county": "Bacau" + }, + { + "id": 1956, + "name": "Gura Vaii", + "county": "Bacau" + }, + { + "id": 1957, + "name": "Halmacioaia", + "county": "Bacau" + }, + { + "id": 1958, + "name": "Iliesi", + "county": "Bacau" + }, + { + "id": 1959, + "name": "Racaciuni", + "county": "Bacau" + }, + { + "id": 1960, + "name": "Ciucani", + "county": "Bacau" + }, + { + "id": 1961, + "name": "Fundu Racaciuni", + "county": "Bacau" + }, + { + "id": 1962, + "name": "Gheorghe Doja", + "county": "Bacau" + }, + { + "id": 1963, + "name": "Gasteni", + "county": "Bacau" + }, + { + "id": 1964, + "name": "Rastoaca", + "county": "Bacau" + }, + { + "id": 1965, + "name": "Rachitoasa", + "county": "Bacau" + }, + { + "id": 1966, + "name": "Barcana", + "county": "Bacau" + }, + { + "id": 1967, + "name": "Bucsa", + "county": "Bacau" + }, + { + "id": 1968, + "name": "Buda", + "county": "Bacau" + }, + { + "id": 1969, + "name": "Burdusaci", + "county": "Bacau" + }, + { + "id": 1970, + "name": "Danaila", + "county": "Bacau" + }, + { + "id": 1971, + "name": "Dumbrava", + "county": "Bacau" + }, + { + "id": 1972, + "name": "Farcasa", + "county": "Bacau" + }, + { + "id": 1973, + "name": "Fundatura Rachitoasa", + "county": "Bacau" + }, + { + "id": 1974, + "name": "Haghiac", + "county": "Bacau" + }, + { + "id": 1975, + "name": "Magazia", + "county": "Bacau" + }, + { + "id": 1976, + "name": "Movilita", + "county": "Bacau" + }, + { + "id": 1977, + "name": "Oprisesti", + "county": "Bacau" + }, + { + "id": 1978, + "name": "Putini", + "county": "Bacau" + }, + { + "id": 1979, + "name": "Tochilea", + "county": "Bacau" + }, + { + "id": 1980, + "name": "Rosiori", + "county": "Bacau" + }, + { + "id": 1981, + "name": "Misihanesti", + "county": "Bacau" + }, + { + "id": 1982, + "name": "Neguseni", + "county": "Bacau" + }, + { + "id": 1983, + "name": "Poieni", + "county": "Bacau" + }, + { + "id": 1984, + "name": "Valea Mare", + "county": "Bacau" + }, + { + "id": 1985, + "name": "Valea Mica", + "county": "Bacau" + }, + { + "id": 1986, + "name": "Sascut", + "county": "Bacau" + }, + { + "id": 1987, + "name": "Beresti", + "county": "Bacau" + }, + { + "id": 1988, + "name": "Contesti", + "county": "Bacau" + }, + { + "id": 1989, + "name": "Pancesti", + "county": "Bacau" + }, + { + "id": 1990, + "name": "Sascut-Sat", + "county": "Bacau" + }, + { + "id": 1991, + "name": "Schineni", + "county": "Bacau" + }, + { + "id": 1992, + "name": "Valea Nacului", + "county": "Bacau" + }, + { + "id": 1993, + "name": "Sanduleni", + "county": "Bacau" + }, + { + "id": 1994, + "name": "Barzulesti", + "county": "Bacau" + }, + { + "id": 1995, + "name": "Coman", + "county": "Bacau" + }, + { + "id": 1996, + "name": "Mateiesti", + "county": "Bacau" + }, + { + "id": 1997, + "name": "Stufu", + "county": "Bacau" + }, + { + "id": 1998, + "name": "Tisa", + "county": "Bacau" + }, + { + "id": 1999, + "name": "Versesti", + "county": "Bacau" + }, + { + "id": 2000, + "name": "Saucesti", + "county": "Bacau" + }, + { + "id": 2001, + "name": "Bogdan Voda", + "county": "Bacau" + }, + { + "id": 2002, + "name": "Costei", + "county": "Bacau" + }, + { + "id": 2003, + "name": "Schineni", + "county": "Bacau" + }, + { + "id": 2004, + "name": "Siretu", + "county": "Bacau" + }, + { + "id": 2005, + "name": "Serbesti", + "county": "Bacau" + }, + { + "id": 2006, + "name": "Scorteni", + "county": "Bacau" + }, + { + "id": 2007, + "name": "Bogdanesti", + "county": "Bacau" + }, + { + "id": 2008, + "name": "Floresti", + "county": "Bacau" + }, + { + "id": 2009, + "name": "Grigoreni", + "county": "Bacau" + }, + { + "id": 2010, + "name": "Stejaru", + "county": "Bacau" + }, + { + "id": 2011, + "name": "Serpeni", + "county": "Bacau" + }, + { + "id": 2012, + "name": "Secuieni", + "county": "Bacau" + }, + { + "id": 2013, + "name": "Balusa", + "county": "Bacau" + }, + { + "id": 2014, + "name": "Berbinceni", + "county": "Bacau" + }, + { + "id": 2015, + "name": "Chiticeni", + "county": "Bacau" + }, + { + "id": 2016, + "name": "Ciuturesti", + "county": "Bacau" + }, + { + "id": 2017, + "name": "Fundeni", + "county": "Bacau" + }, + { + "id": 2018, + "name": "Glodisoarele", + "county": "Bacau" + }, + { + "id": 2019, + "name": "Odobesti", + "county": "Bacau" + }, + { + "id": 2020, + "name": "Tisa-Silvestri", + "county": "Bacau" + }, + { + "id": 2021, + "name": "Valea Fanatului", + "county": "Bacau" + }, + { + "id": 2022, + "name": "Valeni", + "county": "Bacau" + }, + { + "id": 2023, + "name": "Solont", + "county": "Bacau" + }, + { + "id": 2024, + "name": "Cucuieti", + "county": "Bacau" + }, + { + "id": 2025, + "name": "Sarata", + "county": "Bacau" + }, + { + "id": 2026, + "name": "Stanisesti", + "county": "Bacau" + }, + { + "id": 2027, + "name": "Balotesti", + "county": "Bacau" + }, + { + "id": 2028, + "name": "Belciuneasa", + "county": "Bacau" + }, + { + "id": 2029, + "name": "Benesti", + "county": "Bacau" + }, + { + "id": 2030, + "name": "Craiesti", + "county": "Bacau" + }, + { + "id": 2031, + "name": "Gorghesti", + "county": "Bacau" + }, + { + "id": 2032, + "name": "Slobozia", + "county": "Bacau" + }, + { + "id": 2033, + "name": "Slobozia Noua", + "county": "Bacau" + }, + { + "id": 2034, + "name": "Valeni", + "county": "Bacau" + }, + { + "id": 2035, + "name": "Strugari", + "county": "Bacau" + }, + { + "id": 2036, + "name": "Cetatuia", + "county": "Bacau" + }, + { + "id": 2037, + "name": "Iaz", + "county": "Bacau" + }, + { + "id": 2038, + "name": "Nadisa", + "county": "Bacau" + }, + { + "id": 2039, + "name": "Petricica", + "county": "Bacau" + }, + { + "id": 2040, + "name": "Rachitisu", + "county": "Bacau" + }, + { + "id": 2041, + "name": "Tamasi", + "county": "Bacau" + }, + { + "id": 2042, + "name": "Chetris", + "county": "Bacau" + }, + { + "id": 2043, + "name": "Furnicari", + "county": "Bacau" + }, + { + "id": 2044, + "name": "Gioseni", + "county": "Bacau" + }, + { + "id": 2045, + "name": "Tatarasti", + "county": "Bacau" + }, + { + "id": 2046, + "name": "Cornii de Jos", + "county": "Bacau" + }, + { + "id": 2047, + "name": "Cornii de Sus", + "county": "Bacau" + }, + { + "id": 2048, + "name": "Dragesti", + "county": "Bacau" + }, + { + "id": 2049, + "name": "Gherdana", + "county": "Bacau" + }, + { + "id": 2050, + "name": "Giurgeni", + "county": "Bacau" + }, + { + "id": 2051, + "name": "Ungureni", + "county": "Bacau" + }, + { + "id": 2052, + "name": "Targu Trotus", + "county": "Bacau" + }, + { + "id": 2053, + "name": "Tuta", + "county": "Bacau" + }, + { + "id": 2054, + "name": "Viisoara", + "county": "Bacau" + }, + { + "id": 2055, + "name": "Traian", + "county": "Bacau" + }, + { + "id": 2056, + "name": "Bogdanesti", + "county": "Bacau" + }, + { + "id": 2057, + "name": "Hertioana de Jos", + "county": "Bacau" + }, + { + "id": 2058, + "name": "Hertioana-Razesi", + "county": "Bacau" + }, + { + "id": 2059, + "name": "Prajesti", + "county": "Bacau" + }, + { + "id": 2060, + "name": "Zapodia", + "county": "Bacau" + }, + { + "id": 2061, + "name": "Ungureni", + "county": "Bacau" + }, + { + "id": 2062, + "name": "Bartasesti", + "county": "Bacau" + }, + { + "id": 2063, + "name": "Bibiresti", + "county": "Bacau" + }, + { + "id": 2064, + "name": "Bota", + "county": "Bacau" + }, + { + "id": 2065, + "name": "Botesti", + "county": "Bacau" + }, + { + "id": 2066, + "name": "Garla Anei", + "county": "Bacau" + }, + { + "id": 2067, + "name": "Viforeni", + "county": "Bacau" + }, + { + "id": 2068, + "name": "Zlatari", + "county": "Bacau" + }, + { + "id": 2069, + "name": "Urechesti", + "county": "Bacau" + }, + { + "id": 2070, + "name": "Cornatel", + "county": "Bacau" + }, + { + "id": 2071, + "name": "Lunca Dochiei", + "county": "Bacau" + }, + { + "id": 2072, + "name": "Satu Nou", + "county": "Bacau" + }, + { + "id": 2073, + "name": "Slobozia", + "county": "Bacau" + }, + { + "id": 2074, + "name": "Valea Seaca", + "county": "Bacau" + }, + { + "id": 2075, + "name": "Cucova", + "county": "Bacau" + }, + { + "id": 2076, + "name": "Lichitiseni", + "county": "Bacau" + }, + { + "id": 2077, + "name": "Bosia", + "county": "Bacau" + }, + { + "id": 2078, + "name": "Dadesti", + "county": "Bacau" + }, + { + "id": 2079, + "name": "Dorneni", + "county": "Bacau" + }, + { + "id": 2080, + "name": "Ghilavesti", + "county": "Bacau" + }, + { + "id": 2081, + "name": "Godinestii de Jos", + "county": "Bacau" + }, + { + "id": 2082, + "name": "Godinestii de Sus", + "county": "Bacau" + }, + { + "id": 2083, + "name": "Medeleni", + "county": "Bacau" + }, + { + "id": 2084, + "name": "Nazarioaia", + "county": "Bacau" + }, + { + "id": 2085, + "name": "Reprivat", + "county": "Bacau" + }, + { + "id": 2086, + "name": "Tomozia", + "county": "Bacau" + }, + { + "id": 2087, + "name": "Tiganesti", + "county": "Bacau" + }, + { + "id": 2088, + "name": "Valea Lupului", + "county": "Bacau" + }, + { + "id": 2089, + "name": "Valea Merilor", + "county": "Bacau" + }, + { + "id": 2090, + "name": "Valea Salciei", + "county": "Bacau" + }, + { + "id": 2091, + "name": "Vultureni", + "county": "Bacau" + }, + { + "id": 2092, + "name": "Zemes", + "county": "Bacau" + }, + { + "id": 2093, + "name": "Bolatau", + "county": "Bacau" + }, + { + "id": 2094, + "name": "Hemieni", + "county": "Bacau" + }, + { + "id": 2095, + "name": "Oradea", + "county": "Bihor" + }, + { + "id": 2096, + "name": "Sanmartin", + "county": "Bihor" + }, + { + "id": 2097, + "name": "Betfia", + "county": "Bihor" + }, + { + "id": 2098, + "name": "Cihei", + "county": "Bihor" + }, + { + "id": 2099, + "name": "Cordau", + "county": "Bihor" + }, + { + "id": 2100, + "name": "Haieu", + "county": "Bihor" + }, + { + "id": 2101, + "name": "Rontau", + "county": "Bihor" + }, + { + "id": 2102, + "name": "Santandrei", + "county": "Bihor" + }, + { + "id": 2103, + "name": "Palota", + "county": "Bihor" + }, + { + "id": 2104, + "name": "Alesd", + "county": "Bihor" + }, + { + "id": 2105, + "name": "Padurea Neagra", + "county": "Bihor" + }, + { + "id": 2106, + "name": "Pestis", + "county": "Bihor" + }, + { + "id": 2107, + "name": "Tinaud", + "county": "Bihor" + }, + { + "id": 2108, + "name": "Astileu", + "county": "Bihor" + }, + { + "id": 2109, + "name": "Calatea", + "county": "Bihor" + }, + { + "id": 2110, + "name": "Chistag", + "county": "Bihor" + }, + { + "id": 2111, + "name": "Pestere", + "county": "Bihor" + }, + { + "id": 2112, + "name": "Beius", + "county": "Bihor" + }, + { + "id": 2113, + "name": "Delani", + "county": "Bihor" + }, + { + "id": 2114, + "name": "Stei", + "county": "Bihor" + }, + { + "id": 2115, + "name": "Marghita", + "county": "Bihor" + }, + { + "id": 2116, + "name": "Chet", + "county": "Bihor" + }, + { + "id": 2117, + "name": "Ghenetea", + "county": "Bihor" + }, + { + "id": 2118, + "name": "Nucet", + "county": "Bihor" + }, + { + "id": 2119, + "name": "Baita", + "county": "Bihor" + }, + { + "id": 2120, + "name": "Baita-Plai", + "county": "Bihor" + }, + { + "id": 2121, + "name": "Salonta", + "county": "Bihor" + }, + { + "id": 2122, + "name": "Vascau", + "county": "Bihor" + }, + { + "id": 2123, + "name": "Camp", + "county": "Bihor" + }, + { + "id": 2124, + "name": "Camp-Moti", + "county": "Bihor" + }, + { + "id": 2125, + "name": "Colesti", + "county": "Bihor" + }, + { + "id": 2126, + "name": "Varzarii de Jos", + "county": "Bihor" + }, + { + "id": 2127, + "name": "Varzarii de Sus", + "county": "Bihor" + }, + { + "id": 2128, + "name": "Abram", + "county": "Bihor" + }, + { + "id": 2129, + "name": "Cohani", + "county": "Bihor" + }, + { + "id": 2130, + "name": "Dijir", + "county": "Bihor" + }, + { + "id": 2131, + "name": "Iteu", + "county": "Bihor" + }, + { + "id": 2132, + "name": "Iteu Nou", + "county": "Bihor" + }, + { + "id": 2133, + "name": "Margine", + "county": "Bihor" + }, + { + "id": 2134, + "name": "Satu Barba", + "county": "Bihor" + }, + { + "id": 2135, + "name": "Suiug", + "county": "Bihor" + }, + { + "id": 2136, + "name": "Abramut", + "county": "Bihor" + }, + { + "id": 2137, + "name": "Crestur", + "county": "Bihor" + }, + { + "id": 2138, + "name": "Fancica", + "county": "Bihor" + }, + { + "id": 2139, + "name": "Petreu", + "county": "Bihor" + }, + { + "id": 2140, + "name": "Auseu", + "county": "Bihor" + }, + { + "id": 2141, + "name": "Cacuciu Vechi", + "county": "Bihor" + }, + { + "id": 2142, + "name": "Codrisoru", + "county": "Bihor" + }, + { + "id": 2143, + "name": "Gheghie", + "county": "Bihor" + }, + { + "id": 2144, + "name": "Grosi", + "county": "Bihor" + }, + { + "id": 2145, + "name": "Luncsoara", + "county": "Bihor" + }, + { + "id": 2146, + "name": "Avram Iancu", + "county": "Bihor" + }, + { + "id": 2147, + "name": "Ant", + "county": "Bihor" + }, + { + "id": 2148, + "name": "Tamasda", + "county": "Bihor" + }, + { + "id": 2149, + "name": "Balc", + "county": "Bihor" + }, + { + "id": 2150, + "name": "Almasu Mare", + "county": "Bihor" + }, + { + "id": 2151, + "name": "Almasu Mic", + "county": "Bihor" + }, + { + "id": 2152, + "name": "Ghida", + "county": "Bihor" + }, + { + "id": 2153, + "name": "Saldabagiu de Barcau", + "county": "Bihor" + }, + { + "id": 2154, + "name": "Batar", + "county": "Bihor" + }, + { + "id": 2155, + "name": "Arpasel", + "county": "Bihor" + }, + { + "id": 2156, + "name": "Talpos", + "county": "Bihor" + }, + { + "id": 2157, + "name": "Taut", + "county": "Bihor" + }, + { + "id": 2158, + "name": "Biharia", + "county": "Bihor" + }, + { + "id": 2159, + "name": "Cauaceu", + "county": "Bihor" + }, + { + "id": 2160, + "name": "Niuved", + "county": "Bihor" + }, + { + "id": 2161, + "name": "Parhida", + "county": "Bihor" + }, + { + "id": 2162, + "name": "Satu Nou", + "county": "Bihor" + }, + { + "id": 2163, + "name": "Tamaseu", + "county": "Bihor" + }, + { + "id": 2164, + "name": "Boianu Mare", + "county": "Bihor" + }, + { + "id": 2165, + "name": "Corboaia", + "county": "Bihor" + }, + { + "id": 2166, + "name": "Huta", + "county": "Bihor" + }, + { + "id": 2167, + "name": "Pagaia", + "county": "Bihor" + }, + { + "id": 2168, + "name": "Rugea", + "county": "Bihor" + }, + { + "id": 2169, + "name": "Borod", + "county": "Bihor" + }, + { + "id": 2170, + "name": "Borozel", + "county": "Bihor" + }, + { + "id": 2171, + "name": "Cetea", + "county": "Bihor" + }, + { + "id": 2172, + "name": "Cornitel", + "county": "Bihor" + }, + { + "id": 2173, + "name": "Serani", + "county": "Bihor" + }, + { + "id": 2174, + "name": "Valea Mare de Cris", + "county": "Bihor" + }, + { + "id": 2175, + "name": "Bors", + "county": "Bihor" + }, + { + "id": 2176, + "name": "Santaul Mare", + "county": "Bihor" + }, + { + "id": 2177, + "name": "Santaul Mic", + "county": "Bihor" + }, + { + "id": 2178, + "name": "Santion", + "county": "Bihor" + }, + { + "id": 2179, + "name": "Bratca", + "county": "Bihor" + }, + { + "id": 2180, + "name": "Damis", + "county": "Bihor" + }, + { + "id": 2181, + "name": "Beznea", + "county": "Bihor" + }, + { + "id": 2182, + "name": "Lorau", + "county": "Bihor" + }, + { + "id": 2183, + "name": "Ponoara", + "county": "Bihor" + }, + { + "id": 2184, + "name": "Valea Crisului", + "county": "Bihor" + }, + { + "id": 2185, + "name": "Brusturi", + "county": "Bihor" + }, + { + "id": 2186, + "name": "Cuiesd", + "county": "Bihor" + }, + { + "id": 2187, + "name": "Loranta", + "county": "Bihor" + }, + { + "id": 2188, + "name": "Orvisele", + "county": "Bihor" + }, + { + "id": 2189, + "name": "Paulesti", + "county": "Bihor" + }, + { + "id": 2190, + "name": "Picleu", + "county": "Bihor" + }, + { + "id": 2191, + "name": "Tiganestii de Cris", + "county": "Bihor" + }, + { + "id": 2192, + "name": "Varasau", + "county": "Bihor" + }, + { + "id": 2193, + "name": "Budureasa", + "county": "Bihor" + }, + { + "id": 2194, + "name": "Burda", + "county": "Bihor" + }, + { + "id": 2195, + "name": "Saca", + "county": "Bihor" + }, + { + "id": 2196, + "name": "Saliste de Beius", + "county": "Bihor" + }, + { + "id": 2197, + "name": "Teleac", + "county": "Bihor" + }, + { + "id": 2198, + "name": "Buduslau", + "county": "Bihor" + }, + { + "id": 2199, + "name": "Albis", + "county": "Bihor" + }, + { + "id": 2200, + "name": "Bulz", + "county": "Bihor" + }, + { + "id": 2201, + "name": "Munteni", + "county": "Bihor" + }, + { + "id": 2202, + "name": "Remeti", + "county": "Bihor" + }, + { + "id": 2203, + "name": "Buntesti", + "county": "Bihor" + }, + { + "id": 2204, + "name": "Bradet", + "county": "Bihor" + }, + { + "id": 2205, + "name": "Dumbravani", + "county": "Bihor" + }, + { + "id": 2206, + "name": "Ferice", + "county": "Bihor" + }, + { + "id": 2207, + "name": "Lelesti", + "county": "Bihor" + }, + { + "id": 2208, + "name": "Poienii de Jos", + "county": "Bihor" + }, + { + "id": 2209, + "name": "Poienii de Sus", + "county": "Bihor" + }, + { + "id": 2210, + "name": "Saud", + "county": "Bihor" + }, + { + "id": 2211, + "name": "Stancesti", + "county": "Bihor" + }, + { + "id": 2212, + "name": "Cabesti", + "county": "Bihor" + }, + { + "id": 2213, + "name": "Goila", + "county": "Bihor" + }, + { + "id": 2214, + "name": "Gurbesti", + "county": "Bihor" + }, + { + "id": 2215, + "name": "Josani", + "county": "Bihor" + }, + { + "id": 2216, + "name": "Sohodol", + "county": "Bihor" + }, + { + "id": 2217, + "name": "Capalna", + "county": "Bihor" + }, + { + "id": 2218, + "name": "Ginta", + "county": "Bihor" + }, + { + "id": 2219, + "name": "Rohani", + "county": "Bihor" + }, + { + "id": 2220, + "name": "Saldabagiu Mic", + "county": "Bihor" + }, + { + "id": 2221, + "name": "Suplacu de Tinca", + "county": "Bihor" + }, + { + "id": 2222, + "name": "Carpinet", + "county": "Bihor" + }, + { + "id": 2223, + "name": "Izbuc", + "county": "Bihor" + }, + { + "id": 2224, + "name": "Leheceni", + "county": "Bihor" + }, + { + "id": 2225, + "name": "Calugari", + "county": "Bihor" + }, + { + "id": 2226, + "name": "Cefa", + "county": "Bihor" + }, + { + "id": 2227, + "name": "Ateas", + "county": "Bihor" + }, + { + "id": 2228, + "name": "Berechiu", + "county": "Bihor" + }, + { + "id": 2229, + "name": "Bicaci", + "county": "Bihor" + }, + { + "id": 2230, + "name": "Gepiu", + "county": "Bihor" + }, + { + "id": 2231, + "name": "Inand", + "county": "Bihor" + }, + { + "id": 2232, + "name": "Roit", + "county": "Bihor" + }, + { + "id": 2233, + "name": "Sannicolau Roman", + "county": "Bihor" + }, + { + "id": 2234, + "name": "Ceica", + "county": "Bihor" + }, + { + "id": 2235, + "name": "Bucium", + "county": "Bihor" + }, + { + "id": 2236, + "name": "Ceisoara", + "county": "Bihor" + }, + { + "id": 2237, + "name": "Corbesti", + "county": "Bihor" + }, + { + "id": 2238, + "name": "Cotiglet", + "county": "Bihor" + }, + { + "id": 2239, + "name": "Dusesti", + "county": "Bihor" + }, + { + "id": 2240, + "name": "Incesti", + "county": "Bihor" + }, + { + "id": 2241, + "name": "Cetariu", + "county": "Bihor" + }, + { + "id": 2242, + "name": "Paleu", + "county": "Bihor" + }, + { + "id": 2243, + "name": "Saldabagiu de Munte", + "county": "Bihor" + }, + { + "id": 2244, + "name": "Sisterea", + "county": "Bihor" + }, + { + "id": 2245, + "name": "Susturogi", + "county": "Bihor" + }, + { + "id": 2246, + "name": "Tautelec", + "county": "Bihor" + }, + { + "id": 2247, + "name": "Uileacu de Munte", + "county": "Bihor" + }, + { + "id": 2248, + "name": "Cherechiu", + "county": "Bihor" + }, + { + "id": 2249, + "name": "Chesereu", + "county": "Bihor" + }, + { + "id": 2250, + "name": "Targusor", + "county": "Bihor" + }, + { + "id": 2251, + "name": "Chislaz", + "county": "Bihor" + }, + { + "id": 2252, + "name": "Chiraleu", + "county": "Bihor" + }, + { + "id": 2253, + "name": "Haucesti", + "county": "Bihor" + }, + { + "id": 2254, + "name": "Misca", + "county": "Bihor" + }, + { + "id": 2255, + "name": "Poclusa de Barcau", + "county": "Bihor" + }, + { + "id": 2256, + "name": "Sarsig", + "county": "Bihor" + }, + { + "id": 2257, + "name": "Sanlazar", + "county": "Bihor" + }, + { + "id": 2258, + "name": "Ciuhoi", + "county": "Bihor" + }, + { + "id": 2259, + "name": "Cenalos", + "county": "Bihor" + }, + { + "id": 2260, + "name": "Saniob", + "county": "Bihor" + }, + { + "id": 2261, + "name": "Sfarnas", + "county": "Bihor" + }, + { + "id": 2262, + "name": "Ciumeghiu", + "county": "Bihor" + }, + { + "id": 2263, + "name": "Boiu", + "county": "Bihor" + }, + { + "id": 2264, + "name": "Ghiorac", + "county": "Bihor" + }, + { + "id": 2265, + "name": "Campani", + "county": "Bihor" + }, + { + "id": 2266, + "name": "Fanate", + "county": "Bihor" + }, + { + "id": 2267, + "name": "Harsesti", + "county": "Bihor" + }, + { + "id": 2268, + "name": "Sighistel", + "county": "Bihor" + }, + { + "id": 2269, + "name": "Valea de Sus", + "county": "Bihor" + }, + { + "id": 2270, + "name": "Cociuba Mare", + "county": "Bihor" + }, + { + "id": 2271, + "name": "Carasau", + "county": "Bihor" + }, + { + "id": 2272, + "name": "Chesa", + "county": "Bihor" + }, + { + "id": 2273, + "name": "Petid", + "county": "Bihor" + }, + { + "id": 2274, + "name": "Copacel", + "county": "Bihor" + }, + { + "id": 2275, + "name": "Bucuroaia", + "county": "Bihor" + }, + { + "id": 2276, + "name": "Chijic", + "county": "Bihor" + }, + { + "id": 2277, + "name": "Poiana Tasad", + "county": "Bihor" + }, + { + "id": 2278, + "name": "Sarand", + "county": "Bihor" + }, + { + "id": 2279, + "name": "Surduc", + "county": "Bihor" + }, + { + "id": 2280, + "name": "Cristioru de Jos", + "county": "Bihor" + }, + { + "id": 2281, + "name": "Balc", + "county": "Bihor" + }, + { + "id": 2282, + "name": "Cristioru de Sus", + "county": "Bihor" + }, + { + "id": 2283, + "name": "Poiana", + "county": "Bihor" + }, + { + "id": 2284, + "name": "Saliste de Vascau", + "county": "Bihor" + }, + { + "id": 2285, + "name": "Curatele", + "county": "Bihor" + }, + { + "id": 2286, + "name": "Beiusele", + "county": "Bihor" + }, + { + "id": 2287, + "name": "Cresuia", + "county": "Bihor" + }, + { + "id": 2288, + "name": "Nimaiesti", + "county": "Bihor" + }, + { + "id": 2289, + "name": "Pocioveliste", + "county": "Bihor" + }, + { + "id": 2290, + "name": "Curtuiseni", + "county": "Bihor" + }, + { + "id": 2291, + "name": "Vasad", + "county": "Bihor" + }, + { + "id": 2292, + "name": "Derna", + "county": "Bihor" + }, + { + "id": 2293, + "name": "Dernisoara", + "county": "Bihor" + }, + { + "id": 2294, + "name": "Sacalasau", + "county": "Bihor" + }, + { + "id": 2295, + "name": "Sacalasau Nou", + "county": "Bihor" + }, + { + "id": 2296, + "name": "Tria", + "county": "Bihor" + }, + { + "id": 2297, + "name": "Diosig", + "county": "Bihor" + }, + { + "id": 2298, + "name": "Ianca", + "county": "Bihor" + }, + { + "id": 2299, + "name": "Mihai Bravu", + "county": "Bihor" + }, + { + "id": 2300, + "name": "Rosiori", + "county": "Bihor" + }, + { + "id": 2301, + "name": "Vaida", + "county": "Bihor" + }, + { + "id": 2302, + "name": "Dobresti", + "county": "Bihor" + }, + { + "id": 2303, + "name": "Cornisesti", + "county": "Bihor" + }, + { + "id": 2304, + "name": "Crancesti", + "county": "Bihor" + }, + { + "id": 2305, + "name": "Hidisel", + "county": "Bihor" + }, + { + "id": 2306, + "name": "Luncasprie", + "county": "Bihor" + }, + { + "id": 2307, + "name": "Racas", + "county": "Bihor" + }, + { + "id": 2308, + "name": "Topa de Jos", + "county": "Bihor" + }, + { + "id": 2309, + "name": "Topa de Sus", + "county": "Bihor" + }, + { + "id": 2310, + "name": "Draganesti", + "county": "Bihor" + }, + { + "id": 2311, + "name": "Belejeni", + "county": "Bihor" + }, + { + "id": 2312, + "name": "Gradinari", + "county": "Bihor" + }, + { + "id": 2313, + "name": "Livada Beiusului", + "county": "Bihor" + }, + { + "id": 2314, + "name": "Mizies", + "county": "Bihor" + }, + { + "id": 2315, + "name": "Pantasesti", + "county": "Bihor" + }, + { + "id": 2316, + "name": "Sebis", + "county": "Bihor" + }, + { + "id": 2317, + "name": "Talpe", + "county": "Bihor" + }, + { + "id": 2318, + "name": "Tiganestii de Beius", + "county": "Bihor" + }, + { + "id": 2319, + "name": "Dragesti", + "county": "Bihor" + }, + { + "id": 2320, + "name": "Dicanesti", + "county": "Bihor" + }, + { + "id": 2321, + "name": "Stracos", + "county": "Bihor" + }, + { + "id": 2322, + "name": "Tasad", + "county": "Bihor" + }, + { + "id": 2323, + "name": "Topesti", + "county": "Bihor" + }, + { + "id": 2324, + "name": "Finis", + "county": "Bihor" + }, + { + "id": 2325, + "name": "Brusturi", + "county": "Bihor" + }, + { + "id": 2326, + "name": "Fizis", + "county": "Bihor" + }, + { + "id": 2327, + "name": "Ioanis", + "county": "Bihor" + }, + { + "id": 2328, + "name": "Suncuis", + "county": "Bihor" + }, + { + "id": 2329, + "name": "Girisu de Cris", + "county": "Bihor" + }, + { + "id": 2330, + "name": "Cheresig", + "county": "Bihor" + }, + { + "id": 2331, + "name": "Tarian", + "county": "Bihor" + }, + { + "id": 2332, + "name": "Toboliu", + "county": "Bihor" + }, + { + "id": 2333, + "name": "Hidiselu de Sus", + "county": "Bihor" + }, + { + "id": 2334, + "name": "Hidiselu de Jos", + "county": "Bihor" + }, + { + "id": 2335, + "name": "Mierlau", + "county": "Bihor" + }, + { + "id": 2336, + "name": "Santelec", + "county": "Bihor" + }, + { + "id": 2337, + "name": "Sumugiu", + "county": "Bihor" + }, + { + "id": 2338, + "name": "Holod", + "county": "Bihor" + }, + { + "id": 2339, + "name": "Dumbrava", + "county": "Bihor" + }, + { + "id": 2340, + "name": "Dumbravita", + "county": "Bihor" + }, + { + "id": 2341, + "name": "Forosig", + "county": "Bihor" + }, + { + "id": 2342, + "name": "Hodis", + "county": "Bihor" + }, + { + "id": 2343, + "name": "Lupoaia", + "county": "Bihor" + }, + { + "id": 2344, + "name": "Valea Mare de Codru", + "county": "Bihor" + }, + { + "id": 2345, + "name": "Vintere", + "county": "Bihor" + }, + { + "id": 2346, + "name": "Husasau de Tinca", + "county": "Bihor" + }, + { + "id": 2347, + "name": "Fonau", + "county": "Bihor" + }, + { + "id": 2348, + "name": "Miersig", + "county": "Bihor" + }, + { + "id": 2349, + "name": "Osand", + "county": "Bihor" + }, + { + "id": 2350, + "name": "Sititelec", + "county": "Bihor" + }, + { + "id": 2351, + "name": "Ineu", + "county": "Bihor" + }, + { + "id": 2352, + "name": "Botean", + "county": "Bihor" + }, + { + "id": 2353, + "name": "Husasau de Cris", + "county": "Bihor" + }, + { + "id": 2354, + "name": "Lazuri de Beius", + "county": "Bihor" + }, + { + "id": 2355, + "name": "Baleni", + "county": "Bihor" + }, + { + "id": 2356, + "name": "Cusuius", + "county": "Bihor" + }, + { + "id": 2357, + "name": "Hinchiris", + "county": "Bihor" + }, + { + "id": 2358, + "name": "Lazareni", + "county": "Bihor" + }, + { + "id": 2359, + "name": "Bicacel", + "county": "Bihor" + }, + { + "id": 2360, + "name": "Calea Mare", + "county": "Bihor" + }, + { + "id": 2361, + "name": "Carandeni", + "county": "Bihor" + }, + { + "id": 2362, + "name": "Caranzel", + "county": "Bihor" + }, + { + "id": 2363, + "name": "Gepis", + "county": "Bihor" + }, + { + "id": 2364, + "name": "Gruilung", + "county": "Bihor" + }, + { + "id": 2365, + "name": "Miheleu", + "county": "Bihor" + }, + { + "id": 2366, + "name": "Lugasu de Jos", + "county": "Bihor" + }, + { + "id": 2367, + "name": "Lugasu de Sus", + "county": "Bihor" + }, + { + "id": 2368, + "name": "Urvind", + "county": "Bihor" + }, + { + "id": 2369, + "name": "Lunca", + "county": "Bihor" + }, + { + "id": 2370, + "name": "Briheni", + "county": "Bihor" + }, + { + "id": 2371, + "name": "Hotarel", + "county": "Bihor" + }, + { + "id": 2372, + "name": "Seghiste", + "county": "Bihor" + }, + { + "id": 2373, + "name": "Sarbesti", + "county": "Bihor" + }, + { + "id": 2374, + "name": "Sustiu", + "county": "Bihor" + }, + { + "id": 2375, + "name": "Madaras", + "county": "Bihor" + }, + { + "id": 2376, + "name": "Homorog", + "county": "Bihor" + }, + { + "id": 2377, + "name": "Ianosda", + "county": "Bihor" + }, + { + "id": 2378, + "name": "Martihaz", + "county": "Bihor" + }, + { + "id": 2379, + "name": "Magesti", + "county": "Bihor" + }, + { + "id": 2380, + "name": "Butani", + "county": "Bihor" + }, + { + "id": 2381, + "name": "Cacuciu Nou", + "county": "Bihor" + }, + { + "id": 2382, + "name": "Dobricionesti", + "county": "Bihor" + }, + { + "id": 2383, + "name": "Galaseni", + "county": "Bihor" + }, + { + "id": 2384, + "name": "Josani", + "county": "Bihor" + }, + { + "id": 2385, + "name": "Ortiteag", + "county": "Bihor" + }, + { + "id": 2386, + "name": "Nojorid", + "county": "Bihor" + }, + { + "id": 2387, + "name": "Apateu", + "county": "Bihor" + }, + { + "id": 2388, + "name": "Chisirid", + "county": "Bihor" + }, + { + "id": 2389, + "name": "Les", + "county": "Bihor" + }, + { + "id": 2390, + "name": "Livada de Bihor", + "county": "Bihor" + }, + { + "id": 2391, + "name": "Pausa", + "county": "Bihor" + }, + { + "id": 2392, + "name": "Sauaieu", + "county": "Bihor" + }, + { + "id": 2393, + "name": "Olcea", + "county": "Bihor" + }, + { + "id": 2394, + "name": "Calacea", + "county": "Bihor" + }, + { + "id": 2395, + "name": "Hodisel", + "county": "Bihor" + }, + { + "id": 2396, + "name": "Ucuris", + "county": "Bihor" + }, + { + "id": 2397, + "name": "Osorhei", + "county": "Bihor" + }, + { + "id": 2398, + "name": "Alparea", + "county": "Bihor" + }, + { + "id": 2399, + "name": "Cheriu", + "county": "Bihor" + }, + { + "id": 2400, + "name": "Felcheriu", + "county": "Bihor" + }, + { + "id": 2401, + "name": "Fughiu", + "county": "Bihor" + }, + { + "id": 2402, + "name": "Pietroasa", + "county": "Bihor" + }, + { + "id": 2403, + "name": "Chiscau", + "county": "Bihor" + }, + { + "id": 2404, + "name": "Cociuba Mica", + "county": "Bihor" + }, + { + "id": 2405, + "name": "Giulesti", + "county": "Bihor" + }, + { + "id": 2406, + "name": "Gurani", + "county": "Bihor" + }, + { + "id": 2407, + "name": "Magura", + "county": "Bihor" + }, + { + "id": 2408, + "name": "Motesti", + "county": "Bihor" + }, + { + "id": 2409, + "name": "Pocola", + "county": "Bihor" + }, + { + "id": 2410, + "name": "Feneris", + "county": "Bihor" + }, + { + "id": 2411, + "name": "Petrani", + "county": "Bihor" + }, + { + "id": 2412, + "name": "Poietari", + "county": "Bihor" + }, + { + "id": 2413, + "name": "Sanmartin de Beius", + "county": "Bihor" + }, + { + "id": 2414, + "name": "Pomezeu", + "county": "Bihor" + }, + { + "id": 2415, + "name": "Campani de Pomezeu", + "county": "Bihor" + }, + { + "id": 2416, + "name": "Cosdeni", + "county": "Bihor" + }, + { + "id": 2417, + "name": "Hidis", + "county": "Bihor" + }, + { + "id": 2418, + "name": "Lacu Sarat", + "county": "Bihor" + }, + { + "id": 2419, + "name": "Sitani", + "county": "Bihor" + }, + { + "id": 2420, + "name": "Spinus de Pomezeu", + "county": "Bihor" + }, + { + "id": 2421, + "name": "Valani de Pomezeu", + "county": "Bihor" + }, + { + "id": 2422, + "name": "Popesti", + "county": "Bihor" + }, + { + "id": 2423, + "name": "Bistra", + "county": "Bihor" + }, + { + "id": 2424, + "name": "Budoi", + "county": "Bihor" + }, + { + "id": 2425, + "name": "Cuzap", + "county": "Bihor" + }, + { + "id": 2426, + "name": "Varviz", + "county": "Bihor" + }, + { + "id": 2427, + "name": "Varzari", + "county": "Bihor" + }, + { + "id": 2428, + "name": "Voivozi", + "county": "Bihor" + }, + { + "id": 2429, + "name": "Rabagani", + "county": "Bihor" + }, + { + "id": 2430, + "name": "Albesti", + "county": "Bihor" + }, + { + "id": 2431, + "name": "Bratesti", + "county": "Bihor" + }, + { + "id": 2432, + "name": "Saucani", + "county": "Bihor" + }, + { + "id": 2433, + "name": "Saliste de Pomezeu", + "county": "Bihor" + }, + { + "id": 2434, + "name": "Varaseni", + "county": "Bihor" + }, + { + "id": 2435, + "name": "Remetea", + "county": "Bihor" + }, + { + "id": 2436, + "name": "Dragoteni", + "county": "Bihor" + }, + { + "id": 2437, + "name": "Meziad", + "county": "Bihor" + }, + { + "id": 2438, + "name": "Petreasa", + "county": "Bihor" + }, + { + "id": 2439, + "name": "Soimus", + "county": "Bihor" + }, + { + "id": 2440, + "name": "Rieni", + "county": "Bihor" + }, + { + "id": 2441, + "name": "Cucuceni", + "county": "Bihor" + }, + { + "id": 2442, + "name": "Ghighiseni", + "county": "Bihor" + }, + { + "id": 2443, + "name": "Petrileni", + "county": "Bihor" + }, + { + "id": 2444, + "name": "Sudrigiu", + "county": "Bihor" + }, + { + "id": 2445, + "name": "Valea de Jos", + "county": "Bihor" + }, + { + "id": 2446, + "name": "Rosia", + "county": "Bihor" + }, + { + "id": 2447, + "name": "Lazuri", + "county": "Bihor" + }, + { + "id": 2448, + "name": "Sacadat", + "county": "Bihor" + }, + { + "id": 2449, + "name": "Borsa", + "county": "Bihor" + }, + { + "id": 2450, + "name": "Sabolciu", + "county": "Bihor" + }, + { + "id": 2451, + "name": "Sacueni", + "county": "Bihor" + }, + { + "id": 2452, + "name": "Cadea", + "county": "Bihor" + }, + { + "id": 2453, + "name": "Ciocaia", + "county": "Bihor" + }, + { + "id": 2454, + "name": "Cubulcut", + "county": "Bihor" + }, + { + "id": 2455, + "name": "Olosig", + "county": "Bihor" + }, + { + "id": 2456, + "name": "Sannicolau de Munte", + "county": "Bihor" + }, + { + "id": 2457, + "name": "Salacea", + "county": "Bihor" + }, + { + "id": 2458, + "name": "Otomani", + "county": "Bihor" + }, + { + "id": 2459, + "name": "Salard", + "county": "Bihor" + }, + { + "id": 2460, + "name": "Hodos", + "county": "Bihor" + }, + { + "id": 2461, + "name": "Santimreu", + "county": "Bihor" + }, + { + "id": 2462, + "name": "Sambata", + "county": "Bihor" + }, + { + "id": 2463, + "name": "Copaceni", + "county": "Bihor" + }, + { + "id": 2464, + "name": "Ogesti", + "county": "Bihor" + }, + { + "id": 2465, + "name": "Rogoz", + "county": "Bihor" + }, + { + "id": 2466, + "name": "Rotaresti", + "county": "Bihor" + }, + { + "id": 2467, + "name": "Zavoiu", + "county": "Bihor" + }, + { + "id": 2468, + "name": "Sarbi", + "county": "Bihor" + }, + { + "id": 2469, + "name": "Almasu Mic", + "county": "Bihor" + }, + { + "id": 2470, + "name": "Burzuc", + "county": "Bihor" + }, + { + "id": 2471, + "name": "Chioag", + "county": "Bihor" + }, + { + "id": 2472, + "name": "Fegernic", + "county": "Bihor" + }, + { + "id": 2473, + "name": "Fegernicu Nou", + "county": "Bihor" + }, + { + "id": 2474, + "name": "Sarcau", + "county": "Bihor" + }, + { + "id": 2475, + "name": "Spinus", + "county": "Bihor" + }, + { + "id": 2476, + "name": "Ciulesti", + "county": "Bihor" + }, + { + "id": 2477, + "name": "Gurbesti", + "county": "Bihor" + }, + { + "id": 2478, + "name": "Nadar", + "county": "Bihor" + }, + { + "id": 2479, + "name": "Saliste", + "county": "Bihor" + }, + { + "id": 2480, + "name": "Suplacu de Barcau", + "county": "Bihor" + }, + { + "id": 2481, + "name": "Borumlaca", + "county": "Bihor" + }, + { + "id": 2482, + "name": "Dolea", + "county": "Bihor" + }, + { + "id": 2483, + "name": "Foglas", + "county": "Bihor" + }, + { + "id": 2484, + "name": "Valea Cerului", + "county": "Bihor" + }, + { + "id": 2485, + "name": "Valcelele", + "county": "Bihor" + }, + { + "id": 2486, + "name": "Simian", + "county": "Bihor" + }, + { + "id": 2487, + "name": "Silindru", + "county": "Bihor" + }, + { + "id": 2488, + "name": "Voivozi", + "county": "Bihor" + }, + { + "id": 2489, + "name": "Sinteu", + "county": "Bihor" + }, + { + "id": 2490, + "name": "Huta Voivozi", + "county": "Bihor" + }, + { + "id": 2491, + "name": "Socet", + "county": "Bihor" + }, + { + "id": 2492, + "name": "Valea Tarnei", + "county": "Bihor" + }, + { + "id": 2493, + "name": "Soimi", + "county": "Bihor" + }, + { + "id": 2494, + "name": "Borz", + "county": "Bihor" + }, + { + "id": 2495, + "name": "Codru", + "county": "Bihor" + }, + { + "id": 2496, + "name": "Dumbravita de Codru", + "county": "Bihor" + }, + { + "id": 2497, + "name": "Poclusa de Beius", + "county": "Bihor" + }, + { + "id": 2498, + "name": "Sannicolau de Beius", + "county": "Bihor" + }, + { + "id": 2499, + "name": "Ursad", + "county": "Bihor" + }, + { + "id": 2500, + "name": "Urvis de Beius", + "county": "Bihor" + }, + { + "id": 2501, + "name": "Suncuius", + "county": "Bihor" + }, + { + "id": 2502, + "name": "Balnaca", + "county": "Bihor" + }, + { + "id": 2503, + "name": "Balnaca-Grosi", + "county": "Bihor" + }, + { + "id": 2504, + "name": "Zece Hotare", + "county": "Bihor" + }, + { + "id": 2505, + "name": "Tarcea", + "county": "Bihor" + }, + { + "id": 2506, + "name": "Adoni", + "county": "Bihor" + }, + { + "id": 2507, + "name": "Galospetreu", + "county": "Bihor" + }, + { + "id": 2508, + "name": "Tarcaia", + "county": "Bihor" + }, + { + "id": 2509, + "name": "Mierag", + "county": "Bihor" + }, + { + "id": 2510, + "name": "Tarcaita", + "county": "Bihor" + }, + { + "id": 2511, + "name": "Totoreni", + "county": "Bihor" + }, + { + "id": 2512, + "name": "Tauteu", + "county": "Bihor" + }, + { + "id": 2513, + "name": "Bogei", + "county": "Bihor" + }, + { + "id": 2514, + "name": "Chiribis", + "county": "Bihor" + }, + { + "id": 2515, + "name": "Ciutelec", + "county": "Bihor" + }, + { + "id": 2516, + "name": "Poiana", + "county": "Bihor" + }, + { + "id": 2517, + "name": "Tileagd", + "county": "Bihor" + }, + { + "id": 2518, + "name": "Balaia", + "county": "Bihor" + }, + { + "id": 2519, + "name": "Calatani", + "county": "Bihor" + }, + { + "id": 2520, + "name": "Posoloaca", + "county": "Bihor" + }, + { + "id": 2521, + "name": "Tilecus", + "county": "Bihor" + }, + { + "id": 2522, + "name": "Uileacu de Cris", + "county": "Bihor" + }, + { + "id": 2523, + "name": "Tinca", + "county": "Bihor" + }, + { + "id": 2524, + "name": "Belfir", + "county": "Bihor" + }, + { + "id": 2525, + "name": "Girisu Negru", + "county": "Bihor" + }, + { + "id": 2526, + "name": "Gurbediu", + "county": "Bihor" + }, + { + "id": 2527, + "name": "Rapa", + "county": "Bihor" + }, + { + "id": 2528, + "name": "Tulca", + "county": "Bihor" + }, + { + "id": 2529, + "name": "Cauasd", + "county": "Bihor" + }, + { + "id": 2530, + "name": "Tetchea", + "county": "Bihor" + }, + { + "id": 2531, + "name": "Hotar", + "county": "Bihor" + }, + { + "id": 2532, + "name": "Subpiatra", + "county": "Bihor" + }, + { + "id": 2533, + "name": "Telechiu", + "county": "Bihor" + }, + { + "id": 2534, + "name": "Uileacu de Beius", + "county": "Bihor" + }, + { + "id": 2535, + "name": "Forau", + "county": "Bihor" + }, + { + "id": 2536, + "name": "Prisaca", + "county": "Bihor" + }, + { + "id": 2537, + "name": "Valanii de Beius", + "county": "Bihor" + }, + { + "id": 2538, + "name": "Vadu Crisului", + "county": "Bihor" + }, + { + "id": 2539, + "name": "Birtin", + "county": "Bihor" + }, + { + "id": 2540, + "name": "Tomnatic", + "county": "Bihor" + }, + { + "id": 2541, + "name": "Topa de Cris", + "county": "Bihor" + }, + { + "id": 2542, + "name": "Valea lui Mihai", + "county": "Bihor" + }, + { + "id": 2543, + "name": "Viisoara", + "county": "Bihor" + }, + { + "id": 2544, + "name": "Izvoarele", + "county": "Bihor" + }, + { + "id": 2545, + "name": "Padureni", + "county": "Bihor" + }, + { + "id": 2546, + "name": "Reghea", + "county": "Bihor" + }, + { + "id": 2547, + "name": "Varciorog", + "county": "Bihor" + }, + { + "id": 2548, + "name": "Fasca", + "county": "Bihor" + }, + { + "id": 2549, + "name": "Surducel", + "county": "Bihor" + }, + { + "id": 2550, + "name": "Serghis", + "county": "Bihor" + }, + { + "id": 2551, + "name": "Baile Felix", + "county": "Bihor" + }, + { + "id": 2552, + "name": "Pacalesti", + "county": "Bihor" + }, + { + "id": 2553, + "name": "Bistrita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2554, + "name": "Ghinda", + "county": "Bistrita-Nasaud" + }, + { + "id": 2555, + "name": "Sarata", + "county": "Bistrita-Nasaud" + }, + { + "id": 2556, + "name": "Sigmir", + "county": "Bistrita-Nasaud" + }, + { + "id": 2557, + "name": "Slatinita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2558, + "name": "Unirea", + "county": "Bistrita-Nasaud" + }, + { + "id": 2559, + "name": "Viisoara", + "county": "Bistrita-Nasaud" + }, + { + "id": 2560, + "name": "Beclean", + "county": "Bistrita-Nasaud" + }, + { + "id": 2561, + "name": "Coldau", + "county": "Bistrita-Nasaud" + }, + { + "id": 2562, + "name": "Figa", + "county": "Bistrita-Nasaud" + }, + { + "id": 2563, + "name": "Rusu de Jos", + "county": "Bistrita-Nasaud" + }, + { + "id": 2564, + "name": "Nasaud", + "county": "Bistrita-Nasaud" + }, + { + "id": 2565, + "name": "Liviu Rebreanu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2566, + "name": "Lusca", + "county": "Bistrita-Nasaud" + }, + { + "id": 2567, + "name": "Sangeorz-Bai", + "county": "Bistrita-Nasaud" + }, + { + "id": 2568, + "name": "Cormaia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2569, + "name": "Valea Borcutului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2570, + "name": "Bistrita Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2571, + "name": "Colibita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2572, + "name": "Branistea", + "county": "Bistrita-Nasaud" + }, + { + "id": 2573, + "name": "Ciresoaia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2574, + "name": "Malut", + "county": "Bistrita-Nasaud" + }, + { + "id": 2575, + "name": "Budacu de Jos", + "county": "Bistrita-Nasaud" + }, + { + "id": 2576, + "name": "Budus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2577, + "name": "Jelna", + "county": "Bistrita-Nasaud" + }, + { + "id": 2578, + "name": "Monariu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2579, + "name": "Simionesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2580, + "name": "Budesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2581, + "name": "Budesti-Fanate", + "county": "Bistrita-Nasaud" + }, + { + "id": 2582, + "name": "Tagu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2583, + "name": "Tagsoru", + "county": "Bistrita-Nasaud" + }, + { + "id": 2584, + "name": "Caianu Mic", + "county": "Bistrita-Nasaud" + }, + { + "id": 2585, + "name": "Caianu Mare", + "county": "Bistrita-Nasaud" + }, + { + "id": 2586, + "name": "Ciceu-Poieni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2587, + "name": "Dobric", + "county": "Bistrita-Nasaud" + }, + { + "id": 2588, + "name": "Dobricel", + "county": "Bistrita-Nasaud" + }, + { + "id": 2589, + "name": "Dumbravita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2590, + "name": "Satu Nou", + "county": "Bistrita-Nasaud" + }, + { + "id": 2591, + "name": "Budacu de Sus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2592, + "name": "Dumitrita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2593, + "name": "Orheiu Bistritei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2594, + "name": "Petris", + "county": "Bistrita-Nasaud" + }, + { + "id": 2595, + "name": "Ragla", + "county": "Bistrita-Nasaud" + }, + { + "id": 2596, + "name": "Ciceu-Giurgesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2597, + "name": "Breaza", + "county": "Bistrita-Nasaud" + }, + { + "id": 2598, + "name": "Dumbraveni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2599, + "name": "Negrilesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2600, + "name": "Purcarete", + "county": "Bistrita-Nasaud" + }, + { + "id": 2601, + "name": "Chiochis", + "county": "Bistrita-Nasaud" + }, + { + "id": 2602, + "name": "Apatiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2603, + "name": "Bozies", + "county": "Bistrita-Nasaud" + }, + { + "id": 2604, + "name": "Buza Catun", + "county": "Bistrita-Nasaud" + }, + { + "id": 2605, + "name": "Chetiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2606, + "name": "Jimbor", + "county": "Bistrita-Nasaud" + }, + { + "id": 2607, + "name": "Manic", + "county": "Bistrita-Nasaud" + }, + { + "id": 2608, + "name": "Sannicoara", + "county": "Bistrita-Nasaud" + }, + { + "id": 2609, + "name": "Strugureni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2610, + "name": "Tentea", + "county": "Bistrita-Nasaud" + }, + { + "id": 2611, + "name": "Chiuza", + "county": "Bistrita-Nasaud" + }, + { + "id": 2612, + "name": "Mires", + "county": "Bistrita-Nasaud" + }, + { + "id": 2613, + "name": "Piatra", + "county": "Bistrita-Nasaud" + }, + { + "id": 2614, + "name": "Sasarm", + "county": "Bistrita-Nasaud" + }, + { + "id": 2615, + "name": "Cosbuc", + "county": "Bistrita-Nasaud" + }, + { + "id": 2616, + "name": "Bichigiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2617, + "name": "Dumitra", + "county": "Bistrita-Nasaud" + }, + { + "id": 2618, + "name": "Cepari", + "county": "Bistrita-Nasaud" + }, + { + "id": 2619, + "name": "Tarpiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2620, + "name": "Feldru", + "county": "Bistrita-Nasaud" + }, + { + "id": 2621, + "name": "Nepos", + "county": "Bistrita-Nasaud" + }, + { + "id": 2622, + "name": "Galatii Bistritei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2623, + "name": "Albestii Bistritei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2624, + "name": "Dipsa", + "county": "Bistrita-Nasaud" + }, + { + "id": 2625, + "name": "Herina", + "county": "Bistrita-Nasaud" + }, + { + "id": 2626, + "name": "Tonciu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2627, + "name": "Ilva Mare", + "county": "Bistrita-Nasaud" + }, + { + "id": 2628, + "name": "Ivaneasa", + "county": "Bistrita-Nasaud" + }, + { + "id": 2629, + "name": "Ilva Mica", + "county": "Bistrita-Nasaud" + }, + { + "id": 2630, + "name": "Josenii Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2631, + "name": "Mijlocenii Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2632, + "name": "Rusu Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2633, + "name": "Stramba", + "county": "Bistrita-Nasaud" + }, + { + "id": 2634, + "name": "Lechinta", + "county": "Bistrita-Nasaud" + }, + { + "id": 2635, + "name": "Bungard", + "county": "Bistrita-Nasaud" + }, + { + "id": 2636, + "name": "Chirales", + "county": "Bistrita-Nasaud" + }, + { + "id": 2637, + "name": "Sangeorzu Nou", + "county": "Bistrita-Nasaud" + }, + { + "id": 2638, + "name": "Saniacob", + "county": "Bistrita-Nasaud" + }, + { + "id": 2639, + "name": "Tigau", + "county": "Bistrita-Nasaud" + }, + { + "id": 2640, + "name": "Vermes", + "county": "Bistrita-Nasaud" + }, + { + "id": 2641, + "name": "Lesu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2642, + "name": "Lunca Lesului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2643, + "name": "Livezile", + "county": "Bistrita-Nasaud" + }, + { + "id": 2644, + "name": "Cusma", + "county": "Bistrita-Nasaud" + }, + { + "id": 2645, + "name": "Dorolea", + "county": "Bistrita-Nasaud" + }, + { + "id": 2646, + "name": "Dumbrava", + "county": "Bistrita-Nasaud" + }, + { + "id": 2647, + "name": "Valea Poenii", + "county": "Bistrita-Nasaud" + }, + { + "id": 2648, + "name": "Lunca Ilvei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2649, + "name": "Maieru", + "county": "Bistrita-Nasaud" + }, + { + "id": 2650, + "name": "Anies", + "county": "Bistrita-Nasaud" + }, + { + "id": 2651, + "name": "Matei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2652, + "name": "Bidiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2653, + "name": "Corvinesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2654, + "name": "Enciu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2655, + "name": "Fantanele", + "county": "Bistrita-Nasaud" + }, + { + "id": 2656, + "name": "Morut", + "county": "Bistrita-Nasaud" + }, + { + "id": 2657, + "name": "Magura Ilvei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2658, + "name": "Arsita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2659, + "name": "Poiana Ilvei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2660, + "name": "Mariselu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2661, + "name": "Barla", + "county": "Bistrita-Nasaud" + }, + { + "id": 2662, + "name": "Domnesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2663, + "name": "Jeica", + "county": "Bistrita-Nasaud" + }, + { + "id": 2664, + "name": "Magurele", + "county": "Bistrita-Nasaud" + }, + { + "id": 2665, + "name": "Neteni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2666, + "name": "Santioana", + "county": "Bistrita-Nasaud" + }, + { + "id": 2667, + "name": "Micestii de Campie", + "county": "Bistrita-Nasaud" + }, + { + "id": 2668, + "name": "Fantanita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2669, + "name": "Visuia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2670, + "name": "Milas", + "county": "Bistrita-Nasaud" + }, + { + "id": 2671, + "name": "Comlod", + "county": "Bistrita-Nasaud" + }, + { + "id": 2672, + "name": "Dupa Deal", + "county": "Bistrita-Nasaud" + }, + { + "id": 2673, + "name": "Ghemes", + "county": "Bistrita-Nasaud" + }, + { + "id": 2674, + "name": "Hirean", + "county": "Bistrita-Nasaud" + }, + { + "id": 2675, + "name": "Orosfaia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2676, + "name": "Monor", + "county": "Bistrita-Nasaud" + }, + { + "id": 2677, + "name": "Gledin", + "county": "Bistrita-Nasaud" + }, + { + "id": 2678, + "name": "Nimigea de Jos", + "county": "Bistrita-Nasaud" + }, + { + "id": 2679, + "name": "Floresti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2680, + "name": "Mintiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2681, + "name": "Mititei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2682, + "name": "Mocod", + "county": "Bistrita-Nasaud" + }, + { + "id": 2683, + "name": "Mogoseni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2684, + "name": "Nimigea de Sus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2685, + "name": "Taure", + "county": "Bistrita-Nasaud" + }, + { + "id": 2686, + "name": "Nuseni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2687, + "name": "Beudiu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2688, + "name": "Dumbrava", + "county": "Bistrita-Nasaud" + }, + { + "id": 2689, + "name": "Feleac", + "county": "Bistrita-Nasaud" + }, + { + "id": 2690, + "name": "Malin", + "county": "Bistrita-Nasaud" + }, + { + "id": 2691, + "name": "Rusu de Sus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2692, + "name": "Vita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2693, + "name": "Parva", + "county": "Bistrita-Nasaud" + }, + { + "id": 2694, + "name": "Reteag", + "county": "Bistrita-Nasaud" + }, + { + "id": 2695, + "name": "Bata", + "county": "Bistrita-Nasaud" + }, + { + "id": 2696, + "name": "Ciceu-Corabia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2697, + "name": "Ciceu-Mihaiesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2698, + "name": "Lelesti", + "county": "Bistrita-Nasaud" + }, + { + "id": 2699, + "name": "Prundu Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2700, + "name": "Susenii Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2701, + "name": "Rebra", + "county": "Bistrita-Nasaud" + }, + { + "id": 2702, + "name": "Rebrisoara", + "county": "Bistrita-Nasaud" + }, + { + "id": 2703, + "name": "Gersa I", + "county": "Bistrita-Nasaud" + }, + { + "id": 2704, + "name": "Gersa Ii", + "county": "Bistrita-Nasaud" + }, + { + "id": 2705, + "name": "Poderei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2706, + "name": "Rodna", + "county": "Bistrita-Nasaud" + }, + { + "id": 2707, + "name": "Valea Vinului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2708, + "name": "Romuli", + "county": "Bistrita-Nasaud" + }, + { + "id": 2709, + "name": "Dealu Stefanitei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2710, + "name": "Salva", + "county": "Bistrita-Nasaud" + }, + { + "id": 2711, + "name": "Runcu Salvei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2712, + "name": "Silivasu de Campie", + "county": "Bistrita-Nasaud" + }, + { + "id": 2713, + "name": "Draga", + "county": "Bistrita-Nasaud" + }, + { + "id": 2714, + "name": "Fanatele Silivasului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2715, + "name": "Porumbenii", + "county": "Bistrita-Nasaud" + }, + { + "id": 2716, + "name": "Sanmihaiu de Campie", + "county": "Bistrita-Nasaud" + }, + { + "id": 2717, + "name": "Brateni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2718, + "name": "La Curte", + "county": "Bistrita-Nasaud" + }, + { + "id": 2719, + "name": "Salcuta", + "county": "Bistrita-Nasaud" + }, + { + "id": 2720, + "name": "Stupini", + "county": "Bistrita-Nasaud" + }, + { + "id": 2721, + "name": "Zoreni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2722, + "name": "Spermezeu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2723, + "name": "Halmasau", + "county": "Bistrita-Nasaud" + }, + { + "id": 2724, + "name": "Lunca Borlesei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2725, + "name": "Paltineasa", + "county": "Bistrita-Nasaud" + }, + { + "id": 2726, + "name": "Sita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2727, + "name": "Sesuri Spermezeu-Vale", + "county": "Bistrita-Nasaud" + }, + { + "id": 2728, + "name": "Sant", + "county": "Bistrita-Nasaud" + }, + { + "id": 2729, + "name": "Valea Mare", + "county": "Bistrita-Nasaud" + }, + { + "id": 2730, + "name": "Sieu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2731, + "name": "Ardan", + "county": "Bistrita-Nasaud" + }, + { + "id": 2732, + "name": "Posmus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2733, + "name": "Soimus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2734, + "name": "Sieu-Magherus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2735, + "name": "Arcalia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2736, + "name": "Chintelnic", + "county": "Bistrita-Nasaud" + }, + { + "id": 2737, + "name": "Crainimat", + "county": "Bistrita-Nasaud" + }, + { + "id": 2738, + "name": "Podirei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2739, + "name": "Saratel", + "county": "Bistrita-Nasaud" + }, + { + "id": 2740, + "name": "Valea Magherusului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2741, + "name": "Sieu-Odorhei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2742, + "name": "Agrisu de Jos", + "county": "Bistrita-Nasaud" + }, + { + "id": 2743, + "name": "Agrisu de Sus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2744, + "name": "Bretea", + "county": "Bistrita-Nasaud" + }, + { + "id": 2745, + "name": "Coasta", + "county": "Bistrita-Nasaud" + }, + { + "id": 2746, + "name": "Cristur-Sieu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2747, + "name": "Sirioara", + "county": "Bistrita-Nasaud" + }, + { + "id": 2748, + "name": "Sieut", + "county": "Bistrita-Nasaud" + }, + { + "id": 2749, + "name": "Lunca", + "county": "Bistrita-Nasaud" + }, + { + "id": 2750, + "name": "Rustior", + "county": "Bistrita-Nasaud" + }, + { + "id": 2751, + "name": "Sebis", + "county": "Bistrita-Nasaud" + }, + { + "id": 2752, + "name": "Sintereag", + "county": "Bistrita-Nasaud" + }, + { + "id": 2753, + "name": "Blajenii de Jos", + "county": "Bistrita-Nasaud" + }, + { + "id": 2754, + "name": "Blajenii de Sus", + "county": "Bistrita-Nasaud" + }, + { + "id": 2755, + "name": "Caila", + "county": "Bistrita-Nasaud" + }, + { + "id": 2756, + "name": "Cociu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2757, + "name": "Sieu-Sfantu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2758, + "name": "Sintereag-Gara", + "county": "Bistrita-Nasaud" + }, + { + "id": 2759, + "name": "Teaca", + "county": "Bistrita-Nasaud" + }, + { + "id": 2760, + "name": "Archiud", + "county": "Bistrita-Nasaud" + }, + { + "id": 2761, + "name": "Budurleni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2762, + "name": "Ocnita", + "county": "Bistrita-Nasaud" + }, + { + "id": 2763, + "name": "Pinticu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2764, + "name": "Viile Tecii", + "county": "Bistrita-Nasaud" + }, + { + "id": 2765, + "name": "Telciu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2766, + "name": "Fiad", + "county": "Bistrita-Nasaud" + }, + { + "id": 2767, + "name": "Telcisor", + "county": "Bistrita-Nasaud" + }, + { + "id": 2768, + "name": "Tiha Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2769, + "name": "Ciosa", + "county": "Bistrita-Nasaud" + }, + { + "id": 2770, + "name": "Muresenii Bargaului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2771, + "name": "Piatra Fantanele", + "county": "Bistrita-Nasaud" + }, + { + "id": 2772, + "name": "Tureac", + "county": "Bistrita-Nasaud" + }, + { + "id": 2773, + "name": "Tarlisua", + "county": "Bistrita-Nasaud" + }, + { + "id": 2774, + "name": "Agries", + "county": "Bistrita-Nasaud" + }, + { + "id": 2775, + "name": "Agriesel", + "county": "Bistrita-Nasaud" + }, + { + "id": 2776, + "name": "Borleasa", + "county": "Bistrita-Nasaud" + }, + { + "id": 2777, + "name": "Cireasi", + "county": "Bistrita-Nasaud" + }, + { + "id": 2778, + "name": "Lunca Sateasca", + "county": "Bistrita-Nasaud" + }, + { + "id": 2779, + "name": "Moliset", + "county": "Bistrita-Nasaud" + }, + { + "id": 2780, + "name": "Oarzina", + "county": "Bistrita-Nasaud" + }, + { + "id": 2781, + "name": "Racatesu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2782, + "name": "Sendroaia", + "county": "Bistrita-Nasaud" + }, + { + "id": 2783, + "name": "Uriu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2784, + "name": "Cristestii Ciceului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2785, + "name": "Hasmasu Ciceului", + "county": "Bistrita-Nasaud" + }, + { + "id": 2786, + "name": "Ilisua", + "county": "Bistrita-Nasaud" + }, + { + "id": 2787, + "name": "Urmenis", + "county": "Bistrita-Nasaud" + }, + { + "id": 2788, + "name": "Camp", + "county": "Bistrita-Nasaud" + }, + { + "id": 2789, + "name": "Coseriu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2790, + "name": "Delureni", + "county": "Bistrita-Nasaud" + }, + { + "id": 2791, + "name": "Fanate", + "county": "Bistrita-Nasaud" + }, + { + "id": 2792, + "name": "Podenii", + "county": "Bistrita-Nasaud" + }, + { + "id": 2793, + "name": "Scoabe", + "county": "Bistrita-Nasaud" + }, + { + "id": 2794, + "name": "Sopteriu", + "county": "Bistrita-Nasaud" + }, + { + "id": 2795, + "name": "Valea", + "county": "Bistrita-Nasaud" + }, + { + "id": 2796, + "name": "Valea Mare", + "county": "Bistrita-Nasaud" + }, + { + "id": 2797, + "name": "Zagra", + "county": "Bistrita-Nasaud" + }, + { + "id": 2798, + "name": "Alunisul", + "county": "Bistrita-Nasaud" + }, + { + "id": 2799, + "name": "Perisor", + "county": "Bistrita-Nasaud" + }, + { + "id": 2800, + "name": "Poienile Zagrei", + "county": "Bistrita-Nasaud" + }, + { + "id": 2801, + "name": "Suplai", + "county": "Bistrita-Nasaud" + }, + { + "id": 2802, + "name": "Botosani", + "county": "Botosani" + }, + { + "id": 2803, + "name": "Curtesti", + "county": "Botosani" + }, + { + "id": 2804, + "name": "Agafton", + "county": "Botosani" + }, + { + "id": 2805, + "name": "Baiceni", + "county": "Botosani" + }, + { + "id": 2806, + "name": "Hudum", + "county": "Botosani" + }, + { + "id": 2807, + "name": "Manastirea Doamnei", + "county": "Botosani" + }, + { + "id": 2808, + "name": "Oraseni-Deal", + "county": "Botosani" + }, + { + "id": 2809, + "name": "Oraseni-Vale", + "county": "Botosani" + }, + { + "id": 2810, + "name": "Rachiti", + "county": "Botosani" + }, + { + "id": 2811, + "name": "Cismea", + "county": "Botosani" + }, + { + "id": 2812, + "name": "Costesti", + "county": "Botosani" + }, + { + "id": 2813, + "name": "Rosiori", + "county": "Botosani" + }, + { + "id": 2814, + "name": "Stauceni", + "county": "Botosani" + }, + { + "id": 2815, + "name": "Silistea", + "county": "Botosani" + }, + { + "id": 2816, + "name": "Tocileni", + "county": "Botosani" + }, + { + "id": 2817, + "name": "Victoria", + "county": "Botosani" + }, + { + "id": 2818, + "name": "Darabani", + "county": "Botosani" + }, + { + "id": 2819, + "name": "Bajura", + "county": "Botosani" + }, + { + "id": 2820, + "name": "Esanca", + "county": "Botosani" + }, + { + "id": 2821, + "name": "Lismanita", + "county": "Botosani" + }, + { + "id": 2822, + "name": "Dorohoi", + "county": "Botosani" + }, + { + "id": 2823, + "name": "Dealu Mare", + "county": "Botosani" + }, + { + "id": 2824, + "name": "Loturi Enescu", + "county": "Botosani" + }, + { + "id": 2825, + "name": "Progresul", + "county": "Botosani" + }, + { + "id": 2826, + "name": "Saveni", + "county": "Botosani" + }, + { + "id": 2827, + "name": "Bodeasa", + "county": "Botosani" + }, + { + "id": 2828, + "name": "Bozieni", + "county": "Botosani" + }, + { + "id": 2829, + "name": "Chiscareni", + "county": "Botosani" + }, + { + "id": 2830, + "name": "Petricani", + "county": "Botosani" + }, + { + "id": 2831, + "name": "Sat Nou", + "county": "Botosani" + }, + { + "id": 2832, + "name": "Albesti", + "county": "Botosani" + }, + { + "id": 2833, + "name": "Buimaceni", + "county": "Botosani" + }, + { + "id": 2834, + "name": "Costiugeni", + "county": "Botosani" + }, + { + "id": 2835, + "name": "Jijia", + "county": "Botosani" + }, + { + "id": 2836, + "name": "Mascateni", + "county": "Botosani" + }, + { + "id": 2837, + "name": "Tudor Vladimirescu", + "county": "Botosani" + }, + { + "id": 2838, + "name": "Avrameni", + "county": "Botosani" + }, + { + "id": 2839, + "name": "Adaseni", + "county": "Botosani" + }, + { + "id": 2840, + "name": "Aurel Vlaicu", + "county": "Botosani" + }, + { + "id": 2841, + "name": "Dimitrie Cantemir", + "county": "Botosani" + }, + { + "id": 2842, + "name": "Ichimeni", + "county": "Botosani" + }, + { + "id": 2843, + "name": "Panaitoaia", + "county": "Botosani" + }, + { + "id": 2844, + "name": "Timus", + "county": "Botosani" + }, + { + "id": 2845, + "name": "Tudor Vladimirescu", + "county": "Botosani" + }, + { + "id": 2846, + "name": "Zoitani", + "county": "Botosani" + }, + { + "id": 2847, + "name": "Baluseni", + "county": "Botosani" + }, + { + "id": 2848, + "name": "Balusenii Noi", + "county": "Botosani" + }, + { + "id": 2849, + "name": "Buzeni", + "county": "Botosani" + }, + { + "id": 2850, + "name": "Cosuleni", + "county": "Botosani" + }, + { + "id": 2851, + "name": "Draxini", + "county": "Botosani" + }, + { + "id": 2852, + "name": "Zaicesti", + "county": "Botosani" + }, + { + "id": 2853, + "name": "Braesti", + "county": "Botosani" + }, + { + "id": 2854, + "name": "Poiana", + "county": "Botosani" + }, + { + "id": 2855, + "name": "Popeni", + "county": "Botosani" + }, + { + "id": 2856, + "name": "Valcelele", + "county": "Botosani" + }, + { + "id": 2857, + "name": "Broscauti", + "county": "Botosani" + }, + { + "id": 2858, + "name": "Slobozia", + "county": "Botosani" + }, + { + "id": 2859, + "name": "Bucecea", + "county": "Botosani" + }, + { + "id": 2860, + "name": "Bohoghina", + "county": "Botosani" + }, + { + "id": 2861, + "name": "Calinesti", + "county": "Botosani" + }, + { + "id": 2862, + "name": "Calarasi", + "county": "Botosani" + }, + { + "id": 2863, + "name": "Libertatea", + "county": "Botosani" + }, + { + "id": 2864, + "name": "Plesani", + "county": "Botosani" + }, + { + "id": 2865, + "name": "Concesti", + "county": "Botosani" + }, + { + "id": 2866, + "name": "Movileni", + "county": "Botosani" + }, + { + "id": 2867, + "name": "Copalau", + "county": "Botosani" + }, + { + "id": 2868, + "name": "Buda", + "county": "Botosani" + }, + { + "id": 2869, + "name": "Cerbu", + "county": "Botosani" + }, + { + "id": 2870, + "name": "Cosula", + "county": "Botosani" + }, + { + "id": 2871, + "name": "Cotu", + "county": "Botosani" + }, + { + "id": 2872, + "name": "Padureni", + "county": "Botosani" + }, + { + "id": 2873, + "name": "Supitca", + "county": "Botosani" + }, + { + "id": 2874, + "name": "Cordareni", + "county": "Botosani" + }, + { + "id": 2875, + "name": "Grivita", + "county": "Botosani" + }, + { + "id": 2876, + "name": "Corlateni", + "county": "Botosani" + }, + { + "id": 2877, + "name": "Carasa", + "county": "Botosani" + }, + { + "id": 2878, + "name": "Dimacheni", + "county": "Botosani" + }, + { + "id": 2879, + "name": "Mateieni", + "county": "Botosani" + }, + { + "id": 2880, + "name": "Podeni", + "county": "Botosani" + }, + { + "id": 2881, + "name": "Recia-Verbia", + "county": "Botosani" + }, + { + "id": 2882, + "name": "Vladeni", + "county": "Botosani" + }, + { + "id": 2883, + "name": "Corni", + "county": "Botosani" + }, + { + "id": 2884, + "name": "Balta Arsa", + "county": "Botosani" + }, + { + "id": 2885, + "name": "Mesteacan", + "county": "Botosani" + }, + { + "id": 2886, + "name": "Sarafinesti", + "county": "Botosani" + }, + { + "id": 2887, + "name": "Cotusca", + "county": "Botosani" + }, + { + "id": 2888, + "name": "Avram Iancu", + "county": "Botosani" + }, + { + "id": 2889, + "name": "Cotu Miculinti", + "county": "Botosani" + }, + { + "id": 2890, + "name": "Crasnaleuca", + "county": "Botosani" + }, + { + "id": 2891, + "name": "Ghireni", + "county": "Botosani" + }, + { + "id": 2892, + "name": "Mihail Kogalniceanu", + "county": "Botosani" + }, + { + "id": 2893, + "name": "Nichiteni", + "county": "Botosani" + }, + { + "id": 2894, + "name": "Nicolae Balcescu", + "county": "Botosani" + }, + { + "id": 2895, + "name": "Putureni", + "county": "Botosani" + }, + { + "id": 2896, + "name": "Cristesti", + "county": "Botosani" + }, + { + "id": 2897, + "name": "Oneaga", + "county": "Botosani" + }, + { + "id": 2898, + "name": "Schit-Oraseni", + "county": "Botosani" + }, + { + "id": 2899, + "name": "Unguroaia", + "county": "Botosani" + }, + { + "id": 2900, + "name": "Cristinesti", + "county": "Botosani" + }, + { + "id": 2901, + "name": "Baranca", + "county": "Botosani" + }, + { + "id": 2902, + "name": "Dragalina", + "county": "Botosani" + }, + { + "id": 2903, + "name": "Fundu Hertii", + "county": "Botosani" + }, + { + "id": 2904, + "name": "Poiana", + "county": "Botosani" + }, + { + "id": 2905, + "name": "Dersca", + "county": "Botosani" + }, + { + "id": 2906, + "name": "Lozna", + "county": "Botosani" + }, + { + "id": 2907, + "name": "Strateni", + "county": "Botosani" + }, + { + "id": 2908, + "name": "Dangeni", + "county": "Botosani" + }, + { + "id": 2909, + "name": "Hulub", + "county": "Botosani" + }, + { + "id": 2910, + "name": "Iacobeni", + "county": "Botosani" + }, + { + "id": 2911, + "name": "Strahotin", + "county": "Botosani" + }, + { + "id": 2912, + "name": "Dobarceni", + "county": "Botosani" + }, + { + "id": 2913, + "name": "Bivolari", + "county": "Botosani" + }, + { + "id": 2914, + "name": "Cismanesti", + "county": "Botosani" + }, + { + "id": 2915, + "name": "Livada", + "county": "Botosani" + }, + { + "id": 2916, + "name": "Murguta", + "county": "Botosani" + }, + { + "id": 2917, + "name": "Brateni", + "county": "Botosani" + }, + { + "id": 2918, + "name": "Draguseni", + "county": "Botosani" + }, + { + "id": 2919, + "name": "Podriga", + "county": "Botosani" + }, + { + "id": 2920, + "name": "Sarata-Draguseni", + "county": "Botosani" + }, + { + "id": 2921, + "name": "Durnesti", + "county": "Botosani" + }, + { + "id": 2922, + "name": "Babiceni", + "county": "Botosani" + }, + { + "id": 2923, + "name": "Barsanesti", + "county": "Botosani" + }, + { + "id": 2924, + "name": "Brosteni", + "county": "Botosani" + }, + { + "id": 2925, + "name": "Cucuteni", + "county": "Botosani" + }, + { + "id": 2926, + "name": "Guranda", + "county": "Botosani" + }, + { + "id": 2927, + "name": "Flamanzi", + "county": "Botosani" + }, + { + "id": 2928, + "name": "Poiana", + "county": "Botosani" + }, + { + "id": 2929, + "name": "Frumusica", + "county": "Botosani" + }, + { + "id": 2930, + "name": "Boscoteni", + "county": "Botosani" + }, + { + "id": 2931, + "name": "Radeni", + "county": "Botosani" + }, + { + "id": 2932, + "name": "Storesti", + "county": "Botosani" + }, + { + "id": 2933, + "name": "Sendreni", + "county": "Botosani" + }, + { + "id": 2934, + "name": "Vladeni-Deal", + "county": "Botosani" + }, + { + "id": 2935, + "name": "Dumeni", + "county": "Botosani" + }, + { + "id": 2936, + "name": "Arborea", + "county": "Botosani" + }, + { + "id": 2937, + "name": "George Enescu", + "county": "Botosani" + }, + { + "id": 2938, + "name": "Popeni", + "county": "Botosani" + }, + { + "id": 2939, + "name": "Stanca", + "county": "Botosani" + }, + { + "id": 2940, + "name": "Gorbanesti", + "county": "Botosani" + }, + { + "id": 2941, + "name": "Batranesti", + "county": "Botosani" + }, + { + "id": 2942, + "name": "George Cosbuc", + "county": "Botosani" + }, + { + "id": 2943, + "name": "Mihai Eminescu", + "county": "Botosani" + }, + { + "id": 2944, + "name": "Siliscani", + "county": "Botosani" + }, + { + "id": 2945, + "name": "Socrujeni", + "county": "Botosani" + }, + { + "id": 2946, + "name": "Viforeni", + "county": "Botosani" + }, + { + "id": 2947, + "name": "Vanatori", + "county": "Botosani" + }, + { + "id": 2948, + "name": "Havarna", + "county": "Botosani" + }, + { + "id": 2949, + "name": "Balinti", + "county": "Botosani" + }, + { + "id": 2950, + "name": "Galbeni", + "county": "Botosani" + }, + { + "id": 2951, + "name": "Garbeni", + "county": "Botosani" + }, + { + "id": 2952, + "name": "Niculcea", + "county": "Botosani" + }, + { + "id": 2953, + "name": "Tataraseni", + "county": "Botosani" + }, + { + "id": 2954, + "name": "Hanesti", + "county": "Botosani" + }, + { + "id": 2955, + "name": "Borolea", + "county": "Botosani" + }, + { + "id": 2956, + "name": "Moara Jorii", + "county": "Botosani" + }, + { + "id": 2957, + "name": "Sarata-Basarab", + "county": "Botosani" + }, + { + "id": 2958, + "name": "Slobozia Hanesti", + "county": "Botosani" + }, + { + "id": 2959, + "name": "Hiliseu-Horia", + "county": "Botosani" + }, + { + "id": 2960, + "name": "Corjauti", + "county": "Botosani" + }, + { + "id": 2961, + "name": "Hiliseu-Closca", + "county": "Botosani" + }, + { + "id": 2962, + "name": "Hiliseu-Crisan", + "county": "Botosani" + }, + { + "id": 2963, + "name": "Iezer", + "county": "Botosani" + }, + { + "id": 2964, + "name": "Hlipiceni", + "county": "Botosani" + }, + { + "id": 2965, + "name": "Dragalina", + "county": "Botosani" + }, + { + "id": 2966, + "name": "Victoria", + "county": "Botosani" + }, + { + "id": 2967, + "name": "Hudesti", + "county": "Botosani" + }, + { + "id": 2968, + "name": "Alba", + "county": "Botosani" + }, + { + "id": 2969, + "name": "Baranca", + "county": "Botosani" + }, + { + "id": 2970, + "name": "Mlenauti", + "county": "Botosani" + }, + { + "id": 2971, + "name": "Ibanesti", + "county": "Botosani" + }, + { + "id": 2972, + "name": "Dumbravita", + "county": "Botosani" + }, + { + "id": 2973, + "name": "Leorda", + "county": "Botosani" + }, + { + "id": 2974, + "name": "Belcea", + "county": "Botosani" + }, + { + "id": 2975, + "name": "Costinesti", + "county": "Botosani" + }, + { + "id": 2976, + "name": "Dolina", + "county": "Botosani" + }, + { + "id": 2977, + "name": "Mitoc", + "county": "Botosani" + }, + { + "id": 2978, + "name": "Lunca", + "county": "Botosani" + }, + { + "id": 2979, + "name": "Stroiesti", + "county": "Botosani" + }, + { + "id": 2980, + "name": "Zlatunoaia", + "county": "Botosani" + }, + { + "id": 2981, + "name": "Manoleasa", + "county": "Botosani" + }, + { + "id": 2982, + "name": "Bold", + "county": "Botosani" + }, + { + "id": 2983, + "name": "Flondora", + "county": "Botosani" + }, + { + "id": 2984, + "name": "Iorga", + "county": "Botosani" + }, + { + "id": 2985, + "name": "Liveni", + "county": "Botosani" + }, + { + "id": 2986, + "name": "Loturi", + "county": "Botosani" + }, + { + "id": 2987, + "name": "Manoleasa-Prut", + "county": "Botosani" + }, + { + "id": 2988, + "name": "Sadoveni", + "county": "Botosani" + }, + { + "id": 2989, + "name": "Serpenita", + "county": "Botosani" + }, + { + "id": 2990, + "name": "Zahoreni", + "county": "Botosani" + }, + { + "id": 2991, + "name": "Ipotesti", + "county": "Botosani" + }, + { + "id": 2992, + "name": "Baisa", + "county": "Botosani" + }, + { + "id": 2993, + "name": "Catamaresti", + "county": "Botosani" + }, + { + "id": 2994, + "name": "Catamaresti-Deal", + "county": "Botosani" + }, + { + "id": 2995, + "name": "Cervicesti", + "county": "Botosani" + }, + { + "id": 2996, + "name": "Cervicesti-Deal", + "county": "Botosani" + }, + { + "id": 2997, + "name": "Cucorani", + "county": "Botosani" + }, + { + "id": 2998, + "name": "Manolesti", + "county": "Botosani" + }, + { + "id": 2999, + "name": "Stancesti", + "county": "Botosani" + }, + { + "id": 3000, + "name": "Mihaileni", + "county": "Botosani" + }, + { + "id": 3001, + "name": "Calinesti", + "county": "Botosani" + }, + { + "id": 3002, + "name": "Candesti", + "county": "Botosani" + }, + { + "id": 3003, + "name": "Parau Negru", + "county": "Botosani" + }, + { + "id": 3004, + "name": "Rogojesti", + "county": "Botosani" + }, + { + "id": 3005, + "name": "Talpa", + "county": "Botosani" + }, + { + "id": 3006, + "name": "Vitcani", + "county": "Botosani" + }, + { + "id": 3007, + "name": "Mihalaseni", + "county": "Botosani" + }, + { + "id": 3008, + "name": "Caraiman", + "county": "Botosani" + }, + { + "id": 3009, + "name": "Nastase", + "county": "Botosani" + }, + { + "id": 3010, + "name": "Negresti", + "county": "Botosani" + }, + { + "id": 3011, + "name": "Paun", + "county": "Botosani" + }, + { + "id": 3012, + "name": "Sarata", + "county": "Botosani" + }, + { + "id": 3013, + "name": "Slobozia Siliscani", + "county": "Botosani" + }, + { + "id": 3014, + "name": "Mileanca", + "county": "Botosani" + }, + { + "id": 3015, + "name": "Codreni", + "county": "Botosani" + }, + { + "id": 3016, + "name": "Scutari", + "county": "Botosani" + }, + { + "id": 3017, + "name": "Selistea", + "county": "Botosani" + }, + { + "id": 3018, + "name": "Mitoc", + "county": "Botosani" + }, + { + "id": 3019, + "name": "Horia", + "county": "Botosani" + }, + { + "id": 3020, + "name": "Nicolae Balcescu", + "county": "Botosani" + }, + { + "id": 3021, + "name": "Chitoveni", + "county": "Botosani" + }, + { + "id": 3022, + "name": "Prisacani", + "county": "Botosani" + }, + { + "id": 3023, + "name": "Nicseni", + "county": "Botosani" + }, + { + "id": 3024, + "name": "Dacia", + "county": "Botosani" + }, + { + "id": 3025, + "name": "Dorobanti", + "county": "Botosani" + }, + { + "id": 3026, + "name": "Paltinis", + "county": "Botosani" + }, + { + "id": 3027, + "name": "Cuzlau", + "county": "Botosani" + }, + { + "id": 3028, + "name": "Horodistea", + "county": "Botosani" + }, + { + "id": 3029, + "name": "Slobozia", + "county": "Botosani" + }, + { + "id": 3030, + "name": "Pomarla", + "county": "Botosani" + }, + { + "id": 3031, + "name": "Hulubesti", + "county": "Botosani" + }, + { + "id": 3032, + "name": "Racovat", + "county": "Botosani" + }, + { + "id": 3033, + "name": "Prajeni", + "county": "Botosani" + }, + { + "id": 3034, + "name": "Campeni", + "county": "Botosani" + }, + { + "id": 3035, + "name": "Luparia", + "county": "Botosani" + }, + { + "id": 3036, + "name": "Miletin", + "county": "Botosani" + }, + { + "id": 3037, + "name": "Radauti-Prut", + "county": "Botosani" + }, + { + "id": 3038, + "name": "Miorcani", + "county": "Botosani" + }, + { + "id": 3039, + "name": "Rediu", + "county": "Botosani" + }, + { + "id": 3040, + "name": "Rauseni", + "county": "Botosani" + }, + { + "id": 3041, + "name": "Doina", + "county": "Botosani" + }, + { + "id": 3042, + "name": "Pogorasti", + "county": "Botosani" + }, + { + "id": 3043, + "name": "Rediu", + "county": "Botosani" + }, + { + "id": 3044, + "name": "Stolniceni", + "county": "Botosani" + }, + { + "id": 3045, + "name": "Ripiceni", + "county": "Botosani" + }, + { + "id": 3046, + "name": "Cinghiniia", + "county": "Botosani" + }, + { + "id": 3047, + "name": "Lehnesti", + "county": "Botosani" + }, + { + "id": 3048, + "name": "Movila Rupta", + "county": "Botosani" + }, + { + "id": 3049, + "name": "Popoaia", + "county": "Botosani" + }, + { + "id": 3050, + "name": "Ripicenii Vechi", + "county": "Botosani" + }, + { + "id": 3051, + "name": "Rasca", + "county": "Botosani" + }, + { + "id": 3052, + "name": "Roma", + "county": "Botosani" + }, + { + "id": 3053, + "name": "Cotargaci", + "county": "Botosani" + }, + { + "id": 3054, + "name": "Romanesti", + "county": "Botosani" + }, + { + "id": 3055, + "name": "Damideni", + "county": "Botosani" + }, + { + "id": 3056, + "name": "Romanesti-Vale", + "county": "Botosani" + }, + { + "id": 3057, + "name": "Sarata", + "county": "Botosani" + }, + { + "id": 3058, + "name": "Santa Mare", + "county": "Botosani" + }, + { + "id": 3059, + "name": "Badarai", + "county": "Botosani" + }, + { + "id": 3060, + "name": "Berza", + "county": "Botosani" + }, + { + "id": 3061, + "name": "Bogdanesti", + "county": "Botosani" + }, + { + "id": 3062, + "name": "Durnesti", + "county": "Botosani" + }, + { + "id": 3063, + "name": "Iliseni", + "county": "Botosani" + }, + { + "id": 3064, + "name": "Ranghilesti", + "county": "Botosani" + }, + { + "id": 3065, + "name": "Ranghilesti-Deal", + "county": "Botosani" + }, + { + "id": 3066, + "name": "Suharau", + "county": "Botosani" + }, + { + "id": 3067, + "name": "Izvoare", + "county": "Botosani" + }, + { + "id": 3068, + "name": "Lisna", + "county": "Botosani" + }, + { + "id": 3069, + "name": "Oroftiana", + "county": "Botosani" + }, + { + "id": 3070, + "name": "Plevna", + "county": "Botosani" + }, + { + "id": 3071, + "name": "Smardan", + "county": "Botosani" + }, + { + "id": 3072, + "name": "Sulita", + "county": "Botosani" + }, + { + "id": 3073, + "name": "Blandesti", + "county": "Botosani" + }, + { + "id": 3074, + "name": "Cerchejeni", + "county": "Botosani" + }, + { + "id": 3075, + "name": "Chelis", + "county": "Botosani" + }, + { + "id": 3076, + "name": "Dracsani", + "county": "Botosani" + }, + { + "id": 3077, + "name": "Soldanesti", + "county": "Botosani" + }, + { + "id": 3078, + "name": "Sendriceni", + "county": "Botosani" + }, + { + "id": 3079, + "name": "Horlaceni", + "county": "Botosani" + }, + { + "id": 3080, + "name": "Padureni", + "county": "Botosani" + }, + { + "id": 3081, + "name": "Stefanesti", + "county": "Botosani" + }, + { + "id": 3082, + "name": "Badiuti", + "county": "Botosani" + }, + { + "id": 3083, + "name": "Bobulesti", + "county": "Botosani" + }, + { + "id": 3084, + "name": "Stanca", + "county": "Botosani" + }, + { + "id": 3085, + "name": "Stefanesti-Sat", + "county": "Botosani" + }, + { + "id": 3086, + "name": "Stiubieni", + "county": "Botosani" + }, + { + "id": 3087, + "name": "Ibaneasa", + "county": "Botosani" + }, + { + "id": 3088, + "name": "Negreni", + "county": "Botosani" + }, + { + "id": 3089, + "name": "Todireni", + "county": "Botosani" + }, + { + "id": 3090, + "name": "Cernesti", + "county": "Botosani" + }, + { + "id": 3091, + "name": "Floresti", + "county": "Botosani" + }, + { + "id": 3092, + "name": "Garbesti", + "county": "Botosani" + }, + { + "id": 3093, + "name": "Iuresti", + "county": "Botosani" + }, + { + "id": 3094, + "name": "Trusesti", + "county": "Botosani" + }, + { + "id": 3095, + "name": "Buhaceni", + "county": "Botosani" + }, + { + "id": 3096, + "name": "Ciritei", + "county": "Botosani" + }, + { + "id": 3097, + "name": "Drislea", + "county": "Botosani" + }, + { + "id": 3098, + "name": "Ionaseni", + "county": "Botosani" + }, + { + "id": 3099, + "name": "Pasateni", + "county": "Botosani" + }, + { + "id": 3100, + "name": "Tudora", + "county": "Botosani" + }, + { + "id": 3101, + "name": "Ungureni", + "county": "Botosani" + }, + { + "id": 3102, + "name": "Borzesti", + "county": "Botosani" + }, + { + "id": 3103, + "name": "Calugareni", + "county": "Botosani" + }, + { + "id": 3104, + "name": "Calugarenii Noi", + "county": "Botosani" + }, + { + "id": 3105, + "name": "Durnesti", + "county": "Botosani" + }, + { + "id": 3106, + "name": "Mihai Viteazu", + "county": "Botosani" + }, + { + "id": 3107, + "name": "Mandresti", + "county": "Botosani" + }, + { + "id": 3108, + "name": "Plopenii Mari", + "county": "Botosani" + }, + { + "id": 3109, + "name": "Plopenii Mici", + "county": "Botosani" + }, + { + "id": 3110, + "name": "Tautesti", + "county": "Botosani" + }, + { + "id": 3111, + "name": "Vicoleni", + "county": "Botosani" + }, + { + "id": 3112, + "name": "Unteni", + "county": "Botosani" + }, + { + "id": 3113, + "name": "Burla", + "county": "Botosani" + }, + { + "id": 3114, + "name": "Burlesti", + "county": "Botosani" + }, + { + "id": 3115, + "name": "Manastireni", + "county": "Botosani" + }, + { + "id": 3116, + "name": "Soroceni", + "county": "Botosani" + }, + { + "id": 3117, + "name": "Valea Grajdului", + "county": "Botosani" + }, + { + "id": 3118, + "name": "Vultureni", + "county": "Botosani" + }, + { + "id": 3119, + "name": "Vaculesti", + "county": "Botosani" + }, + { + "id": 3120, + "name": "Gorovei", + "county": "Botosani" + }, + { + "id": 3121, + "name": "Saucenita", + "county": "Botosani" + }, + { + "id": 3122, + "name": "Viisoara", + "county": "Botosani" + }, + { + "id": 3123, + "name": "Cuza Voda", + "county": "Botosani" + }, + { + "id": 3124, + "name": "Viisoara Mica", + "county": "Botosani" + }, + { + "id": 3125, + "name": "Varfu Campului", + "county": "Botosani" + }, + { + "id": 3126, + "name": "Ionaseni", + "county": "Botosani" + }, + { + "id": 3127, + "name": "Lunca", + "county": "Botosani" + }, + { + "id": 3128, + "name": "Vladeni", + "county": "Botosani" + }, + { + "id": 3129, + "name": "Brehuiesti", + "county": "Botosani" + }, + { + "id": 3130, + "name": "Hriscani", + "county": "Botosani" + }, + { + "id": 3131, + "name": "Hutani", + "county": "Botosani" + }, + { + "id": 3132, + "name": "Mandresti", + "county": "Botosani" + }, + { + "id": 3133, + "name": "Vlasinesti", + "county": "Botosani" + }, + { + "id": 3134, + "name": "Miron Costin", + "county": "Botosani" + }, + { + "id": 3135, + "name": "Sarbi", + "county": "Botosani" + }, + { + "id": 3136, + "name": "Vorniceni", + "county": "Botosani" + }, + { + "id": 3137, + "name": "Davidoaia", + "county": "Botosani" + }, + { + "id": 3138, + "name": "Dealu Crucii", + "county": "Botosani" + }, + { + "id": 3139, + "name": "Vorona", + "county": "Botosani" + }, + { + "id": 3140, + "name": "Icuseni", + "county": "Botosani" + }, + { + "id": 3141, + "name": "Joldesti", + "county": "Botosani" + }, + { + "id": 3142, + "name": "Poiana", + "county": "Botosani" + }, + { + "id": 3143, + "name": "Vorona Mare", + "county": "Botosani" + }, + { + "id": 3144, + "name": "Vorona-Teodoru", + "county": "Botosani" + }, + { + "id": 3145, + "name": "Damileni", + "county": "Botosani" + }, + { + "id": 3146, + "name": "Slobozia", + "county": "Botosani" + }, + { + "id": 3147, + "name": "Baseu", + "county": "Botosani" + }, + { + "id": 3148, + "name": "Vatra", + "county": "Botosani" + }, + { + "id": 3149, + "name": "Dobrinauti-Hapai", + "county": "Botosani" + }, + { + "id": 3150, + "name": "Maghera", + "county": "Botosani" + }, + { + "id": 3151, + "name": "Pustoaia", + "county": "Botosani" + }, + { + "id": 3152, + "name": "Brasov", + "county": "Brasov" + }, + { + "id": 3153, + "name": "Ghimbav", + "county": "Brasov" + }, + { + "id": 3154, + "name": "Codlea", + "county": "Brasov" + }, + { + "id": 3155, + "name": "Fagaras", + "county": "Brasov" + }, + { + "id": 3156, + "name": "Predeal", + "county": "Brasov" + }, + { + "id": 3157, + "name": "Paraul Rece", + "county": "Brasov" + }, + { + "id": 3158, + "name": "Timisu de Jos", + "county": "Brasov" + }, + { + "id": 3159, + "name": "Timisu de Sus", + "county": "Brasov" + }, + { + "id": 3160, + "name": "Rasnov", + "county": "Brasov" + }, + { + "id": 3161, + "name": "Rupea", + "county": "Brasov" + }, + { + "id": 3162, + "name": "Fiser", + "county": "Brasov" + }, + { + "id": 3163, + "name": "Sacele", + "county": "Brasov" + }, + { + "id": 3164, + "name": "Victoria", + "county": "Brasov" + }, + { + "id": 3165, + "name": "Zarnesti", + "county": "Brasov" + }, + { + "id": 3166, + "name": "Tohanu Nou", + "county": "Brasov" + }, + { + "id": 3167, + "name": "Apata", + "county": "Brasov" + }, + { + "id": 3168, + "name": "Beclean", + "county": "Brasov" + }, + { + "id": 3169, + "name": "Boholt", + "county": "Brasov" + }, + { + "id": 3170, + "name": "Calbor", + "county": "Brasov" + }, + { + "id": 3171, + "name": "Hurez", + "county": "Brasov" + }, + { + "id": 3172, + "name": "Luta", + "county": "Brasov" + }, + { + "id": 3173, + "name": "Bod", + "county": "Brasov" + }, + { + "id": 3174, + "name": "Colonia Bod", + "county": "Brasov" + }, + { + "id": 3175, + "name": "Bran", + "county": "Brasov" + }, + { + "id": 3176, + "name": "Predelut", + "county": "Brasov" + }, + { + "id": 3177, + "name": "Sohodol", + "county": "Brasov" + }, + { + "id": 3178, + "name": "Simon", + "county": "Brasov" + }, + { + "id": 3179, + "name": "Budila", + "county": "Brasov" + }, + { + "id": 3180, + "name": "Bunesti", + "county": "Brasov" + }, + { + "id": 3181, + "name": "Crit", + "county": "Brasov" + }, + { + "id": 3182, + "name": "Mesendorf", + "county": "Brasov" + }, + { + "id": 3183, + "name": "Roades", + "county": "Brasov" + }, + { + "id": 3184, + "name": "Viscri", + "county": "Brasov" + }, + { + "id": 3185, + "name": "Cata", + "county": "Brasov" + }, + { + "id": 3186, + "name": "Beia", + "county": "Brasov" + }, + { + "id": 3187, + "name": "Drauseni", + "county": "Brasov" + }, + { + "id": 3188, + "name": "Ionesti", + "county": "Brasov" + }, + { + "id": 3189, + "name": "Palos", + "county": "Brasov" + }, + { + "id": 3190, + "name": "Cincu", + "county": "Brasov" + }, + { + "id": 3191, + "name": "Toarcla", + "county": "Brasov" + }, + { + "id": 3192, + "name": "Comana de Jos", + "county": "Brasov" + }, + { + "id": 3193, + "name": "Comana de Sus", + "county": "Brasov" + }, + { + "id": 3194, + "name": "Crihalma", + "county": "Brasov" + }, + { + "id": 3195, + "name": "Ticusu Nou", + "county": "Brasov" + }, + { + "id": 3196, + "name": "Cristian", + "county": "Brasov" + }, + { + "id": 3197, + "name": "Dumbravita", + "county": "Brasov" + }, + { + "id": 3198, + "name": "Vladeni", + "county": "Brasov" + }, + { + "id": 3199, + "name": "Feldioara", + "county": "Brasov" + }, + { + "id": 3200, + "name": "Colonia Reconstructia", + "county": "Brasov" + }, + { + "id": 3201, + "name": "Rotbav", + "county": "Brasov" + }, + { + "id": 3202, + "name": "Fundata", + "county": "Brasov" + }, + { + "id": 3203, + "name": "Fundatica", + "county": "Brasov" + }, + { + "id": 3204, + "name": "Sirnea", + "county": "Brasov" + }, + { + "id": 3205, + "name": "Halchiu", + "county": "Brasov" + }, + { + "id": 3206, + "name": "Crizbav", + "county": "Brasov" + }, + { + "id": 3207, + "name": "Cutus", + "county": "Brasov" + }, + { + "id": 3208, + "name": "Satu Nou", + "county": "Brasov" + }, + { + "id": 3209, + "name": "Harman", + "county": "Brasov" + }, + { + "id": 3210, + "name": "Podu Oltului", + "county": "Brasov" + }, + { + "id": 3211, + "name": "Harseni", + "county": "Brasov" + }, + { + "id": 3212, + "name": "Copacel", + "county": "Brasov" + }, + { + "id": 3213, + "name": "Malinis", + "county": "Brasov" + }, + { + "id": 3214, + "name": "Margineni", + "county": "Brasov" + }, + { + "id": 3215, + "name": "Sebes", + "county": "Brasov" + }, + { + "id": 3216, + "name": "Hoghiz", + "county": "Brasov" + }, + { + "id": 3217, + "name": "Bogata Olteana", + "county": "Brasov" + }, + { + "id": 3218, + "name": "Cuciulata", + "county": "Brasov" + }, + { + "id": 3219, + "name": "Dopca", + "county": "Brasov" + }, + { + "id": 3220, + "name": "Fantana", + "county": "Brasov" + }, + { + "id": 3221, + "name": "Lupsa", + "county": "Brasov" + }, + { + "id": 3222, + "name": "Homorod", + "county": "Brasov" + }, + { + "id": 3223, + "name": "Jimbor", + "county": "Brasov" + }, + { + "id": 3224, + "name": "Mercheasa", + "county": "Brasov" + }, + { + "id": 3225, + "name": "Jibert", + "county": "Brasov" + }, + { + "id": 3226, + "name": "Dacia", + "county": "Brasov" + }, + { + "id": 3227, + "name": "Granari", + "county": "Brasov" + }, + { + "id": 3228, + "name": "Lovnic", + "county": "Brasov" + }, + { + "id": 3229, + "name": "Valeni", + "county": "Brasov" + }, + { + "id": 3230, + "name": "Lisa", + "county": "Brasov" + }, + { + "id": 3231, + "name": "Breaza", + "county": "Brasov" + }, + { + "id": 3232, + "name": "Pojorta", + "county": "Brasov" + }, + { + "id": 3233, + "name": "Maierus", + "county": "Brasov" + }, + { + "id": 3234, + "name": "Arini", + "county": "Brasov" + }, + { + "id": 3235, + "name": "Mandra", + "county": "Brasov" + }, + { + "id": 3236, + "name": "Ileni", + "county": "Brasov" + }, + { + "id": 3237, + "name": "Rausor", + "county": "Brasov" + }, + { + "id": 3238, + "name": "Sona", + "county": "Brasov" + }, + { + "id": 3239, + "name": "Toderita", + "county": "Brasov" + }, + { + "id": 3240, + "name": "Moieciu de Jos", + "county": "Brasov" + }, + { + "id": 3241, + "name": "Cheia", + "county": "Brasov" + }, + { + "id": 3242, + "name": "Drumul Carului", + "county": "Brasov" + }, + { + "id": 3243, + "name": "Magura", + "county": "Brasov" + }, + { + "id": 3244, + "name": "Moieciu de Sus", + "county": "Brasov" + }, + { + "id": 3245, + "name": "Pestera", + "county": "Brasov" + }, + { + "id": 3246, + "name": "Ormenis", + "county": "Brasov" + }, + { + "id": 3247, + "name": "Augustin", + "county": "Brasov" + }, + { + "id": 3248, + "name": "Parau", + "county": "Brasov" + }, + { + "id": 3249, + "name": "Grid", + "county": "Brasov" + }, + { + "id": 3250, + "name": "Venetia de Jos", + "county": "Brasov" + }, + { + "id": 3251, + "name": "Venetia de Sus", + "county": "Brasov" + }, + { + "id": 3252, + "name": "Poiana Marului", + "county": "Brasov" + }, + { + "id": 3253, + "name": "Paltin", + "county": "Brasov" + }, + { + "id": 3254, + "name": "Sinca Noua", + "county": "Brasov" + }, + { + "id": 3255, + "name": "Prejmer", + "county": "Brasov" + }, + { + "id": 3256, + "name": "Lunca Calnicului", + "county": "Brasov" + }, + { + "id": 3257, + "name": "Stupinii Prejmerului", + "county": "Brasov" + }, + { + "id": 3258, + "name": "Racos", + "county": "Brasov" + }, + { + "id": 3259, + "name": "Mateias", + "county": "Brasov" + }, + { + "id": 3260, + "name": "Recea", + "county": "Brasov" + }, + { + "id": 3261, + "name": "Berivoi", + "county": "Brasov" + }, + { + "id": 3262, + "name": "Dejani", + "county": "Brasov" + }, + { + "id": 3263, + "name": "Gura Vaii", + "county": "Brasov" + }, + { + "id": 3264, + "name": "Iasi", + "county": "Brasov" + }, + { + "id": 3265, + "name": "Sasciori", + "county": "Brasov" + }, + { + "id": 3266, + "name": "Savastreni", + "county": "Brasov" + }, + { + "id": 3267, + "name": "Sercaia", + "county": "Brasov" + }, + { + "id": 3268, + "name": "Halmeag", + "county": "Brasov" + }, + { + "id": 3269, + "name": "Vad", + "county": "Brasov" + }, + { + "id": 3270, + "name": "Sinca Veche", + "county": "Brasov" + }, + { + "id": 3271, + "name": "Bucium", + "county": "Brasov" + }, + { + "id": 3272, + "name": "Ohaba", + "county": "Brasov" + }, + { + "id": 3273, + "name": "Persani", + "county": "Brasov" + }, + { + "id": 3274, + "name": "Sercaita", + "county": "Brasov" + }, + { + "id": 3275, + "name": "Valcea", + "county": "Brasov" + }, + { + "id": 3276, + "name": "Sanpetru", + "county": "Brasov" + }, + { + "id": 3277, + "name": "Soars", + "county": "Brasov" + }, + { + "id": 3278, + "name": "Barcut", + "county": "Brasov" + }, + { + "id": 3279, + "name": "Felmer", + "county": "Brasov" + }, + { + "id": 3280, + "name": "Rodbav", + "county": "Brasov" + }, + { + "id": 3281, + "name": "Selistat", + "county": "Brasov" + }, + { + "id": 3282, + "name": "Tarlungeni", + "county": "Brasov" + }, + { + "id": 3283, + "name": "Carpinis", + "county": "Brasov" + }, + { + "id": 3284, + "name": "Purcareni", + "county": "Brasov" + }, + { + "id": 3285, + "name": "Zizin", + "county": "Brasov" + }, + { + "id": 3286, + "name": "Teliu", + "county": "Brasov" + }, + { + "id": 3287, + "name": "Ticusu Vechi", + "county": "Brasov" + }, + { + "id": 3288, + "name": "Cobor", + "county": "Brasov" + }, + { + "id": 3289, + "name": "Ucea de Jos", + "county": "Brasov" + }, + { + "id": 3290, + "name": "Corbi", + "county": "Brasov" + }, + { + "id": 3291, + "name": "Feldioara", + "county": "Brasov" + }, + { + "id": 3292, + "name": "Ucea de Sus", + "county": "Brasov" + }, + { + "id": 3293, + "name": "Ungra", + "county": "Brasov" + }, + { + "id": 3294, + "name": "Daisoara", + "county": "Brasov" + }, + { + "id": 3295, + "name": "Vama Buzaului", + "county": "Brasov" + }, + { + "id": 3296, + "name": "Acris", + "county": "Brasov" + }, + { + "id": 3297, + "name": "Buzaiel", + "county": "Brasov" + }, + { + "id": 3298, + "name": "Dalghiu", + "county": "Brasov" + }, + { + "id": 3299, + "name": "Vistea de Jos", + "county": "Brasov" + }, + { + "id": 3300, + "name": "Dragus", + "county": "Brasov" + }, + { + "id": 3301, + "name": "Oltet", + "county": "Brasov" + }, + { + "id": 3302, + "name": "Rucar", + "county": "Brasov" + }, + { + "id": 3303, + "name": "Vistea de Sus", + "county": "Brasov" + }, + { + "id": 3304, + "name": "Vistisoara", + "county": "Brasov" + }, + { + "id": 3305, + "name": "Voila", + "county": "Brasov" + }, + { + "id": 3306, + "name": "Cincsor", + "county": "Brasov" + }, + { + "id": 3307, + "name": "Dridif", + "county": "Brasov" + }, + { + "id": 3308, + "name": "Ludisor", + "county": "Brasov" + }, + { + "id": 3309, + "name": "Sambata de Jos", + "county": "Brasov" + }, + { + "id": 3310, + "name": "Sambata de Sus", + "county": "Brasov" + }, + { + "id": 3311, + "name": "Statiunea Climaterica Sambata", + "county": "Brasov" + }, + { + "id": 3312, + "name": "Voivodeni", + "county": "Brasov" + }, + { + "id": 3313, + "name": "Vulcan", + "county": "Brasov" + }, + { + "id": 3314, + "name": "Colonia 1 Mai", + "county": "Brasov" + }, + { + "id": 3315, + "name": "Holbav", + "county": "Brasov" + }, + { + "id": 3316, + "name": "Poiana Brasov", + "county": "Brasov" + }, + { + "id": 3317, + "name": "Braila", + "county": "Braila" + }, + { + "id": 3318, + "name": "Chiscani", + "county": "Braila" + }, + { + "id": 3319, + "name": "Lacu Sarat", + "county": "Braila" + }, + { + "id": 3320, + "name": "Varsatura", + "county": "Braila" + }, + { + "id": 3321, + "name": "Faurei", + "county": "Braila" + }, + { + "id": 3322, + "name": "Surdila-Greci", + "county": "Braila" + }, + { + "id": 3323, + "name": "Bratesu Vechi", + "county": "Braila" + }, + { + "id": 3324, + "name": "Faurei Sat", + "county": "Braila" + }, + { + "id": 3325, + "name": "Horia", + "county": "Braila" + }, + { + "id": 3326, + "name": "Baraganul", + "county": "Braila" + }, + { + "id": 3327, + "name": "Bertestii de Jos", + "county": "Braila" + }, + { + "id": 3328, + "name": "Bertestii de Sus", + "county": "Braila" + }, + { + "id": 3329, + "name": "Gura Calmatui", + "county": "Braila" + }, + { + "id": 3330, + "name": "Gura Garlutei", + "county": "Braila" + }, + { + "id": 3331, + "name": "Nicolesti", + "county": "Braila" + }, + { + "id": 3332, + "name": "Spiru Haret", + "county": "Braila" + }, + { + "id": 3333, + "name": "Bordei Verde", + "county": "Braila" + }, + { + "id": 3334, + "name": "Constantin Gabrielescu", + "county": "Braila" + }, + { + "id": 3335, + "name": "Filiu", + "county": "Braila" + }, + { + "id": 3336, + "name": "Liscoteanca", + "county": "Braila" + }, + { + "id": 3337, + "name": "Ciocile", + "county": "Braila" + }, + { + "id": 3338, + "name": "Chioibasesti", + "county": "Braila" + }, + { + "id": 3339, + "name": "Odaieni", + "county": "Braila" + }, + { + "id": 3340, + "name": "Chichinetu", + "county": "Braila" + }, + { + "id": 3341, + "name": "Ciresu", + "county": "Braila" + }, + { + "id": 3342, + "name": "Batogu", + "county": "Braila" + }, + { + "id": 3343, + "name": "Ionesti", + "county": "Braila" + }, + { + "id": 3344, + "name": "Scarlatesti", + "county": "Braila" + }, + { + "id": 3345, + "name": "Vultureni", + "county": "Braila" + }, + { + "id": 3346, + "name": "Dudesti", + "county": "Braila" + }, + { + "id": 3347, + "name": "Bumbacari", + "county": "Braila" + }, + { + "id": 3348, + "name": "Tataru", + "county": "Braila" + }, + { + "id": 3349, + "name": "Frecatei", + "county": "Braila" + }, + { + "id": 3350, + "name": "Agaua", + "county": "Braila" + }, + { + "id": 3351, + "name": "Cistia", + "county": "Braila" + }, + { + "id": 3352, + "name": "Salcia", + "county": "Braila" + }, + { + "id": 3353, + "name": "Stoienesti", + "county": "Braila" + }, + { + "id": 3354, + "name": "Titcov", + "county": "Braila" + }, + { + "id": 3355, + "name": "Galbenu", + "county": "Braila" + }, + { + "id": 3356, + "name": "Drogu", + "county": "Braila" + }, + { + "id": 3357, + "name": "Pantecani", + "county": "Braila" + }, + { + "id": 3358, + "name": "Satuc", + "county": "Braila" + }, + { + "id": 3359, + "name": "Zamfiresti", + "county": "Braila" + }, + { + "id": 3360, + "name": "Gemenele", + "county": "Braila" + }, + { + "id": 3361, + "name": "Gavani", + "county": "Braila" + }, + { + "id": 3362, + "name": "Gradistea", + "county": "Braila" + }, + { + "id": 3363, + "name": "Ibrianu", + "county": "Braila" + }, + { + "id": 3364, + "name": "Maraloiu", + "county": "Braila" + }, + { + "id": 3365, + "name": "Gropeni", + "county": "Braila" + }, + { + "id": 3366, + "name": "Ianca", + "county": "Braila" + }, + { + "id": 3367, + "name": "Berlesti", + "county": "Braila" + }, + { + "id": 3368, + "name": "Gara Ianca", + "county": "Braila" + }, + { + "id": 3369, + "name": "Oprisenesti", + "county": "Braila" + }, + { + "id": 3370, + "name": "Perisoru", + "county": "Braila" + }, + { + "id": 3371, + "name": "Plopu", + "county": "Braila" + }, + { + "id": 3372, + "name": "Tarlele Filiu", + "county": "Braila" + }, + { + "id": 3373, + "name": "Insuratei", + "county": "Braila" + }, + { + "id": 3374, + "name": "Lacu Rezii", + "county": "Braila" + }, + { + "id": 3375, + "name": "Maru Rosu", + "county": "Braila" + }, + { + "id": 3376, + "name": "Valea Calmatuiului", + "county": "Braila" + }, + { + "id": 3377, + "name": "Jirlau", + "county": "Braila" + }, + { + "id": 3378, + "name": "Bradeanca", + "county": "Braila" + }, + { + "id": 3379, + "name": "Marasu", + "county": "Braila" + }, + { + "id": 3380, + "name": "Bandoiu", + "county": "Braila" + }, + { + "id": 3381, + "name": "Magureni", + "county": "Braila" + }, + { + "id": 3382, + "name": "Nedeicu", + "county": "Braila" + }, + { + "id": 3383, + "name": "Plopi", + "county": "Braila" + }, + { + "id": 3384, + "name": "Tacau", + "county": "Braila" + }, + { + "id": 3385, + "name": "Maxineni", + "county": "Braila" + }, + { + "id": 3386, + "name": "Corbu Nou", + "county": "Braila" + }, + { + "id": 3387, + "name": "Corbu Vechi", + "county": "Braila" + }, + { + "id": 3388, + "name": "Latinu", + "county": "Braila" + }, + { + "id": 3389, + "name": "Voinesti", + "county": "Braila" + }, + { + "id": 3390, + "name": "Mircea Voda", + "county": "Braila" + }, + { + "id": 3391, + "name": "Dedulesti", + "county": "Braila" + }, + { + "id": 3392, + "name": "Movila Miresii", + "county": "Braila" + }, + { + "id": 3393, + "name": "Esna", + "county": "Braila" + }, + { + "id": 3394, + "name": "Tepes Voda", + "county": "Braila" + }, + { + "id": 3395, + "name": "Racovita", + "county": "Braila" + }, + { + "id": 3396, + "name": "Corbeni", + "county": "Braila" + }, + { + "id": 3397, + "name": "Custura", + "county": "Braila" + }, + { + "id": 3398, + "name": "Ramnicelu", + "county": "Braila" + }, + { + "id": 3399, + "name": "Boarca", + "county": "Braila" + }, + { + "id": 3400, + "name": "Constantinesti", + "county": "Braila" + }, + { + "id": 3401, + "name": "Mihail Kogalniceanu", + "county": "Braila" + }, + { + "id": 3402, + "name": "Romanu", + "county": "Braila" + }, + { + "id": 3403, + "name": "Oancea", + "county": "Braila" + }, + { + "id": 3404, + "name": "Rosiori", + "county": "Braila" + }, + { + "id": 3405, + "name": "Coltea", + "county": "Braila" + }, + { + "id": 3406, + "name": "Florica", + "county": "Braila" + }, + { + "id": 3407, + "name": "Pribeagu", + "county": "Braila" + }, + { + "id": 3408, + "name": "Salcia Tudor", + "county": "Braila" + }, + { + "id": 3409, + "name": "Ariciu", + "county": "Braila" + }, + { + "id": 3410, + "name": "Cuza Voda", + "county": "Braila" + }, + { + "id": 3411, + "name": "Gulianca", + "county": "Braila" + }, + { + "id": 3412, + "name": "Olaneasca", + "county": "Braila" + }, + { + "id": 3413, + "name": "Scortaru Nou", + "county": "Braila" + }, + { + "id": 3414, + "name": "Desirati", + "county": "Braila" + }, + { + "id": 3415, + "name": "Gurguieti", + "county": "Braila" + }, + { + "id": 3416, + "name": "Nicolae Balcescu", + "county": "Braila" + }, + { + "id": 3417, + "name": "Pitulati", + "county": "Braila" + }, + { + "id": 3418, + "name": "Sihleanu", + "county": "Braila" + }, + { + "id": 3419, + "name": "Silistea", + "county": "Braila" + }, + { + "id": 3420, + "name": "Cotu Lung", + "county": "Braila" + }, + { + "id": 3421, + "name": "Cotu Mihalea", + "county": "Braila" + }, + { + "id": 3422, + "name": "Martacesti", + "county": "Braila" + }, + { + "id": 3423, + "name": "Muchea", + "county": "Braila" + }, + { + "id": 3424, + "name": "Vamesu", + "county": "Braila" + }, + { + "id": 3425, + "name": "Stancuta", + "county": "Braila" + }, + { + "id": 3426, + "name": "Cuza Voda", + "county": "Braila" + }, + { + "id": 3427, + "name": "Polizesti", + "county": "Braila" + }, + { + "id": 3428, + "name": "Stanca", + "county": "Braila" + }, + { + "id": 3429, + "name": "Surdila-Gaiseanca", + "county": "Braila" + }, + { + "id": 3430, + "name": "Filipesti", + "county": "Braila" + }, + { + "id": 3431, + "name": "Sutesti", + "county": "Braila" + }, + { + "id": 3432, + "name": "Mihail Kogalniceanu", + "county": "Braila" + }, + { + "id": 3433, + "name": "Tichilesti", + "county": "Braila" + }, + { + "id": 3434, + "name": "Albina", + "county": "Braila" + }, + { + "id": 3435, + "name": "Traian", + "county": "Braila" + }, + { + "id": 3436, + "name": "Caldarusa", + "county": "Braila" + }, + { + "id": 3437, + "name": "Silistraru", + "county": "Braila" + }, + { + "id": 3438, + "name": "Urleasca", + "county": "Braila" + }, + { + "id": 3439, + "name": "Tudor Vladimirescu", + "county": "Braila" + }, + { + "id": 3440, + "name": "Cazasu", + "county": "Braila" + }, + { + "id": 3441, + "name": "Comaneasca", + "county": "Braila" + }, + { + "id": 3442, + "name": "Scortaru Vechi", + "county": "Braila" + }, + { + "id": 3443, + "name": "Tufesti", + "county": "Braila" + }, + { + "id": 3444, + "name": "Ulmu", + "county": "Braila" + }, + { + "id": 3445, + "name": "Jugureanu", + "county": "Braila" + }, + { + "id": 3446, + "name": "Unirea", + "county": "Braila" + }, + { + "id": 3447, + "name": "Morotesti", + "county": "Braila" + }, + { + "id": 3448, + "name": "Valea Canepii", + "county": "Braila" + }, + { + "id": 3449, + "name": "Vadeni", + "county": "Braila" + }, + { + "id": 3450, + "name": "Baldovinesti", + "county": "Braila" + }, + { + "id": 3451, + "name": "Pietroiu", + "county": "Braila" + }, + { + "id": 3452, + "name": "Victoria", + "county": "Braila" + }, + { + "id": 3453, + "name": "Mihai Bravu", + "county": "Braila" + }, + { + "id": 3454, + "name": "Visani", + "county": "Braila" + }, + { + "id": 3455, + "name": "Caineni-Bai", + "county": "Braila" + }, + { + "id": 3456, + "name": "Plasoiu", + "county": "Braila" + }, + { + "id": 3457, + "name": "Viziru", + "county": "Braila" + }, + { + "id": 3458, + "name": "Lanurile", + "county": "Braila" + }, + { + "id": 3459, + "name": "Zavoaia", + "county": "Braila" + }, + { + "id": 3460, + "name": "Dudescu", + "county": "Braila" + }, + { + "id": 3461, + "name": "Buzau", + "county": "Buzau" + }, + { + "id": 3462, + "name": "Ramnicu Sarat", + "county": "Buzau" + }, + { + "id": 3463, + "name": "Amaru", + "county": "Buzau" + }, + { + "id": 3464, + "name": "Campeni", + "county": "Buzau" + }, + { + "id": 3465, + "name": "Dulbanu", + "county": "Buzau" + }, + { + "id": 3466, + "name": "Lacu Sinaia", + "county": "Buzau" + }, + { + "id": 3467, + "name": "Lunca", + "county": "Buzau" + }, + { + "id": 3468, + "name": "Scorteanca", + "county": "Buzau" + }, + { + "id": 3469, + "name": "Balta Alba", + "county": "Buzau" + }, + { + "id": 3470, + "name": "Amara", + "county": "Buzau" + }, + { + "id": 3471, + "name": "Baile", + "county": "Buzau" + }, + { + "id": 3472, + "name": "Stavarasti", + "county": "Buzau" + }, + { + "id": 3473, + "name": "Balaceanu", + "county": "Buzau" + }, + { + "id": 3474, + "name": "Beceni", + "county": "Buzau" + }, + { + "id": 3475, + "name": "Arbanasi", + "county": "Buzau" + }, + { + "id": 3476, + "name": "Carpinistea", + "county": "Buzau" + }, + { + "id": 3477, + "name": "Dogari", + "county": "Buzau" + }, + { + "id": 3478, + "name": "Floresti", + "county": "Buzau" + }, + { + "id": 3479, + "name": "Gura Dimienii", + "county": "Buzau" + }, + { + "id": 3480, + "name": "Izvoru Dulce", + "county": "Buzau" + }, + { + "id": 3481, + "name": "Margariti", + "county": "Buzau" + }, + { + "id": 3482, + "name": "Valea Parului", + "county": "Buzau" + }, + { + "id": 3483, + "name": "Berca", + "county": "Buzau" + }, + { + "id": 3484, + "name": "Baceni", + "county": "Buzau" + }, + { + "id": 3485, + "name": "Cojanu", + "county": "Buzau" + }, + { + "id": 3486, + "name": "Joseni", + "county": "Buzau" + }, + { + "id": 3487, + "name": "Manastirea Ratesti", + "county": "Buzau" + }, + { + "id": 3488, + "name": "Paclele", + "county": "Buzau" + }, + { + "id": 3489, + "name": "Plescoi", + "county": "Buzau" + }, + { + "id": 3490, + "name": "Plesesti", + "county": "Buzau" + }, + { + "id": 3491, + "name": "Ratesti", + "county": "Buzau" + }, + { + "id": 3492, + "name": "Satuc", + "county": "Buzau" + }, + { + "id": 3493, + "name": "Tatarligu", + "county": "Buzau" + }, + { + "id": 3494, + "name": "Valea Nucului", + "county": "Buzau" + }, + { + "id": 3495, + "name": "Viforata", + "county": "Buzau" + }, + { + "id": 3496, + "name": "Bisoca", + "county": "Buzau" + }, + { + "id": 3497, + "name": "Baltagari", + "county": "Buzau" + }, + { + "id": 3498, + "name": "Lacurile", + "county": "Buzau" + }, + { + "id": 3499, + "name": "Lopatareasa", + "county": "Buzau" + }, + { + "id": 3500, + "name": "Plesi", + "county": "Buzau" + }, + { + "id": 3501, + "name": "Recea", + "county": "Buzau" + }, + { + "id": 3502, + "name": "Sarile", + "county": "Buzau" + }, + { + "id": 3503, + "name": "Sindrila", + "county": "Buzau" + }, + { + "id": 3504, + "name": "Blajani", + "county": "Buzau" + }, + { + "id": 3505, + "name": "Soresti", + "county": "Buzau" + }, + { + "id": 3506, + "name": "Boldu", + "county": "Buzau" + }, + { + "id": 3507, + "name": "Bozioru", + "county": "Buzau" + }, + { + "id": 3508, + "name": "Buduile", + "county": "Buzau" + }, + { + "id": 3509, + "name": "Fisici", + "county": "Buzau" + }, + { + "id": 3510, + "name": "Gavanele", + "county": "Buzau" + }, + { + "id": 3511, + "name": "Gresia", + "county": "Buzau" + }, + { + "id": 3512, + "name": "Izvoarele", + "county": "Buzau" + }, + { + "id": 3513, + "name": "Nucu", + "county": "Buzau" + }, + { + "id": 3514, + "name": "Scaeni", + "county": "Buzau" + }, + { + "id": 3515, + "name": "Ulmet", + "county": "Buzau" + }, + { + "id": 3516, + "name": "Vavalucile", + "county": "Buzau" + }, + { + "id": 3517, + "name": "Bradeanu", + "county": "Buzau" + }, + { + "id": 3518, + "name": "Mitropolia", + "county": "Buzau" + }, + { + "id": 3519, + "name": "Smardan", + "county": "Buzau" + }, + { + "id": 3520, + "name": "Braesti", + "county": "Buzau" + }, + { + "id": 3521, + "name": "Bratilesti", + "county": "Buzau" + }, + { + "id": 3522, + "name": "Goidesti", + "county": "Buzau" + }, + { + "id": 3523, + "name": "Ivanetu", + "county": "Buzau" + }, + { + "id": 3524, + "name": "Pinu", + "county": "Buzau" + }, + { + "id": 3525, + "name": "Parscovelu", + "county": "Buzau" + }, + { + "id": 3526, + "name": "Ruginoasa", + "county": "Buzau" + }, + { + "id": 3527, + "name": "Breaza", + "county": "Buzau" + }, + { + "id": 3528, + "name": "Badeni", + "county": "Buzau" + }, + { + "id": 3529, + "name": "Greceanca", + "county": "Buzau" + }, + { + "id": 3530, + "name": "Valeanca-Vilanesti", + "county": "Buzau" + }, + { + "id": 3531, + "name": "Vispesti", + "county": "Buzau" + }, + { + "id": 3532, + "name": "Buda", + "county": "Buzau" + }, + { + "id": 3533, + "name": "Alexandru Odobescu", + "county": "Buzau" + }, + { + "id": 3534, + "name": "Danulesti", + "county": "Buzau" + }, + { + "id": 3535, + "name": "Mucesti-Danulesti", + "county": "Buzau" + }, + { + "id": 3536, + "name": "Spidele", + "county": "Buzau" + }, + { + "id": 3537, + "name": "Toropalesti", + "county": "Buzau" + }, + { + "id": 3538, + "name": "Valea Larga", + "county": "Buzau" + }, + { + "id": 3539, + "name": "Calvini", + "county": "Buzau" + }, + { + "id": 3540, + "name": "Bascenii de Jos", + "county": "Buzau" + }, + { + "id": 3541, + "name": "Bascenii de Sus", + "county": "Buzau" + }, + { + "id": 3542, + "name": "Frasinet", + "county": "Buzau" + }, + { + "id": 3543, + "name": "Olari", + "county": "Buzau" + }, + { + "id": 3544, + "name": "C.a. Rosetti", + "county": "Buzau" + }, + { + "id": 3545, + "name": "Balteni", + "county": "Buzau" + }, + { + "id": 3546, + "name": "Balhacu", + "county": "Buzau" + }, + { + "id": 3547, + "name": "Cotu Ciorii", + "county": "Buzau" + }, + { + "id": 3548, + "name": "Lunca", + "county": "Buzau" + }, + { + "id": 3549, + "name": "Vizireni", + "county": "Buzau" + }, + { + "id": 3550, + "name": "Canesti", + "county": "Buzau" + }, + { + "id": 3551, + "name": "Gontesti", + "county": "Buzau" + }, + { + "id": 3552, + "name": "Negosina", + "county": "Buzau" + }, + { + "id": 3553, + "name": "Pacurile", + "county": "Buzau" + }, + { + "id": 3554, + "name": "Suchea", + "county": "Buzau" + }, + { + "id": 3555, + "name": "Valea Verzei", + "county": "Buzau" + }, + { + "id": 3556, + "name": "Catina", + "county": "Buzau" + }, + { + "id": 3557, + "name": "Corbu", + "county": "Buzau" + }, + { + "id": 3558, + "name": "Slobozia", + "county": "Buzau" + }, + { + "id": 3559, + "name": "Valea Catinei", + "county": "Buzau" + }, + { + "id": 3560, + "name": "Zeletin", + "county": "Buzau" + }, + { + "id": 3561, + "name": "Cernatesti", + "county": "Buzau" + }, + { + "id": 3562, + "name": "Aldeni", + "county": "Buzau" + }, + { + "id": 3563, + "name": "Baesti", + "county": "Buzau" + }, + { + "id": 3564, + "name": "Caldarusa", + "county": "Buzau" + }, + { + "id": 3565, + "name": "Fulga", + "county": "Buzau" + }, + { + "id": 3566, + "name": "Manasia", + "county": "Buzau" + }, + { + "id": 3567, + "name": "Vladeni", + "county": "Buzau" + }, + { + "id": 3568, + "name": "Zarnestii de Slanic", + "county": "Buzau" + }, + { + "id": 3569, + "name": "Chiliile", + "county": "Buzau" + }, + { + "id": 3570, + "name": "Budesti", + "county": "Buzau" + }, + { + "id": 3571, + "name": "Crevelesti", + "county": "Buzau" + }, + { + "id": 3572, + "name": "Ghiocari", + "county": "Buzau" + }, + { + "id": 3573, + "name": "Glodu-Petcari", + "county": "Buzau" + }, + { + "id": 3574, + "name": "Poiana Pletari", + "county": "Buzau" + }, + { + "id": 3575, + "name": "Trestioara", + "county": "Buzau" + }, + { + "id": 3576, + "name": "Chiojdu", + "county": "Buzau" + }, + { + "id": 3577, + "name": "Basca Chiojdului", + "county": "Buzau" + }, + { + "id": 3578, + "name": "Catiasu", + "county": "Buzau" + }, + { + "id": 3579, + "name": "Lera", + "county": "Buzau" + }, + { + "id": 3580, + "name": "Plescioara", + "county": "Buzau" + }, + { + "id": 3581, + "name": "Poenitele", + "county": "Buzau" + }, + { + "id": 3582, + "name": "Cilibia", + "county": "Buzau" + }, + { + "id": 3583, + "name": "Gara Cilibia", + "county": "Buzau" + }, + { + "id": 3584, + "name": "Manzu", + "county": "Buzau" + }, + { + "id": 3585, + "name": "Movila Oii", + "county": "Buzau" + }, + { + "id": 3586, + "name": "Posta", + "county": "Buzau" + }, + { + "id": 3587, + "name": "Cislau", + "county": "Buzau" + }, + { + "id": 3588, + "name": "Barasti", + "county": "Buzau" + }, + { + "id": 3589, + "name": "Buda Craciunesti", + "county": "Buzau" + }, + { + "id": 3590, + "name": "Gura Bascei", + "county": "Buzau" + }, + { + "id": 3591, + "name": "Scarisoara", + "county": "Buzau" + }, + { + "id": 3592, + "name": "Cochirleanca", + "county": "Buzau" + }, + { + "id": 3593, + "name": "Boboc", + "county": "Buzau" + }, + { + "id": 3594, + "name": "Gara Bobocu", + "county": "Buzau" + }, + { + "id": 3595, + "name": "Rosioru", + "county": "Buzau" + }, + { + "id": 3596, + "name": "Tarlele", + "county": "Buzau" + }, + { + "id": 3597, + "name": "Colti", + "county": "Buzau" + }, + { + "id": 3598, + "name": "Alunis", + "county": "Buzau" + }, + { + "id": 3599, + "name": "Coltii de Jos", + "county": "Buzau" + }, + { + "id": 3600, + "name": "Muscelu Caramanesti", + "county": "Buzau" + }, + { + "id": 3601, + "name": "Costesti", + "county": "Buzau" + }, + { + "id": 3602, + "name": "Budisteni", + "county": "Buzau" + }, + { + "id": 3603, + "name": "Gomoesti", + "county": "Buzau" + }, + { + "id": 3604, + "name": "Grosani", + "county": "Buzau" + }, + { + "id": 3605, + "name": "Pietrosu", + "county": "Buzau" + }, + { + "id": 3606, + "name": "Spataru", + "county": "Buzau" + }, + { + "id": 3607, + "name": "Cozieni", + "county": "Buzau" + }, + { + "id": 3608, + "name": "Anini", + "county": "Buzau" + }, + { + "id": 3609, + "name": "Balanesti", + "county": "Buzau" + }, + { + "id": 3610, + "name": "Bercesti", + "county": "Buzau" + }, + { + "id": 3611, + "name": "Ciocanesti", + "county": "Buzau" + }, + { + "id": 3612, + "name": "Cocarceni", + "county": "Buzau" + }, + { + "id": 3613, + "name": "Colteni", + "county": "Buzau" + }, + { + "id": 3614, + "name": "Fata lui Nan", + "county": "Buzau" + }, + { + "id": 3615, + "name": "Glodurile", + "county": "Buzau" + }, + { + "id": 3616, + "name": "Izvoru", + "county": "Buzau" + }, + { + "id": 3617, + "name": "Lungesti", + "county": "Buzau" + }, + { + "id": 3618, + "name": "Nistoresti", + "county": "Buzau" + }, + { + "id": 3619, + "name": "Pietraru", + "county": "Buzau" + }, + { + "id": 3620, + "name": "Punga", + "county": "Buzau" + }, + { + "id": 3621, + "name": "Teisu", + "county": "Buzau" + }, + { + "id": 3622, + "name": "Trestia", + "county": "Buzau" + }, + { + "id": 3623, + "name": "Tulburea", + "county": "Buzau" + }, + { + "id": 3624, + "name": "Valea Banului", + "county": "Buzau" + }, + { + "id": 3625, + "name": "Valea Roatei", + "county": "Buzau" + }, + { + "id": 3626, + "name": "Zapodia", + "county": "Buzau" + }, + { + "id": 3627, + "name": "Galbinasi", + "county": "Buzau" + }, + { + "id": 3628, + "name": "Bentu", + "county": "Buzau" + }, + { + "id": 3629, + "name": "Tabarasti", + "county": "Buzau" + }, + { + "id": 3630, + "name": "Gheraseni", + "county": "Buzau" + }, + { + "id": 3631, + "name": "Suditi", + "county": "Buzau" + }, + { + "id": 3632, + "name": "Ghergheasa", + "county": "Buzau" + }, + { + "id": 3633, + "name": "Salcioara", + "county": "Buzau" + }, + { + "id": 3634, + "name": "Glodeanu Sarat", + "county": "Buzau" + }, + { + "id": 3635, + "name": "Caldaruseanca", + "county": "Buzau" + }, + { + "id": 3636, + "name": "Ileana", + "county": "Buzau" + }, + { + "id": 3637, + "name": "Pitulicea", + "county": "Buzau" + }, + { + "id": 3638, + "name": "Glodeanu-Silistea", + "county": "Buzau" + }, + { + "id": 3639, + "name": "Casota", + "county": "Buzau" + }, + { + "id": 3640, + "name": "Carligu Mare", + "county": "Buzau" + }, + { + "id": 3641, + "name": "Carligu Mic", + "county": "Buzau" + }, + { + "id": 3642, + "name": "Corbu", + "county": "Buzau" + }, + { + "id": 3643, + "name": "Cotorca", + "county": "Buzau" + }, + { + "id": 3644, + "name": "Satu Nou", + "county": "Buzau" + }, + { + "id": 3645, + "name": "Vacareasca", + "county": "Buzau" + }, + { + "id": 3646, + "name": "Grebanu", + "county": "Buzau" + }, + { + "id": 3647, + "name": "Homesti", + "county": "Buzau" + }, + { + "id": 3648, + "name": "Livada", + "county": "Buzau" + }, + { + "id": 3649, + "name": "Livada Mica", + "county": "Buzau" + }, + { + "id": 3650, + "name": "Plevna", + "county": "Buzau" + }, + { + "id": 3651, + "name": "Zaplazi", + "county": "Buzau" + }, + { + "id": 3652, + "name": "Gura Teghii", + "county": "Buzau" + }, + { + "id": 3653, + "name": "Furtunesti", + "county": "Buzau" + }, + { + "id": 3654, + "name": "Nemertea", + "county": "Buzau" + }, + { + "id": 3655, + "name": "Paltinis", + "county": "Buzau" + }, + { + "id": 3656, + "name": "Secuiu", + "county": "Buzau" + }, + { + "id": 3657, + "name": "Vadu Oii", + "county": "Buzau" + }, + { + "id": 3658, + "name": "Varlaam", + "county": "Buzau" + }, + { + "id": 3659, + "name": "Largu", + "county": "Buzau" + }, + { + "id": 3660, + "name": "Scarlatesti", + "county": "Buzau" + }, + { + "id": 3661, + "name": "Lopatari", + "county": "Buzau" + }, + { + "id": 3662, + "name": "Brebu", + "county": "Buzau" + }, + { + "id": 3663, + "name": "Fundata", + "county": "Buzau" + }, + { + "id": 3664, + "name": "Luncile", + "county": "Buzau" + }, + { + "id": 3665, + "name": "Pestritu", + "county": "Buzau" + }, + { + "id": 3666, + "name": "Plaiu Nucului", + "county": "Buzau" + }, + { + "id": 3667, + "name": "Plostina", + "county": "Buzau" + }, + { + "id": 3668, + "name": "Potecu", + "county": "Buzau" + }, + { + "id": 3669, + "name": "Sareni", + "county": "Buzau" + }, + { + "id": 3670, + "name": "Terca", + "county": "Buzau" + }, + { + "id": 3671, + "name": "Varteju", + "county": "Buzau" + }, + { + "id": 3672, + "name": "Luciu", + "county": "Buzau" + }, + { + "id": 3673, + "name": "Caragele", + "county": "Buzau" + }, + { + "id": 3674, + "name": "Magura", + "county": "Buzau" + }, + { + "id": 3675, + "name": "Ciuta", + "county": "Buzau" + }, + { + "id": 3676, + "name": "Unguriu", + "county": "Buzau" + }, + { + "id": 3677, + "name": "Maracineni", + "county": "Buzau" + }, + { + "id": 3678, + "name": "Capatanesti", + "county": "Buzau" + }, + { + "id": 3679, + "name": "Potoceni", + "county": "Buzau" + }, + { + "id": 3680, + "name": "Margaritesti", + "county": "Buzau" + }, + { + "id": 3681, + "name": "Campulungeanca", + "county": "Buzau" + }, + { + "id": 3682, + "name": "Fantanele", + "county": "Buzau" + }, + { + "id": 3683, + "name": "Merei", + "county": "Buzau" + }, + { + "id": 3684, + "name": "Ciobanoaia", + "county": "Buzau" + }, + { + "id": 3685, + "name": "Dealul Viei", + "county": "Buzau" + }, + { + "id": 3686, + "name": "Dobrilesti", + "county": "Buzau" + }, + { + "id": 3687, + "name": "Gura Saratii", + "county": "Buzau" + }, + { + "id": 3688, + "name": "Izvoru Dulce", + "county": "Buzau" + }, + { + "id": 3689, + "name": "Lipia", + "county": "Buzau" + }, + { + "id": 3690, + "name": "Nenciulesti", + "county": "Buzau" + }, + { + "id": 3691, + "name": "Ograzile", + "county": "Buzau" + }, + { + "id": 3692, + "name": "Sarata-Monteoru", + "county": "Buzau" + }, + { + "id": 3693, + "name": "Valea Putului Merei", + "county": "Buzau" + }, + { + "id": 3694, + "name": "Mihailesti", + "county": "Buzau" + }, + { + "id": 3695, + "name": "Coltaneni", + "county": "Buzau" + }, + { + "id": 3696, + "name": "Florica", + "county": "Buzau" + }, + { + "id": 3697, + "name": "Margineanu", + "county": "Buzau" + }, + { + "id": 3698, + "name": "Satu Nou", + "county": "Buzau" + }, + { + "id": 3699, + "name": "Manzalesti", + "county": "Buzau" + }, + { + "id": 3700, + "name": "Beslii", + "county": "Buzau" + }, + { + "id": 3701, + "name": "Bustea", + "county": "Buzau" + }, + { + "id": 3702, + "name": "Ciresu", + "county": "Buzau" + }, + { + "id": 3703, + "name": "Ghizdita", + "county": "Buzau" + }, + { + "id": 3704, + "name": "Gura Badicului", + "county": "Buzau" + }, + { + "id": 3705, + "name": "Jghiab", + "county": "Buzau" + }, + { + "id": 3706, + "name": "Plavatu", + "county": "Buzau" + }, + { + "id": 3707, + "name": "Poiana Valcului", + "county": "Buzau" + }, + { + "id": 3708, + "name": "Satu Vechi", + "county": "Buzau" + }, + { + "id": 3709, + "name": "Trestioara", + "county": "Buzau" + }, + { + "id": 3710, + "name": "Valea Cotoarei", + "county": "Buzau" + }, + { + "id": 3711, + "name": "Valea Ursului", + "county": "Buzau" + }, + { + "id": 3712, + "name": "Movila Banului", + "county": "Buzau" + }, + { + "id": 3713, + "name": "Cioranca", + "county": "Buzau" + }, + { + "id": 3714, + "name": "Limpezis", + "county": "Buzau" + }, + { + "id": 3715, + "name": "Murgesti", + "county": "Buzau" + }, + { + "id": 3716, + "name": "Batogu", + "county": "Buzau" + }, + { + "id": 3717, + "name": "Valea Ratei", + "county": "Buzau" + }, + { + "id": 3718, + "name": "Naeni", + "county": "Buzau" + }, + { + "id": 3719, + "name": "Fintesti", + "county": "Buzau" + }, + { + "id": 3720, + "name": "Fantanele", + "county": "Buzau" + }, + { + "id": 3721, + "name": "Prosca", + "county": "Buzau" + }, + { + "id": 3722, + "name": "Varf", + "county": "Buzau" + }, + { + "id": 3723, + "name": "Nehoiu", + "county": "Buzau" + }, + { + "id": 3724, + "name": "Basca Rozilei", + "county": "Buzau" + }, + { + "id": 3725, + "name": "Chirlesti", + "county": "Buzau" + }, + { + "id": 3726, + "name": "Curmatura", + "county": "Buzau" + }, + { + "id": 3727, + "name": "Lunca Priporului", + "county": "Buzau" + }, + { + "id": 3728, + "name": "Mlajet", + "county": "Buzau" + }, + { + "id": 3729, + "name": "Nehoiasu", + "county": "Buzau" + }, + { + "id": 3730, + "name": "Paltineni", + "county": "Buzau" + }, + { + "id": 3731, + "name": "Stanila", + "county": "Buzau" + }, + { + "id": 3732, + "name": "Vinetisu", + "county": "Buzau" + }, + { + "id": 3733, + "name": "Odaile", + "county": "Buzau" + }, + { + "id": 3734, + "name": "Capu Satului", + "county": "Buzau" + }, + { + "id": 3735, + "name": "Corneanu", + "county": "Buzau" + }, + { + "id": 3736, + "name": "Gorani", + "county": "Buzau" + }, + { + "id": 3737, + "name": "Lacu", + "county": "Buzau" + }, + { + "id": 3738, + "name": "Piatra Alba", + "county": "Buzau" + }, + { + "id": 3739, + "name": "Posobesti", + "county": "Buzau" + }, + { + "id": 3740, + "name": "Scorosesti", + "county": "Buzau" + }, + { + "id": 3741, + "name": "Valea Fantanei", + "county": "Buzau" + }, + { + "id": 3742, + "name": "Valea Stefanului", + "county": "Buzau" + }, + { + "id": 3743, + "name": "Padina", + "county": "Buzau" + }, + { + "id": 3744, + "name": "Tatulesti", + "county": "Buzau" + }, + { + "id": 3745, + "name": "Pardosi", + "county": "Buzau" + }, + { + "id": 3746, + "name": "Chiperu", + "county": "Buzau" + }, + { + "id": 3747, + "name": "Costomiru", + "county": "Buzau" + }, + { + "id": 3748, + "name": "Valea lui Lalu", + "county": "Buzau" + }, + { + "id": 3749, + "name": "Valea Schiopului", + "county": "Buzau" + }, + { + "id": 3750, + "name": "Panatau", + "county": "Buzau" + }, + { + "id": 3751, + "name": "Begu", + "county": "Buzau" + }, + { + "id": 3752, + "name": "Lacu cu Anini", + "county": "Buzau" + }, + { + "id": 3753, + "name": "Maguricea", + "county": "Buzau" + }, + { + "id": 3754, + "name": "Plaisor", + "county": "Buzau" + }, + { + "id": 3755, + "name": "Rapile", + "county": "Buzau" + }, + { + "id": 3756, + "name": "Sibiciu de Jos", + "county": "Buzau" + }, + { + "id": 3757, + "name": "Tega", + "county": "Buzau" + }, + { + "id": 3758, + "name": "Zaharesti", + "county": "Buzau" + }, + { + "id": 3759, + "name": "Patarlagele", + "county": "Buzau" + }, + { + "id": 3760, + "name": "Calea Chiojdului", + "county": "Buzau" + }, + { + "id": 3761, + "name": "Crang", + "county": "Buzau" + }, + { + "id": 3762, + "name": "Fundaturile", + "county": "Buzau" + }, + { + "id": 3763, + "name": "Gornet", + "county": "Buzau" + }, + { + "id": 3764, + "name": "Lunca", + "county": "Buzau" + }, + { + "id": 3765, + "name": "Maruntisu", + "county": "Buzau" + }, + { + "id": 3766, + "name": "Manastirea", + "county": "Buzau" + }, + { + "id": 3767, + "name": "Muscel", + "county": "Buzau" + }, + { + "id": 3768, + "name": "Poienile", + "county": "Buzau" + }, + { + "id": 3769, + "name": "Sibiciu de Sus", + "county": "Buzau" + }, + { + "id": 3770, + "name": "Stroesti", + "county": "Buzau" + }, + { + "id": 3771, + "name": "Valea Lupului", + "county": "Buzau" + }, + { + "id": 3772, + "name": "Valea Sibiciului", + "county": "Buzau" + }, + { + "id": 3773, + "name": "Valea Viei", + "county": "Buzau" + }, + { + "id": 3774, + "name": "Pietroasele", + "county": "Buzau" + }, + { + "id": 3775, + "name": "Caltesti", + "county": "Buzau" + }, + { + "id": 3776, + "name": "Clondiru de Sus", + "county": "Buzau" + }, + { + "id": 3777, + "name": "Dara", + "county": "Buzau" + }, + { + "id": 3778, + "name": "Pietroasa Mica", + "county": "Buzau" + }, + { + "id": 3779, + "name": "Saranga", + "county": "Buzau" + }, + { + "id": 3780, + "name": "Parscov", + "county": "Buzau" + }, + { + "id": 3781, + "name": "Badila", + "county": "Buzau" + }, + { + "id": 3782, + "name": "Curcanesti", + "county": "Buzau" + }, + { + "id": 3783, + "name": "Lunca Frumoasa", + "county": "Buzau" + }, + { + "id": 3784, + "name": "Olesesti", + "county": "Buzau" + }, + { + "id": 3785, + "name": "Parjolesti", + "county": "Buzau" + }, + { + "id": 3786, + "name": "Robesti", + "county": "Buzau" + }, + { + "id": 3787, + "name": "Runcu", + "county": "Buzau" + }, + { + "id": 3788, + "name": "Tarcov", + "county": "Buzau" + }, + { + "id": 3789, + "name": "Tocileni", + "county": "Buzau" + }, + { + "id": 3790, + "name": "Trestieni", + "county": "Buzau" + }, + { + "id": 3791, + "name": "Valea Purcarului", + "county": "Buzau" + }, + { + "id": 3792, + "name": "Podgoria", + "county": "Buzau" + }, + { + "id": 3793, + "name": "Cotatcu", + "county": "Buzau" + }, + { + "id": 3794, + "name": "Oratia", + "county": "Buzau" + }, + { + "id": 3795, + "name": "Plesesti", + "county": "Buzau" + }, + { + "id": 3796, + "name": "Tabacari", + "county": "Buzau" + }, + { + "id": 3797, + "name": "Pogoanele", + "county": "Buzau" + }, + { + "id": 3798, + "name": "Caldarasti", + "county": "Buzau" + }, + { + "id": 3799, + "name": "Posta Calnau", + "county": "Buzau" + }, + { + "id": 3800, + "name": "Aliceni", + "county": "Buzau" + }, + { + "id": 3801, + "name": "Coconari", + "county": "Buzau" + }, + { + "id": 3802, + "name": "Potarnichesti", + "county": "Buzau" + }, + { + "id": 3803, + "name": "Suditi", + "county": "Buzau" + }, + { + "id": 3804, + "name": "Zilisteanca", + "county": "Buzau" + }, + { + "id": 3805, + "name": "Puiestii de Jos", + "county": "Buzau" + }, + { + "id": 3806, + "name": "Dascalesti", + "county": "Buzau" + }, + { + "id": 3807, + "name": "Lunca", + "county": "Buzau" + }, + { + "id": 3808, + "name": "Macrina", + "county": "Buzau" + }, + { + "id": 3809, + "name": "Nicolesti", + "county": "Buzau" + }, + { + "id": 3810, + "name": "Plopi", + "county": "Buzau" + }, + { + "id": 3811, + "name": "Puiestii de Sus", + "county": "Buzau" + }, + { + "id": 3812, + "name": "Racoviteni", + "county": "Buzau" + }, + { + "id": 3813, + "name": "Budrea", + "county": "Buzau" + }, + { + "id": 3814, + "name": "Petrisoru", + "county": "Buzau" + }, + { + "id": 3815, + "name": "Ramnicelu", + "county": "Buzau" + }, + { + "id": 3816, + "name": "Colibasi", + "county": "Buzau" + }, + { + "id": 3817, + "name": "Fotin", + "county": "Buzau" + }, + { + "id": 3818, + "name": "Stiubei", + "county": "Buzau" + }, + { + "id": 3819, + "name": "Robeasca", + "county": "Buzau" + }, + { + "id": 3820, + "name": "Mosesti", + "county": "Buzau" + }, + { + "id": 3821, + "name": "Rusetu", + "county": "Buzau" + }, + { + "id": 3822, + "name": "Sergent Ionel Stefan", + "county": "Buzau" + }, + { + "id": 3823, + "name": "Sageata", + "county": "Buzau" + }, + { + "id": 3824, + "name": "Banita", + "county": "Buzau" + }, + { + "id": 3825, + "name": "Beilic", + "county": "Buzau" + }, + { + "id": 3826, + "name": "Bordusani", + "county": "Buzau" + }, + { + "id": 3827, + "name": "Dambroca", + "county": "Buzau" + }, + { + "id": 3828, + "name": "Gavanesti", + "county": "Buzau" + }, + { + "id": 3829, + "name": "Movilita", + "county": "Buzau" + }, + { + "id": 3830, + "name": "Sahateni", + "county": "Buzau" + }, + { + "id": 3831, + "name": "Gageni", + "county": "Buzau" + }, + { + "id": 3832, + "name": "Istrita de Jos", + "county": "Buzau" + }, + { + "id": 3833, + "name": "Vintileanca", + "county": "Buzau" + }, + { + "id": 3834, + "name": "Sapoca", + "county": "Buzau" + }, + { + "id": 3835, + "name": "Matesti", + "county": "Buzau" + }, + { + "id": 3836, + "name": "Sarulesti", + "county": "Buzau" + }, + { + "id": 3837, + "name": "Caratnau de Jos", + "county": "Buzau" + }, + { + "id": 3838, + "name": "Caratnau de Sus", + "county": "Buzau" + }, + { + "id": 3839, + "name": "Goicelu", + "county": "Buzau" + }, + { + "id": 3840, + "name": "Sarile-Catun", + "county": "Buzau" + }, + { + "id": 3841, + "name": "Valea Larga-Sarulesti", + "county": "Buzau" + }, + { + "id": 3842, + "name": "Valea Stanei", + "county": "Buzau" + }, + { + "id": 3843, + "name": "Scortoasa", + "county": "Buzau" + }, + { + "id": 3844, + "name": "Balta Tocila", + "county": "Buzau" + }, + { + "id": 3845, + "name": "Beciu", + "county": "Buzau" + }, + { + "id": 3846, + "name": "Deleni", + "county": "Buzau" + }, + { + "id": 3847, + "name": "Dalma", + "county": "Buzau" + }, + { + "id": 3848, + "name": "Golu Grabicina", + "county": "Buzau" + }, + { + "id": 3849, + "name": "Grabicina de Jos", + "county": "Buzau" + }, + { + "id": 3850, + "name": "Grabicina de Sus", + "county": "Buzau" + }, + { + "id": 3851, + "name": "Gura Vaii", + "county": "Buzau" + }, + { + "id": 3852, + "name": "Plopeasa", + "county": "Buzau" + }, + { + "id": 3853, + "name": "Policiori", + "county": "Buzau" + }, + { + "id": 3854, + "name": "Scutelnici", + "county": "Buzau" + }, + { + "id": 3855, + "name": "Arcanu", + "county": "Buzau" + }, + { + "id": 3856, + "name": "Bragareasa", + "county": "Buzau" + }, + { + "id": 3857, + "name": "Lipanescu", + "county": "Buzau" + }, + { + "id": 3858, + "name": "Lunca Jaristei", + "county": "Buzau" + }, + { + "id": 3859, + "name": "Coltu Pietrii", + "county": "Buzau" + }, + { + "id": 3860, + "name": "Casoca", + "county": "Buzau" + }, + { + "id": 3861, + "name": "Gura Siriului", + "county": "Buzau" + }, + { + "id": 3862, + "name": "Muscelusa", + "county": "Buzau" + }, + { + "id": 3863, + "name": "Smeeni", + "county": "Buzau" + }, + { + "id": 3864, + "name": "Albesti", + "county": "Buzau" + }, + { + "id": 3865, + "name": "Balaia", + "county": "Buzau" + }, + { + "id": 3866, + "name": "Caltuna", + "county": "Buzau" + }, + { + "id": 3867, + "name": "Moisica", + "county": "Buzau" + }, + { + "id": 3868, + "name": "Udati-Lucieni", + "county": "Buzau" + }, + { + "id": 3869, + "name": "Udati-Manzu", + "county": "Buzau" + }, + { + "id": 3870, + "name": "Stalpu", + "county": "Buzau" + }, + { + "id": 3871, + "name": "Izvoru", + "county": "Buzau" + }, + { + "id": 3872, + "name": "Barbuncesti", + "county": "Buzau" + }, + { + "id": 3873, + "name": "Grajdana", + "county": "Buzau" + }, + { + "id": 3874, + "name": "Hales", + "county": "Buzau" + }, + { + "id": 3875, + "name": "Izvoranu", + "county": "Buzau" + }, + { + "id": 3876, + "name": "Leiculesti", + "county": "Buzau" + }, + { + "id": 3877, + "name": "Padurenii", + "county": "Buzau" + }, + { + "id": 3878, + "name": "Salcia", + "county": "Buzau" + }, + { + "id": 3879, + "name": "Strezeni", + "county": "Buzau" + }, + { + "id": 3880, + "name": "Tisau", + "county": "Buzau" + }, + { + "id": 3881, + "name": "Valea Salciilor", + "county": "Buzau" + }, + { + "id": 3882, + "name": "Topliceni", + "county": "Buzau" + }, + { + "id": 3883, + "name": "Babeni", + "county": "Buzau" + }, + { + "id": 3884, + "name": "Ceairu", + "county": "Buzau" + }, + { + "id": 3885, + "name": "Dedulesti", + "county": "Buzau" + }, + { + "id": 3886, + "name": "Gura Fagetului", + "county": "Buzau" + }, + { + "id": 3887, + "name": "Posta", + "county": "Buzau" + }, + { + "id": 3888, + "name": "Raducesti", + "county": "Buzau" + }, + { + "id": 3889, + "name": "Tintesti", + "county": "Buzau" + }, + { + "id": 3890, + "name": "Maxenu", + "county": "Buzau" + }, + { + "id": 3891, + "name": "Odaia Banului", + "county": "Buzau" + }, + { + "id": 3892, + "name": "Pogonele", + "county": "Buzau" + }, + { + "id": 3893, + "name": "Ulmeni", + "county": "Buzau" + }, + { + "id": 3894, + "name": "Baltareti", + "county": "Buzau" + }, + { + "id": 3895, + "name": "Clondiru", + "county": "Buzau" + }, + { + "id": 3896, + "name": "Sarata", + "county": "Buzau" + }, + { + "id": 3897, + "name": "Valcele", + "county": "Buzau" + }, + { + "id": 3898, + "name": "Vadu Pasii", + "county": "Buzau" + }, + { + "id": 3899, + "name": "Bajani", + "county": "Buzau" + }, + { + "id": 3900, + "name": "Focsanei", + "county": "Buzau" + }, + { + "id": 3901, + "name": "Gura Calnaului", + "county": "Buzau" + }, + { + "id": 3902, + "name": "Scurtesti", + "county": "Buzau" + }, + { + "id": 3903, + "name": "Stancesti", + "county": "Buzau" + }, + { + "id": 3904, + "name": "Valea Ramnicului", + "county": "Buzau" + }, + { + "id": 3905, + "name": "Oreavul", + "county": "Buzau" + }, + { + "id": 3906, + "name": "Rubla", + "county": "Buzau" + }, + { + "id": 3907, + "name": "Valea Salciei", + "county": "Buzau" + }, + { + "id": 3908, + "name": "Modreni", + "county": "Buzau" + }, + { + "id": 3909, + "name": "Valea Salciei-Catun", + "county": "Buzau" + }, + { + "id": 3910, + "name": "Vernesti", + "county": "Buzau" + }, + { + "id": 3911, + "name": "Bradeanca", + "county": "Buzau" + }, + { + "id": 3912, + "name": "Candesti", + "county": "Buzau" + }, + { + "id": 3913, + "name": "Carlomanesti", + "county": "Buzau" + }, + { + "id": 3914, + "name": "Mierea", + "county": "Buzau" + }, + { + "id": 3915, + "name": "Nenciu", + "county": "Buzau" + }, + { + "id": 3916, + "name": "Niscov", + "county": "Buzau" + }, + { + "id": 3917, + "name": "Sasenii Noi", + "county": "Buzau" + }, + { + "id": 3918, + "name": "Sasenii pe Vale", + "county": "Buzau" + }, + { + "id": 3919, + "name": "Sasenii Vechi", + "county": "Buzau" + }, + { + "id": 3920, + "name": "Zoresti", + "county": "Buzau" + }, + { + "id": 3921, + "name": "Vintila Voda", + "county": "Buzau" + }, + { + "id": 3922, + "name": "Bodinesti", + "county": "Buzau" + }, + { + "id": 3923, + "name": "Coca-Antimiresti", + "county": "Buzau" + }, + { + "id": 3924, + "name": "Coca-Niculesti", + "county": "Buzau" + }, + { + "id": 3925, + "name": "Niculesti", + "county": "Buzau" + }, + { + "id": 3926, + "name": "Petrachesti", + "county": "Buzau" + }, + { + "id": 3927, + "name": "Podu Muncii", + "county": "Buzau" + }, + { + "id": 3928, + "name": "Sarbesti", + "county": "Buzau" + }, + { + "id": 3929, + "name": "Smeesti", + "county": "Buzau" + }, + { + "id": 3930, + "name": "Viperesti", + "county": "Buzau" + }, + { + "id": 3931, + "name": "Muscel", + "county": "Buzau" + }, + { + "id": 3932, + "name": "Palici", + "county": "Buzau" + }, + { + "id": 3933, + "name": "Rusavat", + "county": "Buzau" + }, + { + "id": 3934, + "name": "Tronari", + "county": "Buzau" + }, + { + "id": 3935, + "name": "Ursoaia", + "county": "Buzau" + }, + { + "id": 3936, + "name": "Valcelele", + "county": "Buzau" + }, + { + "id": 3937, + "name": "Fundeni", + "county": "Buzau" + }, + { + "id": 3938, + "name": "Comisoaia", + "county": "Buzau" + }, + { + "id": 3939, + "name": "Pruneni", + "county": "Buzau" + }, + { + "id": 3940, + "name": "Vadu Soresti", + "county": "Buzau" + }, + { + "id": 3941, + "name": "Zarnesti", + "county": "Buzau" + }, + { + "id": 3942, + "name": "Ziduri", + "county": "Buzau" + }, + { + "id": 3943, + "name": "Costieni", + "county": "Buzau" + }, + { + "id": 3944, + "name": "Cuculeasa", + "county": "Buzau" + }, + { + "id": 3945, + "name": "Heliade Radulescu", + "county": "Buzau" + }, + { + "id": 3946, + "name": "Lanurile", + "county": "Buzau" + }, + { + "id": 3947, + "name": "Zoita", + "county": "Buzau" + }, + { + "id": 3948, + "name": "Ojasca", + "county": "Buzau" + }, + { + "id": 3949, + "name": "Resita", + "county": "Caras-Severin" + }, + { + "id": 3950, + "name": "Calnic", + "county": "Caras-Severin" + }, + { + "id": 3951, + "name": "Cuptoare", + "county": "Caras-Severin" + }, + { + "id": 3952, + "name": "Doman", + "county": "Caras-Severin" + }, + { + "id": 3953, + "name": "Secu", + "county": "Caras-Severin" + }, + { + "id": 3954, + "name": "Terova", + "county": "Caras-Severin" + }, + { + "id": 3955, + "name": "Moniom", + "county": "Caras-Severin" + }, + { + "id": 3956, + "name": "Anina", + "county": "Caras-Severin" + }, + { + "id": 3957, + "name": "Steierdorf", + "county": "Caras-Severin" + }, + { + "id": 3958, + "name": "Baile Herculane", + "county": "Caras-Severin" + }, + { + "id": 3959, + "name": "Pecinisca", + "county": "Caras-Severin" + }, + { + "id": 3960, + "name": "Bocsa", + "county": "Caras-Severin" + }, + { + "id": 3961, + "name": "Ocna de Fier", + "county": "Caras-Severin" + }, + { + "id": 3962, + "name": "Caransebes", + "county": "Caras-Severin" + }, + { + "id": 3963, + "name": "Jupa", + "county": "Caras-Severin" + }, + { + "id": 3964, + "name": "Moldova Noua", + "county": "Caras-Severin" + }, + { + "id": 3965, + "name": "Macesti", + "county": "Caras-Severin" + }, + { + "id": 3966, + "name": "Moldova Veche", + "county": "Caras-Severin" + }, + { + "id": 3967, + "name": "Moldovita", + "county": "Caras-Severin" + }, + { + "id": 3968, + "name": "Oravita", + "county": "Caras-Severin" + }, + { + "id": 3969, + "name": "Ciclova Montana", + "county": "Caras-Severin" + }, + { + "id": 3970, + "name": "Marila", + "county": "Caras-Severin" + }, + { + "id": 3971, + "name": "Agadici", + "county": "Caras-Severin" + }, + { + "id": 3972, + "name": "Bradisoru de Jos", + "county": "Caras-Severin" + }, + { + "id": 3973, + "name": "Brosteni", + "county": "Caras-Severin" + }, + { + "id": 3974, + "name": "Rachitova", + "county": "Caras-Severin" + }, + { + "id": 3975, + "name": "Otelu Rosu", + "county": "Caras-Severin" + }, + { + "id": 3976, + "name": "Ciresa", + "county": "Caras-Severin" + }, + { + "id": 3977, + "name": "Mal", + "county": "Caras-Severin" + }, + { + "id": 3978, + "name": "Armenis", + "county": "Caras-Severin" + }, + { + "id": 3979, + "name": "Fenes", + "county": "Caras-Severin" + }, + { + "id": 3980, + "name": "Plopu", + "county": "Caras-Severin" + }, + { + "id": 3981, + "name": "Sat Batran", + "county": "Caras-Severin" + }, + { + "id": 3982, + "name": "Sub Margine", + "county": "Caras-Severin" + }, + { + "id": 3983, + "name": "Bania", + "county": "Caras-Severin" + }, + { + "id": 3984, + "name": "Garbovat", + "county": "Caras-Severin" + }, + { + "id": 3985, + "name": "Bautar", + "county": "Caras-Severin" + }, + { + "id": 3986, + "name": "Bucova", + "county": "Caras-Severin" + }, + { + "id": 3987, + "name": "Cornisoru", + "county": "Caras-Severin" + }, + { + "id": 3988, + "name": "Preveciori", + "county": "Caras-Severin" + }, + { + "id": 3989, + "name": "Berliste", + "county": "Caras-Severin" + }, + { + "id": 3990, + "name": "Iam", + "county": "Caras-Severin" + }, + { + "id": 3991, + "name": "Milcoveni", + "county": "Caras-Severin" + }, + { + "id": 3992, + "name": "Rusova Noua", + "county": "Caras-Severin" + }, + { + "id": 3993, + "name": "Rusova Veche", + "county": "Caras-Severin" + }, + { + "id": 3994, + "name": "Berzasca", + "county": "Caras-Severin" + }, + { + "id": 3995, + "name": "Bigar", + "county": "Caras-Severin" + }, + { + "id": 3996, + "name": "Cozla", + "county": "Caras-Severin" + }, + { + "id": 3997, + "name": "Drencova", + "county": "Caras-Severin" + }, + { + "id": 3998, + "name": "Liubcova", + "county": "Caras-Severin" + }, + { + "id": 3999, + "name": "Berzovia", + "county": "Caras-Severin" + }, + { + "id": 4000, + "name": "Fizes", + "county": "Caras-Severin" + }, + { + "id": 4001, + "name": "Ghertenis", + "county": "Caras-Severin" + }, + { + "id": 4002, + "name": "Bolvasnita", + "county": "Caras-Severin" + }, + { + "id": 4003, + "name": "Varciorova", + "county": "Caras-Severin" + }, + { + "id": 4004, + "name": "Bozovici", + "county": "Caras-Severin" + }, + { + "id": 4005, + "name": "Poneasca", + "county": "Caras-Severin" + }, + { + "id": 4006, + "name": "Prilipet", + "county": "Caras-Severin" + }, + { + "id": 4007, + "name": "Valea Minisului", + "county": "Caras-Severin" + }, + { + "id": 4008, + "name": "Brebu", + "county": "Caras-Severin" + }, + { + "id": 4009, + "name": "Apadia", + "county": "Caras-Severin" + }, + { + "id": 4010, + "name": "Valeadeni", + "county": "Caras-Severin" + }, + { + "id": 4011, + "name": "Brebu Nou", + "county": "Caras-Severin" + }, + { + "id": 4012, + "name": "Garana", + "county": "Caras-Severin" + }, + { + "id": 4013, + "name": "Buchin", + "county": "Caras-Severin" + }, + { + "id": 4014, + "name": "Lindenfeld", + "county": "Caras-Severin" + }, + { + "id": 4015, + "name": "Poiana", + "county": "Caras-Severin" + }, + { + "id": 4016, + "name": "Prisian", + "county": "Caras-Severin" + }, + { + "id": 4017, + "name": "Valea Timisului", + "county": "Caras-Severin" + }, + { + "id": 4018, + "name": "Bucosnita", + "county": "Caras-Severin" + }, + { + "id": 4019, + "name": "Golet", + "county": "Caras-Severin" + }, + { + "id": 4020, + "name": "Petrosnita", + "county": "Caras-Severin" + }, + { + "id": 4021, + "name": "Valisoara", + "county": "Caras-Severin" + }, + { + "id": 4022, + "name": "Carasova", + "county": "Caras-Severin" + }, + { + "id": 4023, + "name": "Iabalcea", + "county": "Caras-Severin" + }, + { + "id": 4024, + "name": "Nermed", + "county": "Caras-Severin" + }, + { + "id": 4025, + "name": "Carbunari", + "county": "Caras-Severin" + }, + { + "id": 4026, + "name": "Stinapari", + "county": "Caras-Severin" + }, + { + "id": 4027, + "name": "Cavaran", + "county": "Caras-Severin" + }, + { + "id": 4028, + "name": "Maciova", + "county": "Caras-Severin" + }, + { + "id": 4029, + "name": "Matnicu Mare", + "county": "Caras-Severin" + }, + { + "id": 4030, + "name": "Pestere", + "county": "Caras-Severin" + }, + { + "id": 4031, + "name": "Prisaca", + "county": "Caras-Severin" + }, + { + "id": 4032, + "name": "Zagujeni", + "county": "Caras-Severin" + }, + { + "id": 4033, + "name": "Ciclova Romana", + "county": "Caras-Severin" + }, + { + "id": 4034, + "name": "Ilidia", + "county": "Caras-Severin" + }, + { + "id": 4035, + "name": "Socolari", + "county": "Caras-Severin" + }, + { + "id": 4036, + "name": "Ciuchici", + "county": "Caras-Severin" + }, + { + "id": 4037, + "name": "Macoviste", + "county": "Caras-Severin" + }, + { + "id": 4038, + "name": "Nicolint", + "county": "Caras-Severin" + }, + { + "id": 4039, + "name": "Petrilova", + "county": "Caras-Severin" + }, + { + "id": 4040, + "name": "Ciudanovita", + "county": "Caras-Severin" + }, + { + "id": 4041, + "name": "Jitin", + "county": "Caras-Severin" + }, + { + "id": 4042, + "name": "Copacele", + "county": "Caras-Severin" + }, + { + "id": 4043, + "name": "Ohaba-Matnic", + "county": "Caras-Severin" + }, + { + "id": 4044, + "name": "Ruginosu", + "county": "Caras-Severin" + }, + { + "id": 4045, + "name": "Zorile", + "county": "Caras-Severin" + }, + { + "id": 4046, + "name": "Cornea", + "county": "Caras-Severin" + }, + { + "id": 4047, + "name": "Crusovat", + "county": "Caras-Severin" + }, + { + "id": 4048, + "name": "Cuptoare", + "county": "Caras-Severin" + }, + { + "id": 4049, + "name": "Macoviste", + "county": "Caras-Severin" + }, + { + "id": 4050, + "name": "Cornereva", + "county": "Caras-Severin" + }, + { + "id": 4051, + "name": "Arsuri", + "county": "Caras-Severin" + }, + { + "id": 4052, + "name": "Bogaltin", + "county": "Caras-Severin" + }, + { + "id": 4053, + "name": "Bojia", + "county": "Caras-Severin" + }, + { + "id": 4054, + "name": "Borugi", + "county": "Caras-Severin" + }, + { + "id": 4055, + "name": "Camena", + "county": "Caras-Severin" + }, + { + "id": 4056, + "name": "Ciresel", + "county": "Caras-Severin" + }, + { + "id": 4057, + "name": "Costis", + "county": "Caras-Severin" + }, + { + "id": 4058, + "name": "Cozia", + "county": "Caras-Severin" + }, + { + "id": 4059, + "name": "Cracu Mare", + "county": "Caras-Severin" + }, + { + "id": 4060, + "name": "Cracu Teiului", + "county": "Caras-Severin" + }, + { + "id": 4061, + "name": "Dobraia", + "county": "Caras-Severin" + }, + { + "id": 4062, + "name": "Dolina", + "county": "Caras-Severin" + }, + { + "id": 4063, + "name": "Gruni", + "county": "Caras-Severin" + }, + { + "id": 4064, + "name": "Hora Mare", + "county": "Caras-Severin" + }, + { + "id": 4065, + "name": "Hora Mica", + "county": "Caras-Severin" + }, + { + "id": 4066, + "name": "Inelet", + "county": "Caras-Severin" + }, + { + "id": 4067, + "name": "Izvor", + "county": "Caras-Severin" + }, + { + "id": 4068, + "name": "Lunca Florii", + "county": "Caras-Severin" + }, + { + "id": 4069, + "name": "Lunca Zaicii", + "county": "Caras-Severin" + }, + { + "id": 4070, + "name": "Mesteacan", + "county": "Caras-Severin" + }, + { + "id": 4071, + "name": "Negiudin", + "county": "Caras-Severin" + }, + { + "id": 4072, + "name": "Obita", + "county": "Caras-Severin" + }, + { + "id": 4073, + "name": "Pogara de Sus", + "county": "Caras-Severin" + }, + { + "id": 4074, + "name": "Pogara", + "county": "Caras-Severin" + }, + { + "id": 4075, + "name": "Poiana Lunga", + "county": "Caras-Severin" + }, + { + "id": 4076, + "name": "Prisacina", + "county": "Caras-Severin" + }, + { + "id": 4077, + "name": "Prislop", + "county": "Caras-Severin" + }, + { + "id": 4078, + "name": "Rustin", + "county": "Caras-Severin" + }, + { + "id": 4079, + "name": "Scarisoara", + "county": "Caras-Severin" + }, + { + "id": 4080, + "name": "Strugasca", + "county": "Caras-Severin" + }, + { + "id": 4081, + "name": "Studena", + "county": "Caras-Severin" + }, + { + "id": 4082, + "name": "Sub Crang", + "county": "Caras-Severin" + }, + { + "id": 4083, + "name": "Sub Plai", + "county": "Caras-Severin" + }, + { + "id": 4084, + "name": "Topla", + "county": "Caras-Severin" + }, + { + "id": 4085, + "name": "Tatu", + "county": "Caras-Severin" + }, + { + "id": 4086, + "name": "Zanogi", + "county": "Caras-Severin" + }, + { + "id": 4087, + "name": "Zbegu", + "county": "Caras-Severin" + }, + { + "id": 4088, + "name": "Zmogotin", + "county": "Caras-Severin" + }, + { + "id": 4089, + "name": "Zoina", + "county": "Caras-Severin" + }, + { + "id": 4090, + "name": "Dalboset", + "county": "Caras-Severin" + }, + { + "id": 4091, + "name": "Barz", + "county": "Caras-Severin" + }, + { + "id": 4092, + "name": "Boina", + "county": "Caras-Severin" + }, + { + "id": 4093, + "name": "Boinita", + "county": "Caras-Severin" + }, + { + "id": 4094, + "name": "Prislop", + "county": "Caras-Severin" + }, + { + "id": 4095, + "name": "Resita Mica", + "county": "Caras-Severin" + }, + { + "id": 4096, + "name": "Sopotu Vechi", + "county": "Caras-Severin" + }, + { + "id": 4097, + "name": "Doclin", + "county": "Caras-Severin" + }, + { + "id": 4098, + "name": "Binis", + "county": "Caras-Severin" + }, + { + "id": 4099, + "name": "Tirol", + "county": "Caras-Severin" + }, + { + "id": 4100, + "name": "Dognecea", + "county": "Caras-Severin" + }, + { + "id": 4101, + "name": "Calina", + "county": "Caras-Severin" + }, + { + "id": 4102, + "name": "Domasnea", + "county": "Caras-Severin" + }, + { + "id": 4103, + "name": "Canicea", + "county": "Caras-Severin" + }, + { + "id": 4104, + "name": "Ezeris", + "county": "Caras-Severin" + }, + { + "id": 4105, + "name": "Soceni", + "county": "Caras-Severin" + }, + { + "id": 4106, + "name": "Farliug", + "county": "Caras-Severin" + }, + { + "id": 4107, + "name": "Dezesti", + "county": "Caras-Severin" + }, + { + "id": 4108, + "name": "Duleu", + "county": "Caras-Severin" + }, + { + "id": 4109, + "name": "Remetea-Poganici", + "county": "Caras-Severin" + }, + { + "id": 4110, + "name": "Scaius", + "county": "Caras-Severin" + }, + { + "id": 4111, + "name": "Valea Mare", + "county": "Caras-Severin" + }, + { + "id": 4112, + "name": "Forotic", + "county": "Caras-Severin" + }, + { + "id": 4113, + "name": "Brezon", + "county": "Caras-Severin" + }, + { + "id": 4114, + "name": "Comoraste", + "county": "Caras-Severin" + }, + { + "id": 4115, + "name": "Surducu Mare", + "county": "Caras-Severin" + }, + { + "id": 4116, + "name": "Garnic", + "county": "Caras-Severin" + }, + { + "id": 4117, + "name": "Padina Matei", + "county": "Caras-Severin" + }, + { + "id": 4118, + "name": "Glimboca", + "county": "Caras-Severin" + }, + { + "id": 4119, + "name": "Goruia", + "county": "Caras-Severin" + }, + { + "id": 4120, + "name": "Giurgiova", + "county": "Caras-Severin" + }, + { + "id": 4121, + "name": "Garliste", + "county": "Caras-Severin" + }, + { + "id": 4122, + "name": "Gradinari", + "county": "Caras-Severin" + }, + { + "id": 4123, + "name": "Greoni", + "county": "Caras-Severin" + }, + { + "id": 4124, + "name": "Iablanita", + "county": "Caras-Severin" + }, + { + "id": 4125, + "name": "Globu Craiovei", + "county": "Caras-Severin" + }, + { + "id": 4126, + "name": "Petnic", + "county": "Caras-Severin" + }, + { + "id": 4127, + "name": "Lapusnicel", + "county": "Caras-Severin" + }, + { + "id": 4128, + "name": "Parvova", + "county": "Caras-Severin" + }, + { + "id": 4129, + "name": "Sumita", + "county": "Caras-Severin" + }, + { + "id": 4130, + "name": "Lapusnicu Mare", + "county": "Caras-Severin" + }, + { + "id": 4131, + "name": "Moceris", + "county": "Caras-Severin" + }, + { + "id": 4132, + "name": "Luncavita", + "county": "Caras-Severin" + }, + { + "id": 4133, + "name": "Verendin", + "county": "Caras-Severin" + }, + { + "id": 4134, + "name": "Lupac", + "county": "Caras-Severin" + }, + { + "id": 4135, + "name": "Clocotici", + "county": "Caras-Severin" + }, + { + "id": 4136, + "name": "Rafnic", + "county": "Caras-Severin" + }, + { + "id": 4137, + "name": "Vodnic", + "county": "Caras-Severin" + }, + { + "id": 4138, + "name": "Marga", + "county": "Caras-Severin" + }, + { + "id": 4139, + "name": "Vama Marga", + "county": "Caras-Severin" + }, + { + "id": 4140, + "name": "Maureni", + "county": "Caras-Severin" + }, + { + "id": 4141, + "name": "Sosdea", + "county": "Caras-Severin" + }, + { + "id": 4142, + "name": "Mehadia", + "county": "Caras-Severin" + }, + { + "id": 4143, + "name": "Globurau", + "county": "Caras-Severin" + }, + { + "id": 4144, + "name": "Plugova", + "county": "Caras-Severin" + }, + { + "id": 4145, + "name": "Valea Bolvasnita", + "county": "Caras-Severin" + }, + { + "id": 4146, + "name": "Mehadica", + "county": "Caras-Severin" + }, + { + "id": 4147, + "name": "Naidas", + "county": "Caras-Severin" + }, + { + "id": 4148, + "name": "Lescovita", + "county": "Caras-Severin" + }, + { + "id": 4149, + "name": "Obreja", + "county": "Caras-Severin" + }, + { + "id": 4150, + "name": "Ciuta", + "county": "Caras-Severin" + }, + { + "id": 4151, + "name": "Iaz", + "county": "Caras-Severin" + }, + { + "id": 4152, + "name": "Var", + "county": "Caras-Severin" + }, + { + "id": 4153, + "name": "Paltinis", + "county": "Caras-Severin" + }, + { + "id": 4154, + "name": "Cornutel", + "county": "Caras-Severin" + }, + { + "id": 4155, + "name": "Delinesti", + "county": "Caras-Severin" + }, + { + "id": 4156, + "name": "Ohabita", + "county": "Caras-Severin" + }, + { + "id": 4157, + "name": "Rugi", + "county": "Caras-Severin" + }, + { + "id": 4158, + "name": "Coronini", + "county": "Caras-Severin" + }, + { + "id": 4159, + "name": "Sfanta Elena", + "county": "Caras-Severin" + }, + { + "id": 4160, + "name": "Pojejena", + "county": "Caras-Severin" + }, + { + "id": 4161, + "name": "Belobresca", + "county": "Caras-Severin" + }, + { + "id": 4162, + "name": "Divici", + "county": "Caras-Severin" + }, + { + "id": 4163, + "name": "Radimna", + "county": "Caras-Severin" + }, + { + "id": 4164, + "name": "Susca", + "county": "Caras-Severin" + }, + { + "id": 4165, + "name": "Prigor", + "county": "Caras-Severin" + }, + { + "id": 4166, + "name": "Borlovenii Noi", + "county": "Caras-Severin" + }, + { + "id": 4167, + "name": "Borlovenii Vechi", + "county": "Caras-Severin" + }, + { + "id": 4168, + "name": "Patas", + "county": "Caras-Severin" + }, + { + "id": 4169, + "name": "Putna", + "county": "Caras-Severin" + }, + { + "id": 4170, + "name": "Ramna", + "county": "Caras-Severin" + }, + { + "id": 4171, + "name": "Barbosu", + "county": "Caras-Severin" + }, + { + "id": 4172, + "name": "Valeapai", + "county": "Caras-Severin" + }, + { + "id": 4173, + "name": "Racasdia", + "county": "Caras-Severin" + }, + { + "id": 4174, + "name": "Vraniut", + "county": "Caras-Severin" + }, + { + "id": 4175, + "name": "Eftimie Murgu", + "county": "Caras-Severin" + }, + { + "id": 4176, + "name": "Rusca Montana", + "county": "Caras-Severin" + }, + { + "id": 4177, + "name": "Ruschita", + "county": "Caras-Severin" + }, + { + "id": 4178, + "name": "Sacu", + "county": "Caras-Severin" + }, + { + "id": 4179, + "name": "Salbagelu Nou", + "county": "Caras-Severin" + }, + { + "id": 4180, + "name": "Tincova", + "county": "Caras-Severin" + }, + { + "id": 4181, + "name": "Sasca Montana", + "county": "Caras-Severin" + }, + { + "id": 4182, + "name": "Bogodint", + "county": "Caras-Severin" + }, + { + "id": 4183, + "name": "Potoc", + "county": "Caras-Severin" + }, + { + "id": 4184, + "name": "Sasca Romana", + "county": "Caras-Severin" + }, + { + "id": 4185, + "name": "Slatina-Nera", + "county": "Caras-Severin" + }, + { + "id": 4186, + "name": "Sichevita", + "county": "Caras-Severin" + }, + { + "id": 4187, + "name": "Brestelnic", + "county": "Caras-Severin" + }, + { + "id": 4188, + "name": "Camenita", + "county": "Caras-Severin" + }, + { + "id": 4189, + "name": "Carsie", + "county": "Caras-Severin" + }, + { + "id": 4190, + "name": "Cracu Almaj", + "county": "Caras-Severin" + }, + { + "id": 4191, + "name": "Crusovita", + "county": "Caras-Severin" + }, + { + "id": 4192, + "name": "Curmatura", + "county": "Caras-Severin" + }, + { + "id": 4193, + "name": "Frasinis", + "county": "Caras-Severin" + }, + { + "id": 4194, + "name": "Gornea", + "county": "Caras-Severin" + }, + { + "id": 4195, + "name": "Liborajdea", + "county": "Caras-Severin" + }, + { + "id": 4196, + "name": "Lucacevat", + "county": "Caras-Severin" + }, + { + "id": 4197, + "name": "Martinovat", + "county": "Caras-Severin" + }, + { + "id": 4198, + "name": "Ogasu Podului", + "county": "Caras-Severin" + }, + { + "id": 4199, + "name": "Streneac", + "county": "Caras-Severin" + }, + { + "id": 4200, + "name": "Valea Orevita", + "county": "Caras-Severin" + }, + { + "id": 4201, + "name": "Valea Ravensca", + "county": "Caras-Severin" + }, + { + "id": 4202, + "name": "Valea Sichevitei", + "county": "Caras-Severin" + }, + { + "id": 4203, + "name": "Zanou", + "county": "Caras-Severin" + }, + { + "id": 4204, + "name": "Zasloane", + "county": "Caras-Severin" + }, + { + "id": 4205, + "name": "Slatina-Timis", + "county": "Caras-Severin" + }, + { + "id": 4206, + "name": "Ilova", + "county": "Caras-Severin" + }, + { + "id": 4207, + "name": "Sadova Noua", + "county": "Caras-Severin" + }, + { + "id": 4208, + "name": "Sadova Veche", + "county": "Caras-Severin" + }, + { + "id": 4209, + "name": "Socol", + "county": "Caras-Severin" + }, + { + "id": 4210, + "name": "Bazias", + "county": "Caras-Severin" + }, + { + "id": 4211, + "name": "Campia", + "county": "Caras-Severin" + }, + { + "id": 4212, + "name": "Parneaura", + "county": "Caras-Severin" + }, + { + "id": 4213, + "name": "Zlatita", + "county": "Caras-Severin" + }, + { + "id": 4214, + "name": "Sopotu Nou", + "county": "Caras-Severin" + }, + { + "id": 4215, + "name": "Carsa Rosie", + "county": "Caras-Severin" + }, + { + "id": 4216, + "name": "Dristie", + "county": "Caras-Severin" + }, + { + "id": 4217, + "name": "Poienile Boinei", + "county": "Caras-Severin" + }, + { + "id": 4218, + "name": "Ravensca", + "county": "Caras-Severin" + }, + { + "id": 4219, + "name": "Rachita", + "county": "Caras-Severin" + }, + { + "id": 4220, + "name": "Stancilova", + "county": "Caras-Severin" + }, + { + "id": 4221, + "name": "Urcu", + "county": "Caras-Severin" + }, + { + "id": 4222, + "name": "Valea Rachitei", + "county": "Caras-Severin" + }, + { + "id": 4223, + "name": "Valea Rosie", + "county": "Caras-Severin" + }, + { + "id": 4224, + "name": "Teregova", + "county": "Caras-Severin" + }, + { + "id": 4225, + "name": "Rusca", + "county": "Caras-Severin" + }, + { + "id": 4226, + "name": "Ticvaniu Mare", + "county": "Caras-Severin" + }, + { + "id": 4227, + "name": "Carnecea", + "county": "Caras-Severin" + }, + { + "id": 4228, + "name": "Secaseni", + "county": "Caras-Severin" + }, + { + "id": 4229, + "name": "Ticvaniu Mic", + "county": "Caras-Severin" + }, + { + "id": 4230, + "name": "Tarnova", + "county": "Caras-Severin" + }, + { + "id": 4231, + "name": "Bratova", + "county": "Caras-Severin" + }, + { + "id": 4232, + "name": "Toplet", + "county": "Caras-Severin" + }, + { + "id": 4233, + "name": "Barza", + "county": "Caras-Severin" + }, + { + "id": 4234, + "name": "Turnu Ruieni", + "county": "Caras-Severin" + }, + { + "id": 4235, + "name": "Borlova", + "county": "Caras-Severin" + }, + { + "id": 4236, + "name": "Cicleni", + "county": "Caras-Severin" + }, + { + "id": 4237, + "name": "Dalci", + "county": "Caras-Severin" + }, + { + "id": 4238, + "name": "Zervesti", + "county": "Caras-Severin" + }, + { + "id": 4239, + "name": "Zlagna", + "county": "Caras-Severin" + }, + { + "id": 4240, + "name": "Valiug", + "county": "Caras-Severin" + }, + { + "id": 4241, + "name": "Varadia", + "county": "Caras-Severin" + }, + { + "id": 4242, + "name": "Mercina", + "county": "Caras-Severin" + }, + { + "id": 4243, + "name": "Vermes", + "county": "Caras-Severin" + }, + { + "id": 4244, + "name": "Ersig", + "county": "Caras-Severin" + }, + { + "id": 4245, + "name": "Izgar", + "county": "Caras-Severin" + }, + { + "id": 4246, + "name": "Vrani", + "county": "Caras-Severin" + }, + { + "id": 4247, + "name": "Ciortea", + "county": "Caras-Severin" + }, + { + "id": 4248, + "name": "Iertof", + "county": "Caras-Severin" + }, + { + "id": 4249, + "name": "Zavoi", + "county": "Caras-Severin" + }, + { + "id": 4250, + "name": "Magura", + "county": "Caras-Severin" + }, + { + "id": 4251, + "name": "Maru", + "county": "Caras-Severin" + }, + { + "id": 4252, + "name": "Poiana Marului", + "county": "Caras-Severin" + }, + { + "id": 4253, + "name": "Valea Bistrei", + "county": "Caras-Severin" + }, + { + "id": 4254, + "name": "Voislova", + "county": "Caras-Severin" + }, + { + "id": 4255, + "name": "23 August", + "county": "Caras-Severin" + }, + { + "id": 4256, + "name": "Zorlentu Mare", + "county": "Caras-Severin" + }, + { + "id": 4257, + "name": "Zorlencior", + "county": "Caras-Severin" + }, + { + "id": 4258, + "name": "Cluj-Napoca", + "county": "Cluj" + }, + { + "id": 4259, + "name": "Dej", + "county": "Cluj" + }, + { + "id": 4260, + "name": "Ocna Dejului", + "county": "Cluj" + }, + { + "id": 4261, + "name": "Pestera", + "county": "Cluj" + }, + { + "id": 4262, + "name": "Pintic", + "county": "Cluj" + }, + { + "id": 4263, + "name": "Somcutu Mic", + "county": "Cluj" + }, + { + "id": 4264, + "name": "Cuzdrioara", + "county": "Cluj" + }, + { + "id": 4265, + "name": "Manasturel", + "county": "Cluj" + }, + { + "id": 4266, + "name": "Valea Garboului", + "county": "Cluj" + }, + { + "id": 4267, + "name": "Jichisu de Jos", + "county": "Cluj" + }, + { + "id": 4268, + "name": "Codor", + "county": "Cluj" + }, + { + "id": 4269, + "name": "Jichisu de Sus", + "county": "Cluj" + }, + { + "id": 4270, + "name": "Sigau", + "county": "Cluj" + }, + { + "id": 4271, + "name": "Tarpiu", + "county": "Cluj" + }, + { + "id": 4272, + "name": "Mica", + "county": "Cluj" + }, + { + "id": 4273, + "name": "Dambu Mare", + "county": "Cluj" + }, + { + "id": 4274, + "name": "Manastirea", + "county": "Cluj" + }, + { + "id": 4275, + "name": "Nires", + "county": "Cluj" + }, + { + "id": 4276, + "name": "Sanmarghita", + "county": "Cluj" + }, + { + "id": 4277, + "name": "Valea Ciresoii", + "county": "Cluj" + }, + { + "id": 4278, + "name": "Valea Luncii", + "county": "Cluj" + }, + { + "id": 4279, + "name": "Turda", + "county": "Cluj" + }, + { + "id": 4280, + "name": "Mihai Viteazu", + "county": "Cluj" + }, + { + "id": 4281, + "name": "Cheia", + "county": "Cluj" + }, + { + "id": 4282, + "name": "Cornesti", + "county": "Cluj" + }, + { + "id": 4283, + "name": "Sandulesti", + "county": "Cluj" + }, + { + "id": 4284, + "name": "Copaceni", + "county": "Cluj" + }, + { + "id": 4285, + "name": "Campia Turzii", + "county": "Cluj" + }, + { + "id": 4286, + "name": "Gherla", + "county": "Cluj" + }, + { + "id": 4287, + "name": "Baita", + "county": "Cluj" + }, + { + "id": 4288, + "name": "Hasdate", + "county": "Cluj" + }, + { + "id": 4289, + "name": "Silivas", + "county": "Cluj" + }, + { + "id": 4290, + "name": "Huedin", + "county": "Cluj" + }, + { + "id": 4291, + "name": "Bicalatu", + "county": "Cluj" + }, + { + "id": 4292, + "name": "Aghiresu", + "county": "Cluj" + }, + { + "id": 4293, + "name": "Aghiresu-Fabrici", + "county": "Cluj" + }, + { + "id": 4294, + "name": "Arghisu", + "county": "Cluj" + }, + { + "id": 4295, + "name": "Bagara", + "county": "Cluj" + }, + { + "id": 4296, + "name": "Dancu", + "county": "Cluj" + }, + { + "id": 4297, + "name": "Doroltu", + "county": "Cluj" + }, + { + "id": 4298, + "name": "Inucu", + "county": "Cluj" + }, + { + "id": 4299, + "name": "Leghia", + "county": "Cluj" + }, + { + "id": 4300, + "name": "Macau", + "county": "Cluj" + }, + { + "id": 4301, + "name": "Ticu", + "county": "Cluj" + }, + { + "id": 4302, + "name": "Ticu-Colonie", + "county": "Cluj" + }, + { + "id": 4303, + "name": "Aiton", + "county": "Cluj" + }, + { + "id": 4304, + "name": "Rediu", + "county": "Cluj" + }, + { + "id": 4305, + "name": "Alunis", + "county": "Cluj" + }, + { + "id": 4306, + "name": "Corneni", + "county": "Cluj" + }, + { + "id": 4307, + "name": "Ghirolt", + "county": "Cluj" + }, + { + "id": 4308, + "name": "Pruneni", + "county": "Cluj" + }, + { + "id": 4309, + "name": "Vale", + "county": "Cluj" + }, + { + "id": 4310, + "name": "Apahida", + "county": "Cluj" + }, + { + "id": 4311, + "name": "Bodrog", + "county": "Cluj" + }, + { + "id": 4312, + "name": "Campenesti", + "county": "Cluj" + }, + { + "id": 4313, + "name": "Corpadea", + "county": "Cluj" + }, + { + "id": 4314, + "name": "Dezmir", + "county": "Cluj" + }, + { + "id": 4315, + "name": "Pata", + "county": "Cluj" + }, + { + "id": 4316, + "name": "Sannicoara", + "county": "Cluj" + }, + { + "id": 4317, + "name": "Sub Coasta", + "county": "Cluj" + }, + { + "id": 4318, + "name": "Aschileu Mare", + "county": "Cluj" + }, + { + "id": 4319, + "name": "Aschileu Mic", + "county": "Cluj" + }, + { + "id": 4320, + "name": "Cristorel", + "county": "Cluj" + }, + { + "id": 4321, + "name": "Dorna", + "county": "Cluj" + }, + { + "id": 4322, + "name": "Fodora", + "county": "Cluj" + }, + { + "id": 4323, + "name": "Baciu", + "county": "Cluj" + }, + { + "id": 4324, + "name": "Corusu", + "county": "Cluj" + }, + { + "id": 4325, + "name": "Mera", + "county": "Cluj" + }, + { + "id": 4326, + "name": "Popesti", + "county": "Cluj" + }, + { + "id": 4327, + "name": "Radaia", + "county": "Cluj" + }, + { + "id": 4328, + "name": "Salistea Noua", + "county": "Cluj" + }, + { + "id": 4329, + "name": "Suceagu", + "county": "Cluj" + }, + { + "id": 4330, + "name": "Baisoara", + "county": "Cluj" + }, + { + "id": 4331, + "name": "Frasinet", + "county": "Cluj" + }, + { + "id": 4332, + "name": "Moara de Padure", + "county": "Cluj" + }, + { + "id": 4333, + "name": "Muntele Baisorii", + "county": "Cluj" + }, + { + "id": 4334, + "name": "Muntele Bocului", + "county": "Cluj" + }, + { + "id": 4335, + "name": "Muntele Cacovei", + "county": "Cluj" + }, + { + "id": 4336, + "name": "Muntele Filii", + "county": "Cluj" + }, + { + "id": 4337, + "name": "Muntele Sacelului", + "county": "Cluj" + }, + { + "id": 4338, + "name": "Sacel", + "county": "Cluj" + }, + { + "id": 4339, + "name": "Belis", + "county": "Cluj" + }, + { + "id": 4340, + "name": "Balcesti", + "county": "Cluj" + }, + { + "id": 4341, + "name": "Dealu Botii", + "county": "Cluj" + }, + { + "id": 4342, + "name": "Giurcuta de Jos", + "county": "Cluj" + }, + { + "id": 4343, + "name": "Giurcuta de Sus", + "county": "Cluj" + }, + { + "id": 4344, + "name": "Poiana Horea", + "county": "Cluj" + }, + { + "id": 4345, + "name": "Smida", + "county": "Cluj" + }, + { + "id": 4346, + "name": "Bobalna", + "county": "Cluj" + }, + { + "id": 4347, + "name": "Antas", + "county": "Cluj" + }, + { + "id": 4348, + "name": "Babdiu", + "county": "Cluj" + }, + { + "id": 4349, + "name": "Blidaresti", + "county": "Cluj" + }, + { + "id": 4350, + "name": "Cremenea", + "county": "Cluj" + }, + { + "id": 4351, + "name": "Maia", + "county": "Cluj" + }, + { + "id": 4352, + "name": "Osorhel", + "county": "Cluj" + }, + { + "id": 4353, + "name": "Pruni", + "county": "Cluj" + }, + { + "id": 4354, + "name": "Razbuneni", + "county": "Cluj" + }, + { + "id": 4355, + "name": "Suaras", + "county": "Cluj" + }, + { + "id": 4356, + "name": "Valcelele", + "county": "Cluj" + }, + { + "id": 4357, + "name": "Bontida", + "county": "Cluj" + }, + { + "id": 4358, + "name": "Coasta", + "county": "Cluj" + }, + { + "id": 4359, + "name": "Rascruci", + "county": "Cluj" + }, + { + "id": 4360, + "name": "Tauseni", + "county": "Cluj" + }, + { + "id": 4361, + "name": "Borsa", + "county": "Cluj" + }, + { + "id": 4362, + "name": "Borsa-Catun", + "county": "Cluj" + }, + { + "id": 4363, + "name": "Borsa-Crestaia", + "county": "Cluj" + }, + { + "id": 4364, + "name": "Ciumafaia", + "county": "Cluj" + }, + { + "id": 4365, + "name": "Giula", + "county": "Cluj" + }, + { + "id": 4366, + "name": "Buza", + "county": "Cluj" + }, + { + "id": 4367, + "name": "Rotunda", + "county": "Cluj" + }, + { + "id": 4368, + "name": "Caianu", + "county": "Cluj" + }, + { + "id": 4369, + "name": "Barai", + "county": "Cluj" + }, + { + "id": 4370, + "name": "Caianu Mic", + "county": "Cluj" + }, + { + "id": 4371, + "name": "Caianu-Vama", + "county": "Cluj" + }, + { + "id": 4372, + "name": "Vaida-Camaras", + "county": "Cluj" + }, + { + "id": 4373, + "name": "Valeni", + "county": "Cluj" + }, + { + "id": 4374, + "name": "Calarasi", + "county": "Cluj" + }, + { + "id": 4375, + "name": "Bogata", + "county": "Cluj" + }, + { + "id": 4376, + "name": "Calarasi-Gara", + "county": "Cluj" + }, + { + "id": 4377, + "name": "Calatele", + "county": "Cluj" + }, + { + "id": 4378, + "name": "Calata", + "county": "Cluj" + }, + { + "id": 4379, + "name": "Dealu Negru", + "county": "Cluj" + }, + { + "id": 4380, + "name": "Finciu", + "county": "Cluj" + }, + { + "id": 4381, + "name": "Valeni", + "county": "Cluj" + }, + { + "id": 4382, + "name": "Camarasu", + "county": "Cluj" + }, + { + "id": 4383, + "name": "Naoiu", + "county": "Cluj" + }, + { + "id": 4384, + "name": "Samboleni", + "county": "Cluj" + }, + { + "id": 4385, + "name": "Capusu Mare", + "county": "Cluj" + }, + { + "id": 4386, + "name": "Agarbiciu", + "county": "Cluj" + }, + { + "id": 4387, + "name": "Balcesti", + "county": "Cluj" + }, + { + "id": 4388, + "name": "Capusu Mic", + "county": "Cluj" + }, + { + "id": 4389, + "name": "Dangau Mare", + "county": "Cluj" + }, + { + "id": 4390, + "name": "Dangau Mic", + "county": "Cluj" + }, + { + "id": 4391, + "name": "Dumbrava", + "county": "Cluj" + }, + { + "id": 4392, + "name": "Paniceni", + "county": "Cluj" + }, + { + "id": 4393, + "name": "Straja", + "county": "Cluj" + }, + { + "id": 4394, + "name": "Caseiu", + "county": "Cluj" + }, + { + "id": 4395, + "name": "Comorata", + "county": "Cluj" + }, + { + "id": 4396, + "name": "Coplean", + "county": "Cluj" + }, + { + "id": 4397, + "name": "Custura", + "county": "Cluj" + }, + { + "id": 4398, + "name": "Garbau Dejului", + "county": "Cluj" + }, + { + "id": 4399, + "name": "Guga", + "county": "Cluj" + }, + { + "id": 4400, + "name": "Leurda", + "county": "Cluj" + }, + { + "id": 4401, + "name": "Rugasesti", + "county": "Cluj" + }, + { + "id": 4402, + "name": "Salatruc", + "county": "Cluj" + }, + { + "id": 4403, + "name": "Urisor", + "county": "Cluj" + }, + { + "id": 4404, + "name": "Catina", + "county": "Cluj" + }, + { + "id": 4405, + "name": "Copru", + "county": "Cluj" + }, + { + "id": 4406, + "name": "Feldioara", + "county": "Cluj" + }, + { + "id": 4407, + "name": "Hagau", + "county": "Cluj" + }, + { + "id": 4408, + "name": "Hodaie", + "county": "Cluj" + }, + { + "id": 4409, + "name": "Valea Calda", + "county": "Cluj" + }, + { + "id": 4410, + "name": "Ceanu Mare", + "county": "Cluj" + }, + { + "id": 4411, + "name": "Andici", + "county": "Cluj" + }, + { + "id": 4412, + "name": "Boian", + "county": "Cluj" + }, + { + "id": 4413, + "name": "Boldut", + "county": "Cluj" + }, + { + "id": 4414, + "name": "Ciurgau", + "county": "Cluj" + }, + { + "id": 4415, + "name": "Dosu Napului", + "county": "Cluj" + }, + { + "id": 4416, + "name": "Fanate", + "county": "Cluj" + }, + { + "id": 4417, + "name": "Hodai Boian", + "county": "Cluj" + }, + { + "id": 4418, + "name": "Iacobeni", + "county": "Cluj" + }, + { + "id": 4419, + "name": "Mortesti", + "county": "Cluj" + }, + { + "id": 4420, + "name": "Starcu", + "county": "Cluj" + }, + { + "id": 4421, + "name": "Strucut", + "county": "Cluj" + }, + { + "id": 4422, + "name": "Valea lui Cati", + "county": "Cluj" + }, + { + "id": 4423, + "name": "Chinteni", + "county": "Cluj" + }, + { + "id": 4424, + "name": "Deusu", + "county": "Cluj" + }, + { + "id": 4425, + "name": "Feiurdeni", + "county": "Cluj" + }, + { + "id": 4426, + "name": "Macicasu", + "county": "Cluj" + }, + { + "id": 4427, + "name": "Padureni", + "county": "Cluj" + }, + { + "id": 4428, + "name": "Satu Lung", + "county": "Cluj" + }, + { + "id": 4429, + "name": "Salistea Veche", + "county": "Cluj" + }, + { + "id": 4430, + "name": "Sanmartin", + "county": "Cluj" + }, + { + "id": 4431, + "name": "Vechea", + "county": "Cluj" + }, + { + "id": 4432, + "name": "Chiuiesti", + "county": "Cluj" + }, + { + "id": 4433, + "name": "Dosu Bricii", + "county": "Cluj" + }, + { + "id": 4434, + "name": "Huta", + "county": "Cluj" + }, + { + "id": 4435, + "name": "Magoaja", + "county": "Cluj" + }, + { + "id": 4436, + "name": "Strambu", + "county": "Cluj" + }, + { + "id": 4437, + "name": "Valea Caseielului", + "county": "Cluj" + }, + { + "id": 4438, + "name": "Valea lui Opris", + "county": "Cluj" + }, + { + "id": 4439, + "name": "Ciucea", + "county": "Cluj" + }, + { + "id": 4440, + "name": "Bucea", + "county": "Cluj" + }, + { + "id": 4441, + "name": "Negreni", + "county": "Cluj" + }, + { + "id": 4442, + "name": "Prelucele", + "county": "Cluj" + }, + { + "id": 4443, + "name": "Vanatori", + "county": "Cluj" + }, + { + "id": 4444, + "name": "Ciurila", + "county": "Cluj" + }, + { + "id": 4445, + "name": "Filea de Jos", + "county": "Cluj" + }, + { + "id": 4446, + "name": "Filea de Sus", + "county": "Cluj" + }, + { + "id": 4447, + "name": "Padureni", + "county": "Cluj" + }, + { + "id": 4448, + "name": "Prunis", + "county": "Cluj" + }, + { + "id": 4449, + "name": "Salicea", + "county": "Cluj" + }, + { + "id": 4450, + "name": "Saliste", + "county": "Cluj" + }, + { + "id": 4451, + "name": "Sutu", + "county": "Cluj" + }, + { + "id": 4452, + "name": "Catcau", + "county": "Cluj" + }, + { + "id": 4453, + "name": "Muncel", + "county": "Cluj" + }, + { + "id": 4454, + "name": "Salisca", + "county": "Cluj" + }, + { + "id": 4455, + "name": "Cojocna", + "county": "Cluj" + }, + { + "id": 4456, + "name": "Boj-Catun", + "county": "Cluj" + }, + { + "id": 4457, + "name": "Boju", + "county": "Cluj" + }, + { + "id": 4458, + "name": "Cara", + "county": "Cluj" + }, + { + "id": 4459, + "name": "Huci", + "county": "Cluj" + }, + { + "id": 4460, + "name": "Iuriu de Campie", + "county": "Cluj" + }, + { + "id": 4461, + "name": "Moristi", + "county": "Cluj" + }, + { + "id": 4462, + "name": "Straja", + "county": "Cluj" + }, + { + "id": 4463, + "name": "Cornesti", + "county": "Cluj" + }, + { + "id": 4464, + "name": "Barlea", + "county": "Cluj" + }, + { + "id": 4465, + "name": "Igritia", + "county": "Cluj" + }, + { + "id": 4466, + "name": "Lujerdiu", + "county": "Cluj" + }, + { + "id": 4467, + "name": "Morau", + "county": "Cluj" + }, + { + "id": 4468, + "name": "Stoiana", + "county": "Cluj" + }, + { + "id": 4469, + "name": "Tiocu de Jos", + "county": "Cluj" + }, + { + "id": 4470, + "name": "Tiocu de Sus", + "county": "Cluj" + }, + { + "id": 4471, + "name": "Tioltiur", + "county": "Cluj" + }, + { + "id": 4472, + "name": "Dabaca", + "county": "Cluj" + }, + { + "id": 4473, + "name": "Luna de Jos", + "county": "Cluj" + }, + { + "id": 4474, + "name": "Paglisa", + "county": "Cluj" + }, + { + "id": 4475, + "name": "Feleacu", + "county": "Cluj" + }, + { + "id": 4476, + "name": "Casele Micesti", + "county": "Cluj" + }, + { + "id": 4477, + "name": "Gheorghieni", + "county": "Cluj" + }, + { + "id": 4478, + "name": "Saradis", + "county": "Cluj" + }, + { + "id": 4479, + "name": "Valcele", + "county": "Cluj" + }, + { + "id": 4480, + "name": "Fizesu Gherlii", + "county": "Cluj" + }, + { + "id": 4481, + "name": "Bont", + "county": "Cluj" + }, + { + "id": 4482, + "name": "Lunca Bontului", + "county": "Cluj" + }, + { + "id": 4483, + "name": "Nicula", + "county": "Cluj" + }, + { + "id": 4484, + "name": "Sacalaia", + "county": "Cluj" + }, + { + "id": 4485, + "name": "Floresti", + "county": "Cluj" + }, + { + "id": 4486, + "name": "Luna de Sus", + "county": "Cluj" + }, + { + "id": 4487, + "name": "Tauti", + "county": "Cluj" + }, + { + "id": 4488, + "name": "Frata", + "county": "Cluj" + }, + { + "id": 4489, + "name": "Berchiesu", + "county": "Cluj" + }, + { + "id": 4490, + "name": "Oas", + "county": "Cluj" + }, + { + "id": 4491, + "name": "Olariu", + "county": "Cluj" + }, + { + "id": 4492, + "name": "Padurea Iacobeni", + "county": "Cluj" + }, + { + "id": 4493, + "name": "Poiana Fratii", + "county": "Cluj" + }, + { + "id": 4494, + "name": "Razoare", + "county": "Cluj" + }, + { + "id": 4495, + "name": "Soporu de Campie", + "county": "Cluj" + }, + { + "id": 4496, + "name": "Geaca", + "county": "Cluj" + }, + { + "id": 4497, + "name": "Chiris", + "county": "Cluj" + }, + { + "id": 4498, + "name": "Lacu", + "county": "Cluj" + }, + { + "id": 4499, + "name": "Legii", + "county": "Cluj" + }, + { + "id": 4500, + "name": "Puini", + "county": "Cluj" + }, + { + "id": 4501, + "name": "Sucutard", + "county": "Cluj" + }, + { + "id": 4502, + "name": "Gilau", + "county": "Cluj" + }, + { + "id": 4503, + "name": "Somesu Cald", + "county": "Cluj" + }, + { + "id": 4504, + "name": "Somesu Rece", + "county": "Cluj" + }, + { + "id": 4505, + "name": "Garbau", + "county": "Cluj" + }, + { + "id": 4506, + "name": "Cornesti", + "county": "Cluj" + }, + { + "id": 4507, + "name": "Nadaselu", + "county": "Cluj" + }, + { + "id": 4508, + "name": "Vistea", + "county": "Cluj" + }, + { + "id": 4509, + "name": "Turea", + "county": "Cluj" + }, + { + "id": 4510, + "name": "Iara", + "county": "Cluj" + }, + { + "id": 4511, + "name": "Agris", + "county": "Cluj" + }, + { + "id": 4512, + "name": "Borzesti", + "county": "Cluj" + }, + { + "id": 4513, + "name": "Buru", + "county": "Cluj" + }, + { + "id": 4514, + "name": "Cacova Ierii", + "county": "Cluj" + }, + { + "id": 4515, + "name": "Fagetu Ierii", + "county": "Cluj" + }, + { + "id": 4516, + "name": "Lungesti", + "county": "Cluj" + }, + { + "id": 4517, + "name": "Masca", + "county": "Cluj" + }, + { + "id": 4518, + "name": "Magura Ierii", + "county": "Cluj" + }, + { + "id": 4519, + "name": "Ocolisel", + "county": "Cluj" + }, + { + "id": 4520, + "name": "Surduc", + "county": "Cluj" + }, + { + "id": 4521, + "name": "Valea Agrisului", + "county": "Cluj" + }, + { + "id": 4522, + "name": "Valea Vadului", + "county": "Cluj" + }, + { + "id": 4523, + "name": "Iclod", + "county": "Cluj" + }, + { + "id": 4524, + "name": "Fundatura", + "county": "Cluj" + }, + { + "id": 4525, + "name": "Iclozel", + "county": "Cluj" + }, + { + "id": 4526, + "name": "Livada", + "county": "Cluj" + }, + { + "id": 4527, + "name": "Orman", + "county": "Cluj" + }, + { + "id": 4528, + "name": "Izvoru Crisului", + "county": "Cluj" + }, + { + "id": 4529, + "name": "Nadasu", + "county": "Cluj" + }, + { + "id": 4530, + "name": "Nearsova", + "county": "Cluj" + }, + { + "id": 4531, + "name": "Saula", + "county": "Cluj" + }, + { + "id": 4532, + "name": "Jucu de Sus", + "county": "Cluj" + }, + { + "id": 4533, + "name": "Gadalin", + "county": "Cluj" + }, + { + "id": 4534, + "name": "Juc-Herghelie", + "county": "Cluj" + }, + { + "id": 4535, + "name": "Jucu de Mijloc", + "county": "Cluj" + }, + { + "id": 4536, + "name": "Visea", + "county": "Cluj" + }, + { + "id": 4537, + "name": "Luna", + "county": "Cluj" + }, + { + "id": 4538, + "name": "Gligoresti", + "county": "Cluj" + }, + { + "id": 4539, + "name": "Luncani", + "county": "Cluj" + }, + { + "id": 4540, + "name": "Maguri-Racatau", + "county": "Cluj" + }, + { + "id": 4541, + "name": "Maguri", + "county": "Cluj" + }, + { + "id": 4542, + "name": "Muntele Rece", + "county": "Cluj" + }, + { + "id": 4543, + "name": "Manastireni", + "county": "Cluj" + }, + { + "id": 4544, + "name": "Ardeova", + "county": "Cluj" + }, + { + "id": 4545, + "name": "Bedeciu", + "county": "Cluj" + }, + { + "id": 4546, + "name": "Bica", + "county": "Cluj" + }, + { + "id": 4547, + "name": "Dretea", + "county": "Cluj" + }, + { + "id": 4548, + "name": "Manasturu Romanesc", + "county": "Cluj" + }, + { + "id": 4549, + "name": "Margau", + "county": "Cluj" + }, + { + "id": 4550, + "name": "Bociu", + "county": "Cluj" + }, + { + "id": 4551, + "name": "Buteni", + "county": "Cluj" + }, + { + "id": 4552, + "name": "Ciuleni", + "county": "Cluj" + }, + { + "id": 4553, + "name": "Rachitele", + "county": "Cluj" + }, + { + "id": 4554, + "name": "Scrind-Frasinet", + "county": "Cluj" + }, + { + "id": 4555, + "name": "Marisel", + "county": "Cluj" + }, + { + "id": 4556, + "name": "Mintiu Gherlii", + "county": "Cluj" + }, + { + "id": 4557, + "name": "Bunesti", + "county": "Cluj" + }, + { + "id": 4558, + "name": "Nima", + "county": "Cluj" + }, + { + "id": 4559, + "name": "Padurenii", + "county": "Cluj" + }, + { + "id": 4560, + "name": "Petresti", + "county": "Cluj" + }, + { + "id": 4561, + "name": "Salatiu", + "county": "Cluj" + }, + { + "id": 4562, + "name": "Mociu", + "county": "Cluj" + }, + { + "id": 4563, + "name": "Boteni", + "county": "Cluj" + }, + { + "id": 4564, + "name": "Chesau", + "county": "Cluj" + }, + { + "id": 4565, + "name": "Criseni", + "county": "Cluj" + }, + { + "id": 4566, + "name": "Falca", + "county": "Cluj" + }, + { + "id": 4567, + "name": "Ghirisu Roman", + "county": "Cluj" + }, + { + "id": 4568, + "name": "Rosieni", + "county": "Cluj" + }, + { + "id": 4569, + "name": "Turmasi", + "county": "Cluj" + }, + { + "id": 4570, + "name": "Zorenii de Vale", + "county": "Cluj" + }, + { + "id": 4571, + "name": "Moldovenesti", + "county": "Cluj" + }, + { + "id": 4572, + "name": "Badeni", + "county": "Cluj" + }, + { + "id": 4573, + "name": "Pietroasa", + "county": "Cluj" + }, + { + "id": 4574, + "name": "Plaiesti", + "county": "Cluj" + }, + { + "id": 4575, + "name": "Podeni", + "county": "Cluj" + }, + { + "id": 4576, + "name": "Stejeris", + "county": "Cluj" + }, + { + "id": 4577, + "name": "Palatca", + "county": "Cluj" + }, + { + "id": 4578, + "name": "Bagaciu", + "county": "Cluj" + }, + { + "id": 4579, + "name": "Muresenii de Campie", + "county": "Cluj" + }, + { + "id": 4580, + "name": "Petea", + "county": "Cluj" + }, + { + "id": 4581, + "name": "Sava", + "county": "Cluj" + }, + { + "id": 4582, + "name": "Panticeu", + "county": "Cluj" + }, + { + "id": 4583, + "name": "Catalina", + "county": "Cluj" + }, + { + "id": 4584, + "name": "Cublesu Somesan", + "county": "Cluj" + }, + { + "id": 4585, + "name": "Darja", + "county": "Cluj" + }, + { + "id": 4586, + "name": "Sarata", + "county": "Cluj" + }, + { + "id": 4587, + "name": "Petrestii de Jos", + "county": "Cluj" + }, + { + "id": 4588, + "name": "Craesti", + "county": "Cluj" + }, + { + "id": 4589, + "name": "Deleni", + "county": "Cluj" + }, + { + "id": 4590, + "name": "Livada", + "county": "Cluj" + }, + { + "id": 4591, + "name": "Petrestii de Mijloc", + "county": "Cluj" + }, + { + "id": 4592, + "name": "Petrestii de Sus", + "county": "Cluj" + }, + { + "id": 4593, + "name": "Plaiuri", + "county": "Cluj" + }, + { + "id": 4594, + "name": "Ploscos", + "county": "Cluj" + }, + { + "id": 4595, + "name": "Crairat", + "county": "Cluj" + }, + { + "id": 4596, + "name": "Lobodas", + "county": "Cluj" + }, + { + "id": 4597, + "name": "Valea Florilor", + "county": "Cluj" + }, + { + "id": 4598, + "name": "Poieni", + "county": "Cluj" + }, + { + "id": 4599, + "name": "Bologa", + "county": "Cluj" + }, + { + "id": 4600, + "name": "Cerbesti", + "county": "Cluj" + }, + { + "id": 4601, + "name": "Hodisu", + "county": "Cluj" + }, + { + "id": 4602, + "name": "Lunca Visagului", + "county": "Cluj" + }, + { + "id": 4603, + "name": "Morlaca", + "county": "Cluj" + }, + { + "id": 4604, + "name": "Tranisu", + "county": "Cluj" + }, + { + "id": 4605, + "name": "Valea Draganului", + "county": "Cluj" + }, + { + "id": 4606, + "name": "Recea-Cristur", + "county": "Cluj" + }, + { + "id": 4607, + "name": "Caprioara", + "county": "Cluj" + }, + { + "id": 4608, + "name": "Ciubanca", + "county": "Cluj" + }, + { + "id": 4609, + "name": "Ciubancuta", + "county": "Cluj" + }, + { + "id": 4610, + "name": "Elciu", + "county": "Cluj" + }, + { + "id": 4611, + "name": "Escu", + "county": "Cluj" + }, + { + "id": 4612, + "name": "Jurca", + "county": "Cluj" + }, + { + "id": 4613, + "name": "Osoi", + "county": "Cluj" + }, + { + "id": 4614, + "name": "Pustuta", + "county": "Cluj" + }, + { + "id": 4615, + "name": "Risca", + "county": "Cluj" + }, + { + "id": 4616, + "name": "Dealu Mare", + "county": "Cluj" + }, + { + "id": 4617, + "name": "Lapustesti", + "county": "Cluj" + }, + { + "id": 4618, + "name": "Marcesti", + "county": "Cluj" + }, + { + "id": 4619, + "name": "Sacuieu", + "county": "Cluj" + }, + { + "id": 4620, + "name": "Rogojel", + "county": "Cluj" + }, + { + "id": 4621, + "name": "Visagu", + "county": "Cluj" + }, + { + "id": 4622, + "name": "Savadisla", + "county": "Cluj" + }, + { + "id": 4623, + "name": "Finisel", + "county": "Cluj" + }, + { + "id": 4624, + "name": "Hasdate", + "county": "Cluj" + }, + { + "id": 4625, + "name": "Lita", + "county": "Cluj" + }, + { + "id": 4626, + "name": "Liteni", + "county": "Cluj" + }, + { + "id": 4627, + "name": "Stolna", + "county": "Cluj" + }, + { + "id": 4628, + "name": "Valisoara", + "county": "Cluj" + }, + { + "id": 4629, + "name": "Vlaha", + "county": "Cluj" + }, + { + "id": 4630, + "name": "Sic", + "county": "Cluj" + }, + { + "id": 4631, + "name": "Sancraiu", + "county": "Cluj" + }, + { + "id": 4632, + "name": "Alunisu", + "county": "Cluj" + }, + { + "id": 4633, + "name": "Braisoru", + "county": "Cluj" + }, + { + "id": 4634, + "name": "Domosu", + "county": "Cluj" + }, + { + "id": 4635, + "name": "Horlacea", + "county": "Cluj" + }, + { + "id": 4636, + "name": "Sanmartin", + "county": "Cluj" + }, + { + "id": 4637, + "name": "Ceaba", + "county": "Cluj" + }, + { + "id": 4638, + "name": "Cutca", + "county": "Cluj" + }, + { + "id": 4639, + "name": "Diviciorii Mari", + "county": "Cluj" + }, + { + "id": 4640, + "name": "Diviciorii Mici", + "county": "Cluj" + }, + { + "id": 4641, + "name": "Mahal", + "county": "Cluj" + }, + { + "id": 4642, + "name": "Samboieni", + "county": "Cluj" + }, + { + "id": 4643, + "name": "Targusor", + "county": "Cluj" + }, + { + "id": 4644, + "name": "Sanpaul", + "county": "Cluj" + }, + { + "id": 4645, + "name": "Berindu", + "county": "Cluj" + }, + { + "id": 4646, + "name": "Mihaiesti", + "county": "Cluj" + }, + { + "id": 4647, + "name": "Sumurducu", + "county": "Cluj" + }, + { + "id": 4648, + "name": "Sardu", + "county": "Cluj" + }, + { + "id": 4649, + "name": "Topa Mica", + "county": "Cluj" + }, + { + "id": 4650, + "name": "Suatu", + "county": "Cluj" + }, + { + "id": 4651, + "name": "Aruncuta", + "county": "Cluj" + }, + { + "id": 4652, + "name": "Damburile", + "county": "Cluj" + }, + { + "id": 4653, + "name": "Tritenii de Jos", + "county": "Cluj" + }, + { + "id": 4654, + "name": "Clapa", + "county": "Cluj" + }, + { + "id": 4655, + "name": "Colonia", + "county": "Cluj" + }, + { + "id": 4656, + "name": "Padureni", + "county": "Cluj" + }, + { + "id": 4657, + "name": "Tritenii de Sus", + "county": "Cluj" + }, + { + "id": 4658, + "name": "Tritenii-Hotar", + "county": "Cluj" + }, + { + "id": 4659, + "name": "Tureni", + "county": "Cluj" + }, + { + "id": 4660, + "name": "Ceanu Mic", + "county": "Cluj" + }, + { + "id": 4661, + "name": "Comsesti", + "county": "Cluj" + }, + { + "id": 4662, + "name": "Martinesti", + "county": "Cluj" + }, + { + "id": 4663, + "name": "Micesti", + "county": "Cluj" + }, + { + "id": 4664, + "name": "Taga", + "county": "Cluj" + }, + { + "id": 4665, + "name": "Nasal", + "county": "Cluj" + }, + { + "id": 4666, + "name": "Santejude", + "county": "Cluj" + }, + { + "id": 4667, + "name": "Santejude Vale", + "county": "Cluj" + }, + { + "id": 4668, + "name": "Santioana", + "county": "Cluj" + }, + { + "id": 4669, + "name": "Unguras", + "county": "Cluj" + }, + { + "id": 4670, + "name": "Batin", + "county": "Cluj" + }, + { + "id": 4671, + "name": "Darot", + "county": "Cluj" + }, + { + "id": 4672, + "name": "Sicfa", + "county": "Cluj" + }, + { + "id": 4673, + "name": "Valea Ungurasului", + "county": "Cluj" + }, + { + "id": 4674, + "name": "Vad", + "county": "Cluj" + }, + { + "id": 4675, + "name": "Bogata de Jos", + "county": "Cluj" + }, + { + "id": 4676, + "name": "Bogata de Sus", + "county": "Cluj" + }, + { + "id": 4677, + "name": "Calna", + "county": "Cluj" + }, + { + "id": 4678, + "name": "Cetan", + "county": "Cluj" + }, + { + "id": 4679, + "name": "Curtuiusu Dejului", + "county": "Cluj" + }, + { + "id": 4680, + "name": "Valea Grosilor", + "county": "Cluj" + }, + { + "id": 4681, + "name": "Valea Ierii", + "county": "Cluj" + }, + { + "id": 4682, + "name": "Cerc", + "county": "Cluj" + }, + { + "id": 4683, + "name": "Plopi", + "county": "Cluj" + }, + { + "id": 4684, + "name": "Viisoara", + "county": "Cluj" + }, + { + "id": 4685, + "name": "Urca", + "county": "Cluj" + }, + { + "id": 4686, + "name": "Vultureni", + "county": "Cluj" + }, + { + "id": 4687, + "name": "Babutiu", + "county": "Cluj" + }, + { + "id": 4688, + "name": "Badesti", + "county": "Cluj" + }, + { + "id": 4689, + "name": "Chidea", + "county": "Cluj" + }, + { + "id": 4690, + "name": "Faureni", + "county": "Cluj" + }, + { + "id": 4691, + "name": "Soimeni", + "county": "Cluj" + }, + { + "id": 4692, + "name": "Constanta", + "county": "Constanta" + }, + { + "id": 4693, + "name": "Mamaia", + "county": "Constanta" + }, + { + "id": 4694, + "name": "Palazu Mare", + "county": "Constanta" + }, + { + "id": 4695, + "name": "Eforie Sud", + "county": "Constanta" + }, + { + "id": 4696, + "name": "Eforie Nord", + "county": "Constanta" + }, + { + "id": 4697, + "name": "Mangalia", + "county": "Constanta" + }, + { + "id": 4698, + "name": "Navodari", + "county": "Constanta" + }, + { + "id": 4699, + "name": "Mamaia-Sat", + "county": "Constanta" + }, + { + "id": 4700, + "name": "Techirghiol", + "county": "Constanta" + }, + { + "id": 4701, + "name": "Sanatoriul Agigea", + "county": "Constanta" + }, + { + "id": 4702, + "name": "Statiunea Zoologica Marina Agigea", + "county": "Constanta" + }, + { + "id": 4703, + "name": "Lazu", + "county": "Constanta" + }, + { + "id": 4704, + "name": "23 August", + "county": "Constanta" + }, + { + "id": 4705, + "name": "Dulcesti", + "county": "Constanta" + }, + { + "id": 4706, + "name": "Mosneni", + "county": "Constanta" + }, + { + "id": 4707, + "name": "Limanu", + "county": "Constanta" + }, + { + "id": 4708, + "name": "Hagieni", + "county": "Constanta" + }, + { + "id": 4709, + "name": "2 Mai", + "county": "Constanta" + }, + { + "id": 4710, + "name": "Vama Veche", + "county": "Constanta" + }, + { + "id": 4711, + "name": "Ovidiu", + "county": "Constanta" + }, + { + "id": 4712, + "name": "Lumina", + "county": "Constanta" + }, + { + "id": 4713, + "name": "Poiana", + "county": "Constanta" + }, + { + "id": 4714, + "name": "Tuzla", + "county": "Constanta" + }, + { + "id": 4715, + "name": "Costinesti", + "county": "Constanta" + }, + { + "id": 4716, + "name": "Schitu", + "county": "Constanta" + }, + { + "id": 4717, + "name": "Cernavoda", + "county": "Constanta" + }, + { + "id": 4718, + "name": "Harsova", + "county": "Constanta" + }, + { + "id": 4719, + "name": "Vadu Oii", + "county": "Constanta" + }, + { + "id": 4720, + "name": "Medgidia", + "county": "Constanta" + }, + { + "id": 4721, + "name": "Remus Opreanu", + "county": "Constanta" + }, + { + "id": 4722, + "name": "Valea Dacilor", + "county": "Constanta" + }, + { + "id": 4723, + "name": "Adamclisi", + "county": "Constanta" + }, + { + "id": 4724, + "name": "Abrud", + "county": "Constanta" + }, + { + "id": 4725, + "name": "Hateg", + "county": "Constanta" + }, + { + "id": 4726, + "name": "Urluia", + "county": "Constanta" + }, + { + "id": 4727, + "name": "Zorile", + "county": "Constanta" + }, + { + "id": 4728, + "name": "Albesti", + "county": "Constanta" + }, + { + "id": 4729, + "name": "Arsa", + "county": "Constanta" + }, + { + "id": 4730, + "name": "Coroana", + "county": "Constanta" + }, + { + "id": 4731, + "name": "Cotu Vaii", + "county": "Constanta" + }, + { + "id": 4732, + "name": "Vartop", + "county": "Constanta" + }, + { + "id": 4733, + "name": "Aliman", + "county": "Constanta" + }, + { + "id": 4734, + "name": "Dunareni", + "county": "Constanta" + }, + { + "id": 4735, + "name": "Floriile", + "county": "Constanta" + }, + { + "id": 4736, + "name": "Vlahii", + "county": "Constanta" + }, + { + "id": 4737, + "name": "Baneasa", + "county": "Constanta" + }, + { + "id": 4738, + "name": "Faurei", + "county": "Constanta" + }, + { + "id": 4739, + "name": "Negureni", + "county": "Constanta" + }, + { + "id": 4740, + "name": "Tudor Vladimirescu", + "county": "Constanta" + }, + { + "id": 4741, + "name": "Castelu", + "county": "Constanta" + }, + { + "id": 4742, + "name": "Cuza Voda", + "county": "Constanta" + }, + { + "id": 4743, + "name": "Nisipari", + "county": "Constanta" + }, + { + "id": 4744, + "name": "Cerchezu", + "county": "Constanta" + }, + { + "id": 4745, + "name": "Cascioarele", + "county": "Constanta" + }, + { + "id": 4746, + "name": "Magura", + "county": "Constanta" + }, + { + "id": 4747, + "name": "Viroaga", + "county": "Constanta" + }, + { + "id": 4748, + "name": "Chirnogeni", + "county": "Constanta" + }, + { + "id": 4749, + "name": "Credinta", + "county": "Constanta" + }, + { + "id": 4750, + "name": "Plopeni", + "county": "Constanta" + }, + { + "id": 4751, + "name": "Ciobanu", + "county": "Constanta" + }, + { + "id": 4752, + "name": "Miorita", + "county": "Constanta" + }, + { + "id": 4753, + "name": "Ciocarlia", + "county": "Constanta" + }, + { + "id": 4754, + "name": "Ciocarlia de Sus", + "county": "Constanta" + }, + { + "id": 4755, + "name": "Cobadin", + "county": "Constanta" + }, + { + "id": 4756, + "name": "Conacu", + "county": "Constanta" + }, + { + "id": 4757, + "name": "Curcani", + "county": "Constanta" + }, + { + "id": 4758, + "name": "Negresti", + "county": "Constanta" + }, + { + "id": 4759, + "name": "Viisoara", + "county": "Constanta" + }, + { + "id": 4760, + "name": "Cogealac", + "county": "Constanta" + }, + { + "id": 4761, + "name": "Fantanele", + "county": "Constanta" + }, + { + "id": 4762, + "name": "Gura Dobrogei", + "county": "Constanta" + }, + { + "id": 4763, + "name": "Ramnicu de Jos", + "county": "Constanta" + }, + { + "id": 4764, + "name": "Ramnicu de Sus", + "county": "Constanta" + }, + { + "id": 4765, + "name": "Tariverde", + "county": "Constanta" + }, + { + "id": 4766, + "name": "Comana", + "county": "Constanta" + }, + { + "id": 4767, + "name": "Casicea", + "county": "Constanta" + }, + { + "id": 4768, + "name": "General Scarisoreanu", + "county": "Constanta" + }, + { + "id": 4769, + "name": "Pelinu", + "county": "Constanta" + }, + { + "id": 4770, + "name": "Tataru", + "county": "Constanta" + }, + { + "id": 4771, + "name": "Corbu", + "county": "Constanta" + }, + { + "id": 4772, + "name": "Luminita", + "county": "Constanta" + }, + { + "id": 4773, + "name": "Vadu", + "county": "Constanta" + }, + { + "id": 4774, + "name": "Crucea", + "county": "Constanta" + }, + { + "id": 4775, + "name": "Baltagesti", + "county": "Constanta" + }, + { + "id": 4776, + "name": "Crisan", + "county": "Constanta" + }, + { + "id": 4777, + "name": "Galbiori", + "county": "Constanta" + }, + { + "id": 4778, + "name": "Stupina", + "county": "Constanta" + }, + { + "id": 4779, + "name": "Siriu", + "county": "Constanta" + }, + { + "id": 4780, + "name": "Cumpana", + "county": "Constanta" + }, + { + "id": 4781, + "name": "Baraganu", + "county": "Constanta" + }, + { + "id": 4782, + "name": "Potarnichea", + "county": "Constanta" + }, + { + "id": 4783, + "name": "Straja", + "county": "Constanta" + }, + { + "id": 4784, + "name": "Deleni", + "county": "Constanta" + }, + { + "id": 4785, + "name": "Petrosani", + "county": "Constanta" + }, + { + "id": 4786, + "name": "Pietreni", + "county": "Constanta" + }, + { + "id": 4787, + "name": "Sipotele", + "county": "Constanta" + }, + { + "id": 4788, + "name": "Dobromir", + "county": "Constanta" + }, + { + "id": 4789, + "name": "Cetatea", + "county": "Constanta" + }, + { + "id": 4790, + "name": "Dobromiru din Deal", + "county": "Constanta" + }, + { + "id": 4791, + "name": "Lespezi", + "county": "Constanta" + }, + { + "id": 4792, + "name": "Padureni", + "county": "Constanta" + }, + { + "id": 4793, + "name": "Valeni", + "county": "Constanta" + }, + { + "id": 4794, + "name": "Garliciu", + "county": "Constanta" + }, + { + "id": 4795, + "name": "Horia", + "county": "Constanta" + }, + { + "id": 4796, + "name": "Closca", + "county": "Constanta" + }, + { + "id": 4797, + "name": "Ghindaresti", + "county": "Constanta" + }, + { + "id": 4798, + "name": "Tichilesti", + "county": "Constanta" + }, + { + "id": 4799, + "name": "Independenta", + "county": "Constanta" + }, + { + "id": 4800, + "name": "Dumbraveni", + "county": "Constanta" + }, + { + "id": 4801, + "name": "Fantana Mare", + "county": "Constanta" + }, + { + "id": 4802, + "name": "Furnica", + "county": "Constanta" + }, + { + "id": 4803, + "name": "Movila Verde", + "county": "Constanta" + }, + { + "id": 4804, + "name": "Olteni", + "county": "Constanta" + }, + { + "id": 4805, + "name": "Tufani", + "county": "Constanta" + }, + { + "id": 4806, + "name": "Ion Corvin", + "county": "Constanta" + }, + { + "id": 4807, + "name": "Brebeni", + "county": "Constanta" + }, + { + "id": 4808, + "name": "Crangu", + "county": "Constanta" + }, + { + "id": 4809, + "name": "Raristea", + "county": "Constanta" + }, + { + "id": 4810, + "name": "Viile", + "county": "Constanta" + }, + { + "id": 4811, + "name": "Istria", + "county": "Constanta" + }, + { + "id": 4812, + "name": "Nuntasi", + "county": "Constanta" + }, + { + "id": 4813, + "name": "Lipnita", + "county": "Constanta" + }, + { + "id": 4814, + "name": "Canlia", + "county": "Constanta" + }, + { + "id": 4815, + "name": "Carvan", + "county": "Constanta" + }, + { + "id": 4816, + "name": "Coslugea", + "county": "Constanta" + }, + { + "id": 4817, + "name": "Cuiugiuc", + "county": "Constanta" + }, + { + "id": 4818, + "name": "Goruni", + "county": "Constanta" + }, + { + "id": 4819, + "name": "Izvoarele", + "county": "Constanta" + }, + { + "id": 4820, + "name": "Mereni", + "county": "Constanta" + }, + { + "id": 4821, + "name": "Ciobanita", + "county": "Constanta" + }, + { + "id": 4822, + "name": "Lanurile", + "county": "Constanta" + }, + { + "id": 4823, + "name": "Miristea", + "county": "Constanta" + }, + { + "id": 4824, + "name": "Osmancea", + "county": "Constanta" + }, + { + "id": 4825, + "name": "Mihail Kogalniceanu", + "county": "Constanta" + }, + { + "id": 4826, + "name": "Oituz", + "county": "Constanta" + }, + { + "id": 4827, + "name": "Palazu Mic", + "county": "Constanta" + }, + { + "id": 4828, + "name": "Piatra", + "county": "Constanta" + }, + { + "id": 4829, + "name": "Sibioara", + "county": "Constanta" + }, + { + "id": 4830, + "name": "Mihai Viteazu", + "county": "Constanta" + }, + { + "id": 4831, + "name": "Sinoie", + "county": "Constanta" + }, + { + "id": 4832, + "name": "Mircea Voda", + "county": "Constanta" + }, + { + "id": 4833, + "name": "Faclia", + "county": "Constanta" + }, + { + "id": 4834, + "name": "Gherghina", + "county": "Constanta" + }, + { + "id": 4835, + "name": "Saligny", + "county": "Constanta" + }, + { + "id": 4836, + "name": "Satu Nou", + "county": "Constanta" + }, + { + "id": 4837, + "name": "Stefan cel Mare", + "county": "Constanta" + }, + { + "id": 4838, + "name": "Tibrinu", + "county": "Constanta" + }, + { + "id": 4839, + "name": "Murfatlar", + "county": "Constanta" + }, + { + "id": 4840, + "name": "Siminoc", + "county": "Constanta" + }, + { + "id": 4841, + "name": "Negru Voda", + "county": "Constanta" + }, + { + "id": 4842, + "name": "Darabani", + "county": "Constanta" + }, + { + "id": 4843, + "name": "Graniceru", + "county": "Constanta" + }, + { + "id": 4844, + "name": "Valcelele", + "county": "Constanta" + }, + { + "id": 4845, + "name": "Nicolae Balcescu", + "county": "Constanta" + }, + { + "id": 4846, + "name": "Dorobantu", + "county": "Constanta" + }, + { + "id": 4847, + "name": "Dropia", + "county": "Constanta" + }, + { + "id": 4848, + "name": "Oltina", + "county": "Constanta" + }, + { + "id": 4849, + "name": "Razoarele", + "county": "Constanta" + }, + { + "id": 4850, + "name": "Satu Nou", + "county": "Constanta" + }, + { + "id": 4851, + "name": "Strunga", + "county": "Constanta" + }, + { + "id": 4852, + "name": "Ostrov", + "county": "Constanta" + }, + { + "id": 4853, + "name": "Almalau", + "county": "Constanta" + }, + { + "id": 4854, + "name": "Bugeac", + "county": "Constanta" + }, + { + "id": 4855, + "name": "Esechioi", + "county": "Constanta" + }, + { + "id": 4856, + "name": "Galita", + "county": "Constanta" + }, + { + "id": 4857, + "name": "Garlita", + "county": "Constanta" + }, + { + "id": 4858, + "name": "Pantelimon", + "county": "Constanta" + }, + { + "id": 4859, + "name": "Calugareni", + "county": "Constanta" + }, + { + "id": 4860, + "name": "Nistoresti", + "county": "Constanta" + }, + { + "id": 4861, + "name": "Pantelimon de Jos", + "county": "Constanta" + }, + { + "id": 4862, + "name": "Runcu", + "county": "Constanta" + }, + { + "id": 4863, + "name": "Vulturu", + "county": "Constanta" + }, + { + "id": 4864, + "name": "Pecineaga", + "county": "Constanta" + }, + { + "id": 4865, + "name": "Vanatori", + "county": "Constanta" + }, + { + "id": 4866, + "name": "Pestera", + "county": "Constanta" + }, + { + "id": 4867, + "name": "Ivrinezu Mare", + "county": "Constanta" + }, + { + "id": 4868, + "name": "Ivrinezu Mic", + "county": "Constanta" + }, + { + "id": 4869, + "name": "Izvoru Mare", + "county": "Constanta" + }, + { + "id": 4870, + "name": "Veteranu", + "county": "Constanta" + }, + { + "id": 4871, + "name": "Poarta Alba", + "county": "Constanta" + }, + { + "id": 4872, + "name": "Nazarcea", + "county": "Constanta" + }, + { + "id": 4873, + "name": "Rasova", + "county": "Constanta" + }, + { + "id": 4874, + "name": "Cochirleni", + "county": "Constanta" + }, + { + "id": 4875, + "name": "Saraiu", + "county": "Constanta" + }, + { + "id": 4876, + "name": "Dulgheru", + "county": "Constanta" + }, + { + "id": 4877, + "name": "Stejaru", + "county": "Constanta" + }, + { + "id": 4878, + "name": "Sacele", + "county": "Constanta" + }, + { + "id": 4879, + "name": "Traian", + "county": "Constanta" + }, + { + "id": 4880, + "name": "Seimeni", + "county": "Constanta" + }, + { + "id": 4881, + "name": "Dunarea", + "county": "Constanta" + }, + { + "id": 4882, + "name": "Seimenii Mici", + "county": "Constanta" + }, + { + "id": 4883, + "name": "Silistea", + "county": "Constanta" + }, + { + "id": 4884, + "name": "Tortoman", + "county": "Constanta" + }, + { + "id": 4885, + "name": "Tepes Voda", + "county": "Constanta" + }, + { + "id": 4886, + "name": "Targusor", + "county": "Constanta" + }, + { + "id": 4887, + "name": "Casian", + "county": "Constanta" + }, + { + "id": 4888, + "name": "Cheia", + "county": "Constanta" + }, + { + "id": 4889, + "name": "Gradina", + "county": "Constanta" + }, + { + "id": 4890, + "name": "Mireasa", + "county": "Constanta" + }, + { + "id": 4891, + "name": "Topalu", + "county": "Constanta" + }, + { + "id": 4892, + "name": "Capidava", + "county": "Constanta" + }, + { + "id": 4893, + "name": "Topraisar", + "county": "Constanta" + }, + { + "id": 4894, + "name": "Amzacea", + "county": "Constanta" + }, + { + "id": 4895, + "name": "Biruinta", + "county": "Constanta" + }, + { + "id": 4896, + "name": "Movilita", + "county": "Constanta" + }, + { + "id": 4897, + "name": "Valu lui Traian", + "county": "Constanta" + }, + { + "id": 4898, + "name": "Olimp", + "county": "Constanta" + }, + { + "id": 4899, + "name": "Neptun", + "county": "Constanta" + }, + { + "id": 4900, + "name": "Jupiter", + "county": "Constanta" + }, + { + "id": 4901, + "name": "Cap Aurora", + "county": "Constanta" + }, + { + "id": 4902, + "name": "Venus", + "county": "Constanta" + }, + { + "id": 4903, + "name": "Saturn", + "county": "Constanta" + }, + { + "id": 4904, + "name": "Agigea", + "county": "Constanta" + }, + { + "id": 4905, + "name": "Sfantu Gheorghe", + "county": "Covasna" + }, + { + "id": 4906, + "name": "Chilieni", + "county": "Covasna" + }, + { + "id": 4907, + "name": "Coseni", + "county": "Covasna" + }, + { + "id": 4908, + "name": "Baraolt", + "county": "Covasna" + }, + { + "id": 4909, + "name": "Biborteni", + "county": "Covasna" + }, + { + "id": 4910, + "name": "Bodos", + "county": "Covasna" + }, + { + "id": 4911, + "name": "Capeni", + "county": "Covasna" + }, + { + "id": 4912, + "name": "Miclosoara", + "county": "Covasna" + }, + { + "id": 4913, + "name": "Racosul de Sus", + "county": "Covasna" + }, + { + "id": 4914, + "name": "Covasna", + "county": "Covasna" + }, + { + "id": 4915, + "name": "Chiurus", + "county": "Covasna" + }, + { + "id": 4916, + "name": "Comandau", + "county": "Covasna" + }, + { + "id": 4917, + "name": "Intorsura Buzaului", + "county": "Covasna" + }, + { + "id": 4918, + "name": "Bradet", + "county": "Covasna" + }, + { + "id": 4919, + "name": "Floroaia", + "county": "Covasna" + }, + { + "id": 4920, + "name": "Scradoasa", + "county": "Covasna" + }, + { + "id": 4921, + "name": "Barcani", + "county": "Covasna" + }, + { + "id": 4922, + "name": "Ladauti", + "county": "Covasna" + }, + { + "id": 4923, + "name": "Saramas", + "county": "Covasna" + }, + { + "id": 4924, + "name": "Valea Mare", + "county": "Covasna" + }, + { + "id": 4925, + "name": "Sita Buzaului", + "county": "Covasna" + }, + { + "id": 4926, + "name": "Crasna", + "county": "Covasna" + }, + { + "id": 4927, + "name": "Merisor", + "county": "Covasna" + }, + { + "id": 4928, + "name": "Zabratau", + "county": "Covasna" + }, + { + "id": 4929, + "name": "Targu Secuiesc", + "county": "Covasna" + }, + { + "id": 4930, + "name": "Lunga", + "county": "Covasna" + }, + { + "id": 4931, + "name": "Aita Mare", + "county": "Covasna" + }, + { + "id": 4932, + "name": "Aita Medie", + "county": "Covasna" + }, + { + "id": 4933, + "name": "Batanii Mari", + "county": "Covasna" + }, + { + "id": 4934, + "name": "Aita Seaca", + "county": "Covasna" + }, + { + "id": 4935, + "name": "Batanii Mici", + "county": "Covasna" + }, + { + "id": 4936, + "name": "Herculian", + "county": "Covasna" + }, + { + "id": 4937, + "name": "Ozunca-Bai", + "county": "Covasna" + }, + { + "id": 4938, + "name": "Belin", + "county": "Covasna" + }, + { + "id": 4939, + "name": "Belin-Vale", + "county": "Covasna" + }, + { + "id": 4940, + "name": "Bodoc", + "county": "Covasna" + }, + { + "id": 4941, + "name": "Olteni", + "county": "Covasna" + }, + { + "id": 4942, + "name": "Zalan", + "county": "Covasna" + }, + { + "id": 4943, + "name": "Borosneu Mare", + "county": "Covasna" + }, + { + "id": 4944, + "name": "Borosneu Mic", + "county": "Covasna" + }, + { + "id": 4945, + "name": "Dobolii de Sus", + "county": "Covasna" + }, + { + "id": 4946, + "name": "Let", + "county": "Covasna" + }, + { + "id": 4947, + "name": "Tufalau", + "county": "Covasna" + }, + { + "id": 4948, + "name": "Valea Mica", + "county": "Covasna" + }, + { + "id": 4949, + "name": "Brates", + "county": "Covasna" + }, + { + "id": 4950, + "name": "Pachia", + "county": "Covasna" + }, + { + "id": 4951, + "name": "Telechia", + "county": "Covasna" + }, + { + "id": 4952, + "name": "Bradut", + "county": "Covasna" + }, + { + "id": 4953, + "name": "Doboseni", + "county": "Covasna" + }, + { + "id": 4954, + "name": "Filia", + "county": "Covasna" + }, + { + "id": 4955, + "name": "Talisoara", + "county": "Covasna" + }, + { + "id": 4956, + "name": "Bretcu", + "county": "Covasna" + }, + { + "id": 4957, + "name": "Martanus", + "county": "Covasna" + }, + { + "id": 4958, + "name": "Oituz", + "county": "Covasna" + }, + { + "id": 4959, + "name": "Catalina", + "county": "Covasna" + }, + { + "id": 4960, + "name": "Hatuica", + "county": "Covasna" + }, + { + "id": 4961, + "name": "Imeni", + "county": "Covasna" + }, + { + "id": 4962, + "name": "Martineni", + "county": "Covasna" + }, + { + "id": 4963, + "name": "Marcusa", + "county": "Covasna" + }, + { + "id": 4964, + "name": "Cernat", + "county": "Covasna" + }, + { + "id": 4965, + "name": "Albis", + "county": "Covasna" + }, + { + "id": 4966, + "name": "Icafalau", + "county": "Covasna" + }, + { + "id": 4967, + "name": "Chichis", + "county": "Covasna" + }, + { + "id": 4968, + "name": "Bacel", + "county": "Covasna" + }, + { + "id": 4969, + "name": "Dobarlau", + "county": "Covasna" + }, + { + "id": 4970, + "name": "Lunca Marcusului", + "county": "Covasna" + }, + { + "id": 4971, + "name": "Marcus", + "county": "Covasna" + }, + { + "id": 4972, + "name": "Valea Dobarlaului", + "county": "Covasna" + }, + { + "id": 4973, + "name": "Ghelinta", + "county": "Covasna" + }, + { + "id": 4974, + "name": "Harale", + "county": "Covasna" + }, + { + "id": 4975, + "name": "Ghidfalau", + "county": "Covasna" + }, + { + "id": 4976, + "name": "Anghelus", + "county": "Covasna" + }, + { + "id": 4977, + "name": "Fotos", + "county": "Covasna" + }, + { + "id": 4978, + "name": "Zoltan", + "county": "Covasna" + }, + { + "id": 4979, + "name": "Haghig", + "county": "Covasna" + }, + { + "id": 4980, + "name": "Iaras", + "county": "Covasna" + }, + { + "id": 4981, + "name": "Ilieni", + "county": "Covasna" + }, + { + "id": 4982, + "name": "Dobolii de Jos", + "county": "Covasna" + }, + { + "id": 4983, + "name": "Sancraiu", + "county": "Covasna" + }, + { + "id": 4984, + "name": "Lemnia", + "county": "Covasna" + }, + { + "id": 4985, + "name": "Lutoasa", + "county": "Covasna" + }, + { + "id": 4986, + "name": "Mereni", + "county": "Covasna" + }, + { + "id": 4987, + "name": "Micfalau", + "county": "Covasna" + }, + { + "id": 4988, + "name": "Bixad", + "county": "Covasna" + }, + { + "id": 4989, + "name": "Malnas", + "county": "Covasna" + }, + { + "id": 4990, + "name": "Malnas-Bai", + "county": "Covasna" + }, + { + "id": 4991, + "name": "Valea Zalanului", + "county": "Covasna" + }, + { + "id": 4992, + "name": "Moacsa", + "county": "Covasna" + }, + { + "id": 4993, + "name": "Dalnic", + "county": "Covasna" + }, + { + "id": 4994, + "name": "Padureni", + "county": "Covasna" + }, + { + "id": 4995, + "name": "Ojdula", + "county": "Covasna" + }, + { + "id": 4996, + "name": "Hilib", + "county": "Covasna" + }, + { + "id": 4997, + "name": "Ozun", + "county": "Covasna" + }, + { + "id": 4998, + "name": "Bicfalau", + "county": "Covasna" + }, + { + "id": 4999, + "name": "Lisnau", + "county": "Covasna" + }, + { + "id": 5000, + "name": "Lisnau-Vale", + "county": "Covasna" + }, + { + "id": 5001, + "name": "Lunca Ozunului", + "county": "Covasna" + }, + { + "id": 5002, + "name": "Magherus", + "county": "Covasna" + }, + { + "id": 5003, + "name": "Santionlunca", + "county": "Covasna" + }, + { + "id": 5004, + "name": "Poian", + "county": "Covasna" + }, + { + "id": 5005, + "name": "Belani", + "county": "Covasna" + }, + { + "id": 5006, + "name": "Carpinenii", + "county": "Covasna" + }, + { + "id": 5007, + "name": "Estelnic", + "county": "Covasna" + }, + { + "id": 5008, + "name": "Valea Scurta", + "county": "Covasna" + }, + { + "id": 5009, + "name": "Reci", + "county": "Covasna" + }, + { + "id": 5010, + "name": "Aninoasa", + "county": "Covasna" + }, + { + "id": 5011, + "name": "Bita", + "county": "Covasna" + }, + { + "id": 5012, + "name": "Saciova", + "county": "Covasna" + }, + { + "id": 5013, + "name": "Sanzieni", + "county": "Covasna" + }, + { + "id": 5014, + "name": "Casinu Mic", + "county": "Covasna" + }, + { + "id": 5015, + "name": "Petriceni", + "county": "Covasna" + }, + { + "id": 5016, + "name": "Valea Seaca", + "county": "Covasna" + }, + { + "id": 5017, + "name": "Turia", + "county": "Covasna" + }, + { + "id": 5018, + "name": "Alungeni", + "county": "Covasna" + }, + { + "id": 5019, + "name": "Valea Crisului", + "county": "Covasna" + }, + { + "id": 5020, + "name": "Arcus", + "county": "Covasna" + }, + { + "id": 5021, + "name": "Calnic", + "county": "Covasna" + }, + { + "id": 5022, + "name": "Araci", + "county": "Covasna" + }, + { + "id": 5023, + "name": "Ariusd", + "county": "Covasna" + }, + { + "id": 5024, + "name": "Hetea", + "county": "Covasna" + }, + { + "id": 5025, + "name": "Valcele", + "county": "Covasna" + }, + { + "id": 5026, + "name": "Varghis", + "county": "Covasna" + }, + { + "id": 5027, + "name": "Zagon", + "county": "Covasna" + }, + { + "id": 5028, + "name": "Papauti", + "county": "Covasna" + }, + { + "id": 5029, + "name": "Zabala", + "county": "Covasna" + }, + { + "id": 5030, + "name": "Peteni", + "county": "Covasna" + }, + { + "id": 5031, + "name": "Surcea", + "county": "Covasna" + }, + { + "id": 5032, + "name": "Tamasfalau", + "county": "Covasna" + }, + { + "id": 5033, + "name": "Targoviste", + "county": "Dambovita" + }, + { + "id": 5034, + "name": "Priseaca", + "county": "Dambovita" + }, + { + "id": 5035, + "name": "Aninoasa", + "county": "Dambovita" + }, + { + "id": 5036, + "name": "Sateni", + "county": "Dambovita" + }, + { + "id": 5037, + "name": "Viforata", + "county": "Dambovita" + }, + { + "id": 5038, + "name": "Doicesti", + "county": "Dambovita" + }, + { + "id": 5039, + "name": "Razvad", + "county": "Dambovita" + }, + { + "id": 5040, + "name": "Gorgota", + "county": "Dambovita" + }, + { + "id": 5041, + "name": "Valea Voivozilor", + "county": "Dambovita" + }, + { + "id": 5042, + "name": "Sotanga", + "county": "Dambovita" + }, + { + "id": 5043, + "name": "Teis", + "county": "Dambovita" + }, + { + "id": 5044, + "name": "Ulmi", + "county": "Dambovita" + }, + { + "id": 5045, + "name": "Colanu", + "county": "Dambovita" + }, + { + "id": 5046, + "name": "Dimoiu", + "county": "Dambovita" + }, + { + "id": 5047, + "name": "Dumbrava", + "county": "Dambovita" + }, + { + "id": 5048, + "name": "Matraca", + "county": "Dambovita" + }, + { + "id": 5049, + "name": "Nisipurile", + "county": "Dambovita" + }, + { + "id": 5050, + "name": "Udresti", + "county": "Dambovita" + }, + { + "id": 5051, + "name": "Viisoara", + "county": "Dambovita" + }, + { + "id": 5052, + "name": "Fieni", + "county": "Dambovita" + }, + { + "id": 5053, + "name": "Berevoesti", + "county": "Dambovita" + }, + { + "id": 5054, + "name": "Costesti", + "county": "Dambovita" + }, + { + "id": 5055, + "name": "Motaieni", + "county": "Dambovita" + }, + { + "id": 5056, + "name": "Cucuteni", + "county": "Dambovita" + }, + { + "id": 5057, + "name": "Gaesti", + "county": "Dambovita" + }, + { + "id": 5058, + "name": "Gura Foii", + "county": "Dambovita" + }, + { + "id": 5059, + "name": "Bumbuia", + "county": "Dambovita" + }, + { + "id": 5060, + "name": "Catanele", + "county": "Dambovita" + }, + { + "id": 5061, + "name": "Fagetu", + "county": "Dambovita" + }, + { + "id": 5062, + "name": "Petresti", + "county": "Dambovita" + }, + { + "id": 5063, + "name": "Coada Izvorului", + "county": "Dambovita" + }, + { + "id": 5064, + "name": "Gherghesti", + "county": "Dambovita" + }, + { + "id": 5065, + "name": "Greci", + "county": "Dambovita" + }, + { + "id": 5066, + "name": "Ionesti", + "county": "Dambovita" + }, + { + "id": 5067, + "name": "Potlogeni-Deal", + "county": "Dambovita" + }, + { + "id": 5068, + "name": "Puntea de Greci", + "county": "Dambovita" + }, + { + "id": 5069, + "name": "Moreni", + "county": "Dambovita" + }, + { + "id": 5070, + "name": "Iedera de Jos", + "county": "Dambovita" + }, + { + "id": 5071, + "name": "Colibasi", + "county": "Dambovita" + }, + { + "id": 5072, + "name": "Cricovu Dulce", + "county": "Dambovita" + }, + { + "id": 5073, + "name": "Iedera de Sus", + "county": "Dambovita" + }, + { + "id": 5074, + "name": "Pucioasa", + "county": "Dambovita" + }, + { + "id": 5075, + "name": "Bela", + "county": "Dambovita" + }, + { + "id": 5076, + "name": "Diaconesti", + "county": "Dambovita" + }, + { + "id": 5077, + "name": "Glodeni", + "county": "Dambovita" + }, + { + "id": 5078, + "name": "Malurile", + "county": "Dambovita" + }, + { + "id": 5079, + "name": "Miculesti", + "county": "Dambovita" + }, + { + "id": 5080, + "name": "Pucioasa-Sat", + "county": "Dambovita" + }, + { + "id": 5081, + "name": "Branesti", + "county": "Dambovita" + }, + { + "id": 5082, + "name": "Gura Vulcanei", + "county": "Dambovita" + }, + { + "id": 5083, + "name": "Laculete-Gara", + "county": "Dambovita" + }, + { + "id": 5084, + "name": "Priboiu", + "county": "Dambovita" + }, + { + "id": 5085, + "name": "Toculesti", + "county": "Dambovita" + }, + { + "id": 5086, + "name": "Vulcana-Pandele", + "county": "Dambovita" + }, + { + "id": 5087, + "name": "Titu", + "county": "Dambovita" + }, + { + "id": 5088, + "name": "Fusea", + "county": "Dambovita" + }, + { + "id": 5089, + "name": "Hagioaica", + "county": "Dambovita" + }, + { + "id": 5090, + "name": "Mereni", + "county": "Dambovita" + }, + { + "id": 5091, + "name": "Plopu", + "county": "Dambovita" + }, + { + "id": 5092, + "name": "Salcuta", + "county": "Dambovita" + }, + { + "id": 5093, + "name": "Branistea", + "county": "Dambovita" + }, + { + "id": 5094, + "name": "Dambovicioara", + "county": "Dambovita" + }, + { + "id": 5095, + "name": "Savesti", + "county": "Dambovita" + }, + { + "id": 5096, + "name": "Baleni-Romani", + "county": "Dambovita" + }, + { + "id": 5097, + "name": "Baleni-Sarbi", + "county": "Dambovita" + }, + { + "id": 5098, + "name": "Gura Barbuletului", + "county": "Dambovita" + }, + { + "id": 5099, + "name": "Alunis", + "county": "Dambovita" + }, + { + "id": 5100, + "name": "Barbuletu", + "county": "Dambovita" + }, + { + "id": 5101, + "name": "Cetatuia", + "county": "Dambovita" + }, + { + "id": 5102, + "name": "Dupa Deal", + "county": "Dambovita" + }, + { + "id": 5103, + "name": "Pietrari", + "county": "Dambovita" + }, + { + "id": 5104, + "name": "Rau Alb de Jos", + "county": "Dambovita" + }, + { + "id": 5105, + "name": "Rau Alb de Sus", + "county": "Dambovita" + }, + { + "id": 5106, + "name": "Sipot", + "county": "Dambovita" + }, + { + "id": 5107, + "name": "Valea", + "county": "Dambovita" + }, + { + "id": 5108, + "name": "Bezdead", + "county": "Dambovita" + }, + { + "id": 5109, + "name": "Brosteni", + "county": "Dambovita" + }, + { + "id": 5110, + "name": "Costisata", + "county": "Dambovita" + }, + { + "id": 5111, + "name": "Magura", + "county": "Dambovita" + }, + { + "id": 5112, + "name": "Tunari", + "county": "Dambovita" + }, + { + "id": 5113, + "name": "Valea Morii", + "county": "Dambovita" + }, + { + "id": 5114, + "name": "Bilciuresti", + "county": "Dambovita" + }, + { + "id": 5115, + "name": "Suseni Socetu", + "county": "Dambovita" + }, + { + "id": 5116, + "name": "Buciumeni", + "county": "Dambovita" + }, + { + "id": 5117, + "name": "Dealu Mare", + "county": "Dambovita" + }, + { + "id": 5118, + "name": "Valea Leurzii", + "county": "Dambovita" + }, + { + "id": 5119, + "name": "Bucsani", + "county": "Dambovita" + }, + { + "id": 5120, + "name": "Habeni", + "county": "Dambovita" + }, + { + "id": 5121, + "name": "Racovita", + "county": "Dambovita" + }, + { + "id": 5122, + "name": "Ratoaia", + "county": "Dambovita" + }, + { + "id": 5123, + "name": "Candesti-Vale", + "county": "Dambovita" + }, + { + "id": 5124, + "name": "Aninosani", + "county": "Dambovita" + }, + { + "id": 5125, + "name": "Candesti Deal", + "county": "Dambovita" + }, + { + "id": 5126, + "name": "Dragodanesti", + "county": "Dambovita" + }, + { + "id": 5127, + "name": "Valea Mare", + "county": "Dambovita" + }, + { + "id": 5128, + "name": "Gherghitesti", + "county": "Dambovita" + }, + { + "id": 5129, + "name": "Blidari", + "county": "Dambovita" + }, + { + "id": 5130, + "name": "Calugareni", + "county": "Dambovita" + }, + { + "id": 5131, + "name": "Capsuna", + "county": "Dambovita" + }, + { + "id": 5132, + "name": "Cobiuta", + "county": "Dambovita" + }, + { + "id": 5133, + "name": "Craciunesti", + "county": "Dambovita" + }, + { + "id": 5134, + "name": "Frasin Deal", + "county": "Dambovita" + }, + { + "id": 5135, + "name": "Frasin Vale", + "county": "Dambovita" + }, + { + "id": 5136, + "name": "Mislea", + "county": "Dambovita" + }, + { + "id": 5137, + "name": "Manastirea", + "county": "Dambovita" + }, + { + "id": 5138, + "name": "Cojasca", + "county": "Dambovita" + }, + { + "id": 5139, + "name": "Fantanele", + "county": "Dambovita" + }, + { + "id": 5140, + "name": "Iazu", + "county": "Dambovita" + }, + { + "id": 5141, + "name": "Comisani", + "county": "Dambovita" + }, + { + "id": 5142, + "name": "Lazuri", + "county": "Dambovita" + }, + { + "id": 5143, + "name": "Contesti", + "county": "Dambovita" + }, + { + "id": 5144, + "name": "Balteni", + "county": "Dambovita" + }, + { + "id": 5145, + "name": "Boteni", + "county": "Dambovita" + }, + { + "id": 5146, + "name": "Calugareni", + "county": "Dambovita" + }, + { + "id": 5147, + "name": "Crangasi", + "county": "Dambovita" + }, + { + "id": 5148, + "name": "Gamanesti", + "county": "Dambovita" + }, + { + "id": 5149, + "name": "Helesteu", + "county": "Dambovita" + }, + { + "id": 5150, + "name": "Mereni", + "county": "Dambovita" + }, + { + "id": 5151, + "name": "Corbii Mari", + "county": "Dambovita" + }, + { + "id": 5152, + "name": "Baraceni", + "county": "Dambovita" + }, + { + "id": 5153, + "name": "Grozavesti", + "county": "Dambovita" + }, + { + "id": 5154, + "name": "Moara din Groapa", + "county": "Dambovita" + }, + { + "id": 5155, + "name": "Petresti", + "county": "Dambovita" + }, + { + "id": 5156, + "name": "Podu Corbencii", + "county": "Dambovita" + }, + { + "id": 5157, + "name": "Satu Nou", + "county": "Dambovita" + }, + { + "id": 5158, + "name": "Ungureni", + "county": "Dambovita" + }, + { + "id": 5159, + "name": "Vadu Stanchii", + "county": "Dambovita" + }, + { + "id": 5160, + "name": "Cornatelu", + "county": "Dambovita" + }, + { + "id": 5161, + "name": "Alunisu", + "county": "Dambovita" + }, + { + "id": 5162, + "name": "Bolovani", + "county": "Dambovita" + }, + { + "id": 5163, + "name": "Corni", + "county": "Dambovita" + }, + { + "id": 5164, + "name": "Slobozia", + "county": "Dambovita" + }, + { + "id": 5165, + "name": "Cornesti", + "county": "Dambovita" + }, + { + "id": 5166, + "name": "Bujoreanca", + "county": "Dambovita" + }, + { + "id": 5167, + "name": "Catunu", + "county": "Dambovita" + }, + { + "id": 5168, + "name": "Cristeasca", + "county": "Dambovita" + }, + { + "id": 5169, + "name": "Crivatu", + "county": "Dambovita" + }, + { + "id": 5170, + "name": "Frasinu", + "county": "Dambovita" + }, + { + "id": 5171, + "name": "Hodarasti", + "county": "Dambovita" + }, + { + "id": 5172, + "name": "Ibrianu", + "county": "Dambovita" + }, + { + "id": 5173, + "name": "Postarnacu", + "county": "Dambovita" + }, + { + "id": 5174, + "name": "Ungureni", + "county": "Dambovita" + }, + { + "id": 5175, + "name": "Costestii din Vale", + "county": "Dambovita" + }, + { + "id": 5176, + "name": "Maruntisu", + "county": "Dambovita" + }, + { + "id": 5177, + "name": "Tomsani", + "county": "Dambovita" + }, + { + "id": 5178, + "name": "Badulesti", + "county": "Dambovita" + }, + { + "id": 5179, + "name": "Crangurile de Jos", + "county": "Dambovita" + }, + { + "id": 5180, + "name": "Crangurile de Sus", + "county": "Dambovita" + }, + { + "id": 5181, + "name": "Patroaia Deal", + "county": "Dambovita" + }, + { + "id": 5182, + "name": "Patroaia Vale", + "county": "Dambovita" + }, + { + "id": 5183, + "name": "Potlogeni Vale", + "county": "Dambovita" + }, + { + "id": 5184, + "name": "Ratesti", + "county": "Dambovita" + }, + { + "id": 5185, + "name": "Voia", + "county": "Dambovita" + }, + { + "id": 5186, + "name": "Darmanesti", + "county": "Dambovita" + }, + { + "id": 5187, + "name": "Marginenii de Sus", + "county": "Dambovita" + }, + { + "id": 5188, + "name": "Vladeni", + "county": "Dambovita" + }, + { + "id": 5189, + "name": "Dobra", + "county": "Dambovita" + }, + { + "id": 5190, + "name": "Marcesti", + "county": "Dambovita" + }, + { + "id": 5191, + "name": "Dragodana", + "county": "Dambovita" + }, + { + "id": 5192, + "name": "Boboci", + "county": "Dambovita" + }, + { + "id": 5193, + "name": "Burduca", + "county": "Dambovita" + }, + { + "id": 5194, + "name": "Cuparu", + "county": "Dambovita" + }, + { + "id": 5195, + "name": "Padureni", + "county": "Dambovita" + }, + { + "id": 5196, + "name": "Picior de Munte", + "county": "Dambovita" + }, + { + "id": 5197, + "name": "Straosti", + "county": "Dambovita" + }, + { + "id": 5198, + "name": "Dragomiresti", + "county": "Dambovita" + }, + { + "id": 5199, + "name": "Decindeni", + "county": "Dambovita" + }, + { + "id": 5200, + "name": "Geangoesti", + "county": "Dambovita" + }, + { + "id": 5201, + "name": "Mogosesti", + "county": "Dambovita" + }, + { + "id": 5202, + "name": "Rancaciov", + "county": "Dambovita" + }, + { + "id": 5203, + "name": "Ungureni", + "county": "Dambovita" + }, + { + "id": 5204, + "name": "Finta Mare", + "county": "Dambovita" + }, + { + "id": 5205, + "name": "Bechinesti", + "county": "Dambovita" + }, + { + "id": 5206, + "name": "Finta Veche", + "county": "Dambovita" + }, + { + "id": 5207, + "name": "Gheboaia", + "county": "Dambovita" + }, + { + "id": 5208, + "name": "Glodeni", + "county": "Dambovita" + }, + { + "id": 5209, + "name": "Gusoiu", + "county": "Dambovita" + }, + { + "id": 5210, + "name": "Laculete", + "county": "Dambovita" + }, + { + "id": 5211, + "name": "Livezile", + "county": "Dambovita" + }, + { + "id": 5212, + "name": "Malu Mierii", + "county": "Dambovita" + }, + { + "id": 5213, + "name": "Schela", + "county": "Dambovita" + }, + { + "id": 5214, + "name": "Gura Ocnitei", + "county": "Dambovita" + }, + { + "id": 5215, + "name": "Adanca", + "county": "Dambovita" + }, + { + "id": 5216, + "name": "Ochiuri", + "county": "Dambovita" + }, + { + "id": 5217, + "name": "Sacueni", + "county": "Dambovita" + }, + { + "id": 5218, + "name": "Gura Sutii", + "county": "Dambovita" + }, + { + "id": 5219, + "name": "Sperieteni", + "county": "Dambovita" + }, + { + "id": 5220, + "name": "Hulubesti", + "county": "Dambovita" + }, + { + "id": 5221, + "name": "Butoiu de Jos", + "county": "Dambovita" + }, + { + "id": 5222, + "name": "Butoiu de Sus", + "county": "Dambovita" + }, + { + "id": 5223, + "name": "Magura", + "county": "Dambovita" + }, + { + "id": 5224, + "name": "Valea Dadei", + "county": "Dambovita" + }, + { + "id": 5225, + "name": "Ghirdoveni", + "county": "Dambovita" + }, + { + "id": 5226, + "name": "I. L. Caragiale", + "county": "Dambovita" + }, + { + "id": 5227, + "name": "Mija", + "county": "Dambovita" + }, + { + "id": 5228, + "name": "Lucieni", + "county": "Dambovita" + }, + { + "id": 5229, + "name": "Olteni", + "county": "Dambovita" + }, + { + "id": 5230, + "name": "Raciu", + "county": "Dambovita" + }, + { + "id": 5231, + "name": "Silistea", + "county": "Dambovita" + }, + { + "id": 5232, + "name": "Suta Seaca", + "county": "Dambovita" + }, + { + "id": 5233, + "name": "Ludesti", + "county": "Dambovita" + }, + { + "id": 5234, + "name": "Milosari", + "county": "Dambovita" + }, + { + "id": 5235, + "name": "Potocelu", + "county": "Dambovita" + }, + { + "id": 5236, + "name": "Scheiu de Jos", + "county": "Dambovita" + }, + { + "id": 5237, + "name": "Scheiu de Sus", + "county": "Dambovita" + }, + { + "id": 5238, + "name": "Telesti", + "county": "Dambovita" + }, + { + "id": 5239, + "name": "Lunguletu", + "county": "Dambovita" + }, + { + "id": 5240, + "name": "Oreasca", + "county": "Dambovita" + }, + { + "id": 5241, + "name": "Serdanu", + "county": "Dambovita" + }, + { + "id": 5242, + "name": "Malu cu Flori", + "county": "Dambovita" + }, + { + "id": 5243, + "name": "Capu Coastei", + "county": "Dambovita" + }, + { + "id": 5244, + "name": "Copaceni", + "county": "Dambovita" + }, + { + "id": 5245, + "name": "Miclosanii Mari", + "county": "Dambovita" + }, + { + "id": 5246, + "name": "Miclosanii Mici", + "county": "Dambovita" + }, + { + "id": 5247, + "name": "Manesti", + "county": "Dambovita" + }, + { + "id": 5248, + "name": "Dragaesti Pamanteni", + "county": "Dambovita" + }, + { + "id": 5249, + "name": "Dragaesti Ungureni", + "county": "Dambovita" + }, + { + "id": 5250, + "name": "Tetcoiu", + "county": "Dambovita" + }, + { + "id": 5251, + "name": "Cretulesti", + "county": "Dambovita" + }, + { + "id": 5252, + "name": "Matasaru", + "county": "Dambovita" + }, + { + "id": 5253, + "name": "Odaia Turcului", + "county": "Dambovita" + }, + { + "id": 5254, + "name": "Poroinica", + "county": "Dambovita" + }, + { + "id": 5255, + "name": "Putu cu Salcie", + "county": "Dambovita" + }, + { + "id": 5256, + "name": "Salcioara", + "county": "Dambovita" + }, + { + "id": 5257, + "name": "Mogosani", + "county": "Dambovita" + }, + { + "id": 5258, + "name": "Chirca", + "county": "Dambovita" + }, + { + "id": 5259, + "name": "Cojocaru", + "county": "Dambovita" + }, + { + "id": 5260, + "name": "Merii", + "county": "Dambovita" + }, + { + "id": 5261, + "name": "Zavoiu", + "county": "Dambovita" + }, + { + "id": 5262, + "name": "Moroeni", + "county": "Dambovita" + }, + { + "id": 5263, + "name": "Dobresti", + "county": "Dambovita" + }, + { + "id": 5264, + "name": "Glod", + "county": "Dambovita" + }, + { + "id": 5265, + "name": "Lunca", + "county": "Dambovita" + }, + { + "id": 5266, + "name": "Muscel", + "county": "Dambovita" + }, + { + "id": 5267, + "name": "Pucheni", + "county": "Dambovita" + }, + { + "id": 5268, + "name": "Morteni", + "county": "Dambovita" + }, + { + "id": 5269, + "name": "Neajlovu", + "county": "Dambovita" + }, + { + "id": 5270, + "name": "Nucet", + "county": "Dambovita" + }, + { + "id": 5271, + "name": "Cazaci", + "county": "Dambovita" + }, + { + "id": 5272, + "name": "Ilfoveni", + "county": "Dambovita" + }, + { + "id": 5273, + "name": "Ocnita", + "county": "Dambovita" + }, + { + "id": 5274, + "name": "Odobesti", + "county": "Dambovita" + }, + { + "id": 5275, + "name": "Brancoveanu", + "county": "Dambovita" + }, + { + "id": 5276, + "name": "Crovu", + "county": "Dambovita" + }, + { + "id": 5277, + "name": "Miulesti", + "county": "Dambovita" + }, + { + "id": 5278, + "name": "Zidurile", + "county": "Dambovita" + }, + { + "id": 5279, + "name": "Pietrosita", + "county": "Dambovita" + }, + { + "id": 5280, + "name": "Dealu Frumos", + "county": "Dambovita" + }, + { + "id": 5281, + "name": "Poiana", + "county": "Dambovita" + }, + { + "id": 5282, + "name": "Poienita", + "county": "Dambovita" + }, + { + "id": 5283, + "name": "Potlogi", + "county": "Dambovita" + }, + { + "id": 5284, + "name": "Pitaru", + "county": "Dambovita" + }, + { + "id": 5285, + "name": "Podu Cristinii", + "county": "Dambovita" + }, + { + "id": 5286, + "name": "Romanesti", + "county": "Dambovita" + }, + { + "id": 5287, + "name": "Vlasceni", + "county": "Dambovita" + }, + { + "id": 5288, + "name": "Produlesti", + "county": "Dambovita" + }, + { + "id": 5289, + "name": "Brosteni", + "county": "Dambovita" + }, + { + "id": 5290, + "name": "Costestii din Deal", + "county": "Dambovita" + }, + { + "id": 5291, + "name": "Pucheni", + "county": "Dambovita" + }, + { + "id": 5292, + "name": "Bradatel", + "county": "Dambovita" + }, + { + "id": 5293, + "name": "Meisoare", + "county": "Dambovita" + }, + { + "id": 5294, + "name": "Valea Larga", + "county": "Dambovita" + }, + { + "id": 5295, + "name": "Varfureni", + "county": "Dambovita" + }, + { + "id": 5296, + "name": "Racari", + "county": "Dambovita" + }, + { + "id": 5297, + "name": "Balanesti", + "county": "Dambovita" + }, + { + "id": 5298, + "name": "Colacu", + "county": "Dambovita" + }, + { + "id": 5299, + "name": "Ghergani", + "county": "Dambovita" + }, + { + "id": 5300, + "name": "Ghimpati", + "county": "Dambovita" + }, + { + "id": 5301, + "name": "Mavrodin", + "county": "Dambovita" + }, + { + "id": 5302, + "name": "Sabiesti", + "county": "Dambovita" + }, + { + "id": 5303, + "name": "Stanesti", + "county": "Dambovita" + }, + { + "id": 5304, + "name": "Runcu", + "county": "Dambovita" + }, + { + "id": 5305, + "name": "Badeni", + "county": "Dambovita" + }, + { + "id": 5306, + "name": "Brebu", + "county": "Dambovita" + }, + { + "id": 5307, + "name": "Ferestre", + "county": "Dambovita" + }, + { + "id": 5308, + "name": "Piatra", + "county": "Dambovita" + }, + { + "id": 5309, + "name": "Silistea", + "county": "Dambovita" + }, + { + "id": 5310, + "name": "Banesti", + "county": "Dambovita" + }, + { + "id": 5311, + "name": "Catunu", + "county": "Dambovita" + }, + { + "id": 5312, + "name": "Cuza Voda", + "county": "Dambovita" + }, + { + "id": 5313, + "name": "Ghinesti", + "county": "Dambovita" + }, + { + "id": 5314, + "name": "Mircea Voda", + "county": "Dambovita" + }, + { + "id": 5315, + "name": "Moara Noua", + "county": "Dambovita" + }, + { + "id": 5316, + "name": "Movila", + "county": "Dambovita" + }, + { + "id": 5317, + "name": "Podu Rizii", + "county": "Dambovita" + }, + { + "id": 5318, + "name": "Salcioara", + "county": "Dambovita" + }, + { + "id": 5319, + "name": "Selaru", + "county": "Dambovita" + }, + { + "id": 5320, + "name": "Fierbinti", + "county": "Dambovita" + }, + { + "id": 5321, + "name": "Glogoveanu", + "county": "Dambovita" + }, + { + "id": 5322, + "name": "Tatarani", + "county": "Dambovita" + }, + { + "id": 5323, + "name": "Caprioru", + "county": "Dambovita" + }, + { + "id": 5324, + "name": "Gheboieni", + "county": "Dambovita" + }, + { + "id": 5325, + "name": "Priboiu", + "county": "Dambovita" + }, + { + "id": 5326, + "name": "Uliesti", + "county": "Dambovita" + }, + { + "id": 5327, + "name": "Croitori", + "county": "Dambovita" + }, + { + "id": 5328, + "name": "Hanu lui Pala", + "county": "Dambovita" + }, + { + "id": 5329, + "name": "Jugureni", + "county": "Dambovita" + }, + { + "id": 5330, + "name": "Manastioara", + "county": "Dambovita" + }, + { + "id": 5331, + "name": "Olteni", + "county": "Dambovita" + }, + { + "id": 5332, + "name": "Ragu", + "county": "Dambovita" + }, + { + "id": 5333, + "name": "Stavropolia", + "county": "Dambovita" + }, + { + "id": 5334, + "name": "Valea Lunga-Cricov", + "county": "Dambovita" + }, + { + "id": 5335, + "name": "Bacesti", + "county": "Dambovita" + }, + { + "id": 5336, + "name": "Izvoru", + "county": "Dambovita" + }, + { + "id": 5337, + "name": "Mosia Mica", + "county": "Dambovita" + }, + { + "id": 5338, + "name": "Serbaneasa", + "county": "Dambovita" + }, + { + "id": 5339, + "name": "Stubeie Tisa", + "county": "Dambovita" + }, + { + "id": 5340, + "name": "Valea lui Dan", + "county": "Dambovita" + }, + { + "id": 5341, + "name": "Valea Lunga Gorgota", + "county": "Dambovita" + }, + { + "id": 5342, + "name": "Valea Lunga Ogrea", + "county": "Dambovita" + }, + { + "id": 5343, + "name": "Valea Mare", + "county": "Dambovita" + }, + { + "id": 5344, + "name": "Valea Mare", + "county": "Dambovita" + }, + { + "id": 5345, + "name": "Feteni", + "county": "Dambovita" + }, + { + "id": 5346, + "name": "Garleni", + "county": "Dambovita" + }, + { + "id": 5347, + "name": "Livezile", + "county": "Dambovita" + }, + { + "id": 5348, + "name": "Saru", + "county": "Dambovita" + }, + { + "id": 5349, + "name": "Stratonesti", + "county": "Dambovita" + }, + { + "id": 5350, + "name": "Valea Caselor", + "county": "Dambovita" + }, + { + "id": 5351, + "name": "Vacaresti", + "county": "Dambovita" + }, + { + "id": 5352, + "name": "Bratestii de Jos", + "county": "Dambovita" + }, + { + "id": 5353, + "name": "Bungetu", + "county": "Dambovita" + }, + { + "id": 5354, + "name": "Persinari", + "county": "Dambovita" + }, + { + "id": 5355, + "name": "Valeni-Dambovita", + "county": "Dambovita" + }, + { + "id": 5356, + "name": "Mesteacan", + "county": "Dambovita" + }, + { + "id": 5357, + "name": "Visina", + "county": "Dambovita" + }, + { + "id": 5358, + "name": "Brosteni", + "county": "Dambovita" + }, + { + "id": 5359, + "name": "Izvoru", + "county": "Dambovita" + }, + { + "id": 5360, + "name": "Rascaeti", + "county": "Dambovita" + }, + { + "id": 5361, + "name": "Vultureanca", + "county": "Dambovita" + }, + { + "id": 5362, + "name": "Visinesti", + "county": "Dambovita" + }, + { + "id": 5363, + "name": "Dospinesti", + "county": "Dambovita" + }, + { + "id": 5364, + "name": "Sultanu", + "county": "Dambovita" + }, + { + "id": 5365, + "name": "Urseiu", + "county": "Dambovita" + }, + { + "id": 5366, + "name": "Varfuri", + "county": "Dambovita" + }, + { + "id": 5367, + "name": "Carlanesti", + "county": "Dambovita" + }, + { + "id": 5368, + "name": "Cojoiu", + "county": "Dambovita" + }, + { + "id": 5369, + "name": "Merisoru", + "county": "Dambovita" + }, + { + "id": 5370, + "name": "Statesti", + "county": "Dambovita" + }, + { + "id": 5371, + "name": "Suvita", + "county": "Dambovita" + }, + { + "id": 5372, + "name": "Ulmetu", + "county": "Dambovita" + }, + { + "id": 5373, + "name": "Voinesti", + "county": "Dambovita" + }, + { + "id": 5374, + "name": "Gemenea Bratulesti", + "county": "Dambovita" + }, + { + "id": 5375, + "name": "Izvoarele", + "county": "Dambovita" + }, + { + "id": 5376, + "name": "Lunca", + "county": "Dambovita" + }, + { + "id": 5377, + "name": "Manga", + "county": "Dambovita" + }, + { + "id": 5378, + "name": "Manjina", + "county": "Dambovita" + }, + { + "id": 5379, + "name": "Oncesti", + "county": "Dambovita" + }, + { + "id": 5380, + "name": "Suduleni", + "county": "Dambovita" + }, + { + "id": 5381, + "name": "Vulcana-Bai", + "county": "Dambovita" + }, + { + "id": 5382, + "name": "Nicolaesti", + "county": "Dambovita" + }, + { + "id": 5383, + "name": "Vulcana de Sus", + "county": "Dambovita" + }, + { + "id": 5384, + "name": "Craiova", + "county": "Dolj" + }, + { + "id": 5385, + "name": "Facai", + "county": "Dolj" + }, + { + "id": 5386, + "name": "Mofleni", + "county": "Dolj" + }, + { + "id": 5387, + "name": "Popoveni", + "county": "Dolj" + }, + { + "id": 5388, + "name": "Simnicu de Jos", + "county": "Dolj" + }, + { + "id": 5389, + "name": "Bucovat", + "county": "Dolj" + }, + { + "id": 5390, + "name": "Carligei", + "county": "Dolj" + }, + { + "id": 5391, + "name": "Italieni", + "county": "Dolj" + }, + { + "id": 5392, + "name": "Leamna de Jos", + "county": "Dolj" + }, + { + "id": 5393, + "name": "Leamna de Sus", + "county": "Dolj" + }, + { + "id": 5394, + "name": "Palilula", + "county": "Dolj" + }, + { + "id": 5395, + "name": "Sarbatoarea", + "county": "Dolj" + }, + { + "id": 5396, + "name": "Cernele", + "county": "Dolj" + }, + { + "id": 5397, + "name": "Cernelele de Sus", + "county": "Dolj" + }, + { + "id": 5398, + "name": "Izvorul Rece", + "county": "Dolj" + }, + { + "id": 5399, + "name": "Rovine", + "county": "Dolj" + }, + { + "id": 5400, + "name": "Isalnita", + "county": "Dolj" + }, + { + "id": 5401, + "name": "Podari", + "county": "Dolj" + }, + { + "id": 5402, + "name": "Balta Verde", + "county": "Dolj" + }, + { + "id": 5403, + "name": "Braniste", + "county": "Dolj" + }, + { + "id": 5404, + "name": "Gura Vaii", + "county": "Dolj" + }, + { + "id": 5405, + "name": "Livezi", + "county": "Dolj" + }, + { + "id": 5406, + "name": "Simnicu de Sus", + "county": "Dolj" + }, + { + "id": 5407, + "name": "Albesti", + "county": "Dolj" + }, + { + "id": 5408, + "name": "Cornetu", + "county": "Dolj" + }, + { + "id": 5409, + "name": "Deleni", + "county": "Dolj" + }, + { + "id": 5410, + "name": "Dudovicesti", + "county": "Dolj" + }, + { + "id": 5411, + "name": "Dutulesti", + "county": "Dolj" + }, + { + "id": 5412, + "name": "Floresti", + "county": "Dolj" + }, + { + "id": 5413, + "name": "Izvor", + "county": "Dolj" + }, + { + "id": 5414, + "name": "Jieni", + "county": "Dolj" + }, + { + "id": 5415, + "name": "Lesile", + "county": "Dolj" + }, + { + "id": 5416, + "name": "Milesti", + "county": "Dolj" + }, + { + "id": 5417, + "name": "Romanesti", + "county": "Dolj" + }, + { + "id": 5418, + "name": "Bailesti", + "county": "Dolj" + }, + { + "id": 5419, + "name": "Balasan", + "county": "Dolj" + }, + { + "id": 5420, + "name": "Calafat", + "county": "Dolj" + }, + { + "id": 5421, + "name": "Basarabi", + "county": "Dolj" + }, + { + "id": 5422, + "name": "Ciupercenii Vechi", + "county": "Dolj" + }, + { + "id": 5423, + "name": "Golenti", + "county": "Dolj" + }, + { + "id": 5424, + "name": "Filiasi", + "county": "Dolj" + }, + { + "id": 5425, + "name": "Almajel", + "county": "Dolj" + }, + { + "id": 5426, + "name": "Balta", + "county": "Dolj" + }, + { + "id": 5427, + "name": "Braniste", + "county": "Dolj" + }, + { + "id": 5428, + "name": "Fratostita", + "county": "Dolj" + }, + { + "id": 5429, + "name": "Racarii de Sus", + "county": "Dolj" + }, + { + "id": 5430, + "name": "Uscaci", + "county": "Dolj" + }, + { + "id": 5431, + "name": "Segarcea", + "county": "Dolj" + }, + { + "id": 5432, + "name": "Afumati", + "county": "Dolj" + }, + { + "id": 5433, + "name": "Boureni", + "county": "Dolj" + }, + { + "id": 5434, + "name": "Covei", + "county": "Dolj" + }, + { + "id": 5435, + "name": "Almaj", + "county": "Dolj" + }, + { + "id": 5436, + "name": "Beharca", + "county": "Dolj" + }, + { + "id": 5437, + "name": "Bogea", + "county": "Dolj" + }, + { + "id": 5438, + "name": "Cotofenii din Fata", + "county": "Dolj" + }, + { + "id": 5439, + "name": "Mosneni", + "county": "Dolj" + }, + { + "id": 5440, + "name": "Sitoaia", + "county": "Dolj" + }, + { + "id": 5441, + "name": "Amarastii de Jos", + "county": "Dolj" + }, + { + "id": 5442, + "name": "Ocolna", + "county": "Dolj" + }, + { + "id": 5443, + "name": "Prapor", + "county": "Dolj" + }, + { + "id": 5444, + "name": "Amarastii de Sus", + "county": "Dolj" + }, + { + "id": 5445, + "name": "Dobrotesti", + "county": "Dolj" + }, + { + "id": 5446, + "name": "Nisipuri", + "county": "Dolj" + }, + { + "id": 5447, + "name": "Zvorsca", + "county": "Dolj" + }, + { + "id": 5448, + "name": "Apele Vii", + "county": "Dolj" + }, + { + "id": 5449, + "name": "Argetoaia", + "county": "Dolj" + }, + { + "id": 5450, + "name": "Baranu", + "county": "Dolj" + }, + { + "id": 5451, + "name": "Berbesu", + "county": "Dolj" + }, + { + "id": 5452, + "name": "Iordachesti", + "county": "Dolj" + }, + { + "id": 5453, + "name": "Leordoasa", + "county": "Dolj" + }, + { + "id": 5454, + "name": "Malumnic", + "county": "Dolj" + }, + { + "id": 5455, + "name": "Novac", + "county": "Dolj" + }, + { + "id": 5456, + "name": "Piria", + "county": "Dolj" + }, + { + "id": 5457, + "name": "Poiana Fantanii", + "county": "Dolj" + }, + { + "id": 5458, + "name": "Salcia", + "county": "Dolj" + }, + { + "id": 5459, + "name": "Teascu din Deal", + "county": "Dolj" + }, + { + "id": 5460, + "name": "Ursoaia", + "county": "Dolj" + }, + { + "id": 5461, + "name": "Bechet", + "county": "Dolj" + }, + { + "id": 5462, + "name": "Bistret", + "county": "Dolj" + }, + { + "id": 5463, + "name": "Bistretu Nou", + "county": "Dolj" + }, + { + "id": 5464, + "name": "Brandusa", + "county": "Dolj" + }, + { + "id": 5465, + "name": "Plosca", + "county": "Dolj" + }, + { + "id": 5466, + "name": "Barca", + "county": "Dolj" + }, + { + "id": 5467, + "name": "Botosesti-Paia", + "county": "Dolj" + }, + { + "id": 5468, + "name": "Brabova", + "county": "Dolj" + }, + { + "id": 5469, + "name": "Caraiman", + "county": "Dolj" + }, + { + "id": 5470, + "name": "Mosna", + "county": "Dolj" + }, + { + "id": 5471, + "name": "Rachita de Jos", + "county": "Dolj" + }, + { + "id": 5472, + "name": "Urdinita", + "county": "Dolj" + }, + { + "id": 5473, + "name": "Voita", + "county": "Dolj" + }, + { + "id": 5474, + "name": "Bradesti", + "county": "Dolj" + }, + { + "id": 5475, + "name": "Bradestii Batrani", + "county": "Dolj" + }, + { + "id": 5476, + "name": "Meteu", + "county": "Dolj" + }, + { + "id": 5477, + "name": "Piscani", + "county": "Dolj" + }, + { + "id": 5478, + "name": "Racarii de Jos", + "county": "Dolj" + }, + { + "id": 5479, + "name": "Tatomiresti", + "county": "Dolj" + }, + { + "id": 5480, + "name": "Bralostita", + "county": "Dolj" + }, + { + "id": 5481, + "name": "Ciocanele", + "county": "Dolj" + }, + { + "id": 5482, + "name": "Racovita", + "county": "Dolj" + }, + { + "id": 5483, + "name": "Schitu", + "county": "Dolj" + }, + { + "id": 5484, + "name": "Sfarcea", + "county": "Dolj" + }, + { + "id": 5485, + "name": "Valea Fantanilor", + "county": "Dolj" + }, + { + "id": 5486, + "name": "Bratovoesti", + "county": "Dolj" + }, + { + "id": 5487, + "name": "Badosi", + "county": "Dolj" + }, + { + "id": 5488, + "name": "Georocu Mare", + "county": "Dolj" + }, + { + "id": 5489, + "name": "Prunet", + "county": "Dolj" + }, + { + "id": 5490, + "name": "Rojiste", + "county": "Dolj" + }, + { + "id": 5491, + "name": "Tamburesti", + "county": "Dolj" + }, + { + "id": 5492, + "name": "Breasta", + "county": "Dolj" + }, + { + "id": 5493, + "name": "Cotu", + "county": "Dolj" + }, + { + "id": 5494, + "name": "Crovna", + "county": "Dolj" + }, + { + "id": 5495, + "name": "Faget", + "county": "Dolj" + }, + { + "id": 5496, + "name": "Obedin", + "county": "Dolj" + }, + { + "id": 5497, + "name": "Rosieni", + "county": "Dolj" + }, + { + "id": 5498, + "name": "Valea Lungului", + "county": "Dolj" + }, + { + "id": 5499, + "name": "Prejoi", + "county": "Dolj" + }, + { + "id": 5500, + "name": "Bulzesti", + "county": "Dolj" + }, + { + "id": 5501, + "name": "Fratila", + "county": "Dolj" + }, + { + "id": 5502, + "name": "Gura Racului", + "county": "Dolj" + }, + { + "id": 5503, + "name": "Infratirea", + "county": "Dolj" + }, + { + "id": 5504, + "name": "Piscu Lung", + "county": "Dolj" + }, + { + "id": 5505, + "name": "Poienile", + "county": "Dolj" + }, + { + "id": 5506, + "name": "Saliste", + "county": "Dolj" + }, + { + "id": 5507, + "name": "Seculesti", + "county": "Dolj" + }, + { + "id": 5508, + "name": "Stoicesti", + "county": "Dolj" + }, + { + "id": 5509, + "name": "Calopar", + "county": "Dolj" + }, + { + "id": 5510, + "name": "Belcinu", + "county": "Dolj" + }, + { + "id": 5511, + "name": "Bazdana", + "county": "Dolj" + }, + { + "id": 5512, + "name": "Panaghia", + "county": "Dolj" + }, + { + "id": 5513, + "name": "Salcuta", + "county": "Dolj" + }, + { + "id": 5514, + "name": "Caraula", + "county": "Dolj" + }, + { + "id": 5515, + "name": "Carpen", + "county": "Dolj" + }, + { + "id": 5516, + "name": "Cleanov", + "county": "Dolj" + }, + { + "id": 5517, + "name": "Geblesti", + "county": "Dolj" + }, + { + "id": 5518, + "name": "Castranova", + "county": "Dolj" + }, + { + "id": 5519, + "name": "Puturi", + "county": "Dolj" + }, + { + "id": 5520, + "name": "Calarasi", + "county": "Dolj" + }, + { + "id": 5521, + "name": "Sarata", + "county": "Dolj" + }, + { + "id": 5522, + "name": "Celaru", + "county": "Dolj" + }, + { + "id": 5523, + "name": "Ghizdavesti", + "county": "Dolj" + }, + { + "id": 5524, + "name": "Marotinu de Jos", + "county": "Dolj" + }, + { + "id": 5525, + "name": "Marotinu de Sus", + "county": "Dolj" + }, + { + "id": 5526, + "name": "Soreni", + "county": "Dolj" + }, + { + "id": 5527, + "name": "Cerat", + "county": "Dolj" + }, + { + "id": 5528, + "name": "Malaica", + "county": "Dolj" + }, + { + "id": 5529, + "name": "Cernatesti", + "county": "Dolj" + }, + { + "id": 5530, + "name": "Cornita", + "county": "Dolj" + }, + { + "id": 5531, + "name": "Rasnicu Batran", + "county": "Dolj" + }, + { + "id": 5532, + "name": "Rasnicu Oghian", + "county": "Dolj" + }, + { + "id": 5533, + "name": "Tiu", + "county": "Dolj" + }, + { + "id": 5534, + "name": "Cetate", + "county": "Dolj" + }, + { + "id": 5535, + "name": "Moreni", + "county": "Dolj" + }, + { + "id": 5536, + "name": "Cioroiasi", + "county": "Dolj" + }, + { + "id": 5537, + "name": "Cetatuia", + "county": "Dolj" + }, + { + "id": 5538, + "name": "Cioroiu Nou", + "county": "Dolj" + }, + { + "id": 5539, + "name": "Ciupercenii Noi", + "county": "Dolj" + }, + { + "id": 5540, + "name": "Smardan", + "county": "Dolj" + }, + { + "id": 5541, + "name": "Cosoveni", + "county": "Dolj" + }, + { + "id": 5542, + "name": "Carcea", + "county": "Dolj" + }, + { + "id": 5543, + "name": "Cotofenii din Dos", + "county": "Dolj" + }, + { + "id": 5544, + "name": "Mihaita", + "county": "Dolj" + }, + { + "id": 5545, + "name": "Potmeltu", + "county": "Dolj" + }, + { + "id": 5546, + "name": "Daneti", + "county": "Dolj" + }, + { + "id": 5547, + "name": "Brabeti", + "county": "Dolj" + }, + { + "id": 5548, + "name": "Braniste", + "county": "Dolj" + }, + { + "id": 5549, + "name": "Locusteni", + "county": "Dolj" + }, + { + "id": 5550, + "name": "Dabuleni", + "county": "Dolj" + }, + { + "id": 5551, + "name": "Chiasu", + "county": "Dolj" + }, + { + "id": 5552, + "name": "Desa", + "county": "Dolj" + }, + { + "id": 5553, + "name": "Diosti", + "county": "Dolj" + }, + { + "id": 5554, + "name": "Ciocanesti", + "county": "Dolj" + }, + { + "id": 5555, + "name": "Radomir", + "county": "Dolj" + }, + { + "id": 5556, + "name": "Dobresti", + "county": "Dolj" + }, + { + "id": 5557, + "name": "Caciulatesti", + "county": "Dolj" + }, + { + "id": 5558, + "name": "Georocel", + "county": "Dolj" + }, + { + "id": 5559, + "name": "Murta", + "county": "Dolj" + }, + { + "id": 5560, + "name": "Toceni", + "county": "Dolj" + }, + { + "id": 5561, + "name": "Dragotesti", + "county": "Dolj" + }, + { + "id": 5562, + "name": "Benesti", + "county": "Dolj" + }, + { + "id": 5563, + "name": "Bobeanu", + "county": "Dolj" + }, + { + "id": 5564, + "name": "Buzduc", + "county": "Dolj" + }, + { + "id": 5565, + "name": "Popanzalesti", + "county": "Dolj" + }, + { + "id": 5566, + "name": "Viisoara", + "county": "Dolj" + }, + { + "id": 5567, + "name": "Dranic", + "county": "Dolj" + }, + { + "id": 5568, + "name": "Booveni", + "county": "Dolj" + }, + { + "id": 5569, + "name": "Foisor", + "county": "Dolj" + }, + { + "id": 5570, + "name": "Padea", + "county": "Dolj" + }, + { + "id": 5571, + "name": "Farcas", + "county": "Dolj" + }, + { + "id": 5572, + "name": "Amarasti", + "county": "Dolj" + }, + { + "id": 5573, + "name": "Golumbelu", + "county": "Dolj" + }, + { + "id": 5574, + "name": "Golumbu", + "county": "Dolj" + }, + { + "id": 5575, + "name": "Moflesti", + "county": "Dolj" + }, + { + "id": 5576, + "name": "Nistoi", + "county": "Dolj" + }, + { + "id": 5577, + "name": "Plopu Amarasti", + "county": "Dolj" + }, + { + "id": 5578, + "name": "Putinei", + "county": "Dolj" + }, + { + "id": 5579, + "name": "Soceni", + "county": "Dolj" + }, + { + "id": 5580, + "name": "Talpas", + "county": "Dolj" + }, + { + "id": 5581, + "name": "Galicea Mare", + "county": "Dolj" + }, + { + "id": 5582, + "name": "Ghercesti", + "county": "Dolj" + }, + { + "id": 5583, + "name": "Garlesti", + "county": "Dolj" + }, + { + "id": 5584, + "name": "Luncsoru", + "county": "Dolj" + }, + { + "id": 5585, + "name": "Ungureni", + "county": "Dolj" + }, + { + "id": 5586, + "name": "Ungurenii Mici", + "county": "Dolj" + }, + { + "id": 5587, + "name": "Gighera", + "county": "Dolj" + }, + { + "id": 5588, + "name": "Nedeia", + "county": "Dolj" + }, + { + "id": 5589, + "name": "Zaval", + "county": "Dolj" + }, + { + "id": 5590, + "name": "Giubega", + "county": "Dolj" + }, + { + "id": 5591, + "name": "Galiciuica", + "county": "Dolj" + }, + { + "id": 5592, + "name": "Giurgita", + "county": "Dolj" + }, + { + "id": 5593, + "name": "Curmatura", + "county": "Dolj" + }, + { + "id": 5594, + "name": "Filaret", + "county": "Dolj" + }, + { + "id": 5595, + "name": "Gangiova", + "county": "Dolj" + }, + { + "id": 5596, + "name": "Comosteni", + "county": "Dolj" + }, + { + "id": 5597, + "name": "Gogosu", + "county": "Dolj" + }, + { + "id": 5598, + "name": "Gogosita", + "county": "Dolj" + }, + { + "id": 5599, + "name": "Stefanel", + "county": "Dolj" + }, + { + "id": 5600, + "name": "Goicea", + "county": "Dolj" + }, + { + "id": 5601, + "name": "Carna", + "county": "Dolj" + }, + { + "id": 5602, + "name": "Goiesti", + "county": "Dolj" + }, + { + "id": 5603, + "name": "Adancata", + "county": "Dolj" + }, + { + "id": 5604, + "name": "Fantani", + "county": "Dolj" + }, + { + "id": 5605, + "name": "Gruita", + "county": "Dolj" + }, + { + "id": 5606, + "name": "Malaesti", + "county": "Dolj" + }, + { + "id": 5607, + "name": "Mogosesti", + "county": "Dolj" + }, + { + "id": 5608, + "name": "Muereni", + "county": "Dolj" + }, + { + "id": 5609, + "name": "Pioresti", + "county": "Dolj" + }, + { + "id": 5610, + "name": "Pometesti", + "county": "Dolj" + }, + { + "id": 5611, + "name": "Popeasa", + "county": "Dolj" + }, + { + "id": 5612, + "name": "Tandara", + "county": "Dolj" + }, + { + "id": 5613, + "name": "Vladimir", + "county": "Dolj" + }, + { + "id": 5614, + "name": "Zlatari", + "county": "Dolj" + }, + { + "id": 5615, + "name": "Grecesti", + "county": "Dolj" + }, + { + "id": 5616, + "name": "Barboi", + "county": "Dolj" + }, + { + "id": 5617, + "name": "Busu", + "county": "Dolj" + }, + { + "id": 5618, + "name": "Busuletu", + "county": "Dolj" + }, + { + "id": 5619, + "name": "Gradistea", + "county": "Dolj" + }, + { + "id": 5620, + "name": "Gropanele", + "county": "Dolj" + }, + { + "id": 5621, + "name": "Izvoare", + "county": "Dolj" + }, + { + "id": 5622, + "name": "Corlate", + "county": "Dolj" + }, + { + "id": 5623, + "name": "Domnu Tudor", + "county": "Dolj" + }, + { + "id": 5624, + "name": "Leu", + "county": "Dolj" + }, + { + "id": 5625, + "name": "Zanoaga", + "county": "Dolj" + }, + { + "id": 5626, + "name": "Lipovu", + "county": "Dolj" + }, + { + "id": 5627, + "name": "Lipovu de Sus", + "county": "Dolj" + }, + { + "id": 5628, + "name": "Macesu de Jos", + "county": "Dolj" + }, + { + "id": 5629, + "name": "Sapata", + "county": "Dolj" + }, + { + "id": 5630, + "name": "Macesu de Sus", + "county": "Dolj" + }, + { + "id": 5631, + "name": "Maglavit", + "county": "Dolj" + }, + { + "id": 5632, + "name": "Hunia", + "county": "Dolj" + }, + { + "id": 5633, + "name": "Malu Mare", + "county": "Dolj" + }, + { + "id": 5634, + "name": "Ghindeni", + "county": "Dolj" + }, + { + "id": 5635, + "name": "Preajba", + "county": "Dolj" + }, + { + "id": 5636, + "name": "Melinesti", + "county": "Dolj" + }, + { + "id": 5637, + "name": "Bodaiesti", + "county": "Dolj" + }, + { + "id": 5638, + "name": "Bodaiestii de Sus", + "county": "Dolj" + }, + { + "id": 5639, + "name": "Godeni", + "county": "Dolj" + }, + { + "id": 5640, + "name": "Muierusu", + "county": "Dolj" + }, + { + "id": 5641, + "name": "Negoiesti", + "county": "Dolj" + }, + { + "id": 5642, + "name": "Odoleni", + "county": "Dolj" + }, + { + "id": 5643, + "name": "Ohaba", + "county": "Dolj" + }, + { + "id": 5644, + "name": "Plostina", + "county": "Dolj" + }, + { + "id": 5645, + "name": "Popesti", + "county": "Dolj" + }, + { + "id": 5646, + "name": "Spineni", + "county": "Dolj" + }, + { + "id": 5647, + "name": "Valea Mare", + "county": "Dolj" + }, + { + "id": 5648, + "name": "Valea Muierii de Jos", + "county": "Dolj" + }, + { + "id": 5649, + "name": "Mischii", + "county": "Dolj" + }, + { + "id": 5650, + "name": "Calinesti", + "county": "Dolj" + }, + { + "id": 5651, + "name": "Gogosesti", + "county": "Dolj" + }, + { + "id": 5652, + "name": "Mlecanesti", + "county": "Dolj" + }, + { + "id": 5653, + "name": "Motoci", + "county": "Dolj" + }, + { + "id": 5654, + "name": "Urechesti", + "county": "Dolj" + }, + { + "id": 5655, + "name": "Marsani", + "county": "Dolj" + }, + { + "id": 5656, + "name": "Motatei", + "county": "Dolj" + }, + { + "id": 5657, + "name": "Dobridor", + "county": "Dolj" + }, + { + "id": 5658, + "name": "Motatei Gara", + "county": "Dolj" + }, + { + "id": 5659, + "name": "Balota de Jos", + "county": "Dolj" + }, + { + "id": 5660, + "name": "Balota de Sus", + "county": "Dolj" + }, + { + "id": 5661, + "name": "Busteni", + "county": "Dolj" + }, + { + "id": 5662, + "name": "Gaia", + "county": "Dolj" + }, + { + "id": 5663, + "name": "Murgasi", + "county": "Dolj" + }, + { + "id": 5664, + "name": "Picaturile", + "county": "Dolj" + }, + { + "id": 5665, + "name": "Rupturile", + "county": "Dolj" + }, + { + "id": 5666, + "name": "Velesti", + "county": "Dolj" + }, + { + "id": 5667, + "name": "Negoi", + "county": "Dolj" + }, + { + "id": 5668, + "name": "Catane", + "county": "Dolj" + }, + { + "id": 5669, + "name": "Catanele Noi", + "county": "Dolj" + }, + { + "id": 5670, + "name": "Orodel", + "county": "Dolj" + }, + { + "id": 5671, + "name": "Bechet", + "county": "Dolj" + }, + { + "id": 5672, + "name": "Calugarei", + "county": "Dolj" + }, + { + "id": 5673, + "name": "Cornu", + "county": "Dolj" + }, + { + "id": 5674, + "name": "Teiu", + "county": "Dolj" + }, + { + "id": 5675, + "name": "Ostroveni", + "county": "Dolj" + }, + { + "id": 5676, + "name": "Listeava", + "county": "Dolj" + }, + { + "id": 5677, + "name": "Perisor", + "county": "Dolj" + }, + { + "id": 5678, + "name": "Maracinele", + "county": "Dolj" + }, + { + "id": 5679, + "name": "Pielesti", + "county": "Dolj" + }, + { + "id": 5680, + "name": "Campeni", + "county": "Dolj" + }, + { + "id": 5681, + "name": "Langa", + "county": "Dolj" + }, + { + "id": 5682, + "name": "Piscu Vechi", + "county": "Dolj" + }, + { + "id": 5683, + "name": "Ghidici", + "county": "Dolj" + }, + { + "id": 5684, + "name": "Pisculet", + "county": "Dolj" + }, + { + "id": 5685, + "name": "Plenita", + "county": "Dolj" + }, + { + "id": 5686, + "name": "Castrele Traiane", + "county": "Dolj" + }, + { + "id": 5687, + "name": "Poiana Mare", + "county": "Dolj" + }, + { + "id": 5688, + "name": "Tunarii Noi", + "county": "Dolj" + }, + { + "id": 5689, + "name": "Tunarii Vechi", + "county": "Dolj" + }, + { + "id": 5690, + "name": "Predesti", + "county": "Dolj" + }, + { + "id": 5691, + "name": "Bucicani", + "county": "Dolj" + }, + { + "id": 5692, + "name": "Carstovani", + "county": "Dolj" + }, + { + "id": 5693, + "name": "Frasin", + "county": "Dolj" + }, + { + "id": 5694, + "name": "Milovan", + "county": "Dolj" + }, + { + "id": 5695, + "name": "Plesoi", + "county": "Dolj" + }, + { + "id": 5696, + "name": "Predestii Mici", + "county": "Dolj" + }, + { + "id": 5697, + "name": "Radovan", + "county": "Dolj" + }, + { + "id": 5698, + "name": "Fantanele", + "county": "Dolj" + }, + { + "id": 5699, + "name": "Intorsura", + "county": "Dolj" + }, + { + "id": 5700, + "name": "Tarnava", + "county": "Dolj" + }, + { + "id": 5701, + "name": "Rast", + "county": "Dolj" + }, + { + "id": 5702, + "name": "Robanestii de Jos", + "county": "Dolj" + }, + { + "id": 5703, + "name": "Bojoiu", + "county": "Dolj" + }, + { + "id": 5704, + "name": "Golfin", + "county": "Dolj" + }, + { + "id": 5705, + "name": "Lacrita Mare", + "county": "Dolj" + }, + { + "id": 5706, + "name": "Lacrita Mica", + "county": "Dolj" + }, + { + "id": 5707, + "name": "Robanestii de Sus", + "county": "Dolj" + }, + { + "id": 5708, + "name": "Sadova", + "county": "Dolj" + }, + { + "id": 5709, + "name": "Piscu Sadovei", + "county": "Dolj" + }, + { + "id": 5710, + "name": "Salcuta", + "county": "Dolj" + }, + { + "id": 5711, + "name": "Marza", + "county": "Dolj" + }, + { + "id": 5712, + "name": "Plopsor", + "county": "Dolj" + }, + { + "id": 5713, + "name": "Tencanau", + "county": "Dolj" + }, + { + "id": 5714, + "name": "Scaesti", + "county": "Dolj" + }, + { + "id": 5715, + "name": "Valea lui Patru", + "county": "Dolj" + }, + { + "id": 5716, + "name": "Seaca de Camp", + "county": "Dolj" + }, + { + "id": 5717, + "name": "Piscu Nou", + "county": "Dolj" + }, + { + "id": 5718, + "name": "Seaca de Padure", + "county": "Dolj" + }, + { + "id": 5719, + "name": "Rachita de Sus", + "county": "Dolj" + }, + { + "id": 5720, + "name": "Veleni", + "county": "Dolj" + }, + { + "id": 5721, + "name": "Secu", + "county": "Dolj" + }, + { + "id": 5722, + "name": "Comanicea", + "county": "Dolj" + }, + { + "id": 5723, + "name": "Smadovicioara de Secu", + "county": "Dolj" + }, + { + "id": 5724, + "name": "Sumandra", + "county": "Dolj" + }, + { + "id": 5725, + "name": "Silistea Crucii", + "county": "Dolj" + }, + { + "id": 5726, + "name": "Sopot", + "county": "Dolj" + }, + { + "id": 5727, + "name": "Bascov", + "county": "Dolj" + }, + { + "id": 5728, + "name": "Belot", + "county": "Dolj" + }, + { + "id": 5729, + "name": "Cernat", + "county": "Dolj" + }, + { + "id": 5730, + "name": "Pereni", + "county": "Dolj" + }, + { + "id": 5731, + "name": "Pietroaia", + "county": "Dolj" + }, + { + "id": 5732, + "name": "Sarsca", + "county": "Dolj" + }, + { + "id": 5733, + "name": "Teasc", + "county": "Dolj" + }, + { + "id": 5734, + "name": "Secui", + "county": "Dolj" + }, + { + "id": 5735, + "name": "Terpezita", + "county": "Dolj" + }, + { + "id": 5736, + "name": "Caruia", + "county": "Dolj" + }, + { + "id": 5737, + "name": "Caciulatu", + "county": "Dolj" + }, + { + "id": 5738, + "name": "Floran", + "county": "Dolj" + }, + { + "id": 5739, + "name": "Lazu", + "county": "Dolj" + }, + { + "id": 5740, + "name": "Teslui", + "county": "Dolj" + }, + { + "id": 5741, + "name": "Cosereni", + "county": "Dolj" + }, + { + "id": 5742, + "name": "Fantanele", + "county": "Dolj" + }, + { + "id": 5743, + "name": "Preajba de Jos", + "county": "Dolj" + }, + { + "id": 5744, + "name": "Preajba de Padure", + "county": "Dolj" + }, + { + "id": 5745, + "name": "Tartal", + "county": "Dolj" + }, + { + "id": 5746, + "name": "Urieni", + "county": "Dolj" + }, + { + "id": 5747, + "name": "Viisoara Mosneni", + "county": "Dolj" + }, + { + "id": 5748, + "name": "Tuglui", + "county": "Dolj" + }, + { + "id": 5749, + "name": "Jiul", + "county": "Dolj" + }, + { + "id": 5750, + "name": "Unirea", + "county": "Dolj" + }, + { + "id": 5751, + "name": "Urzicuta", + "county": "Dolj" + }, + { + "id": 5752, + "name": "Urzica Mare", + "county": "Dolj" + }, + { + "id": 5753, + "name": "Valea Stanciului", + "county": "Dolj" + }, + { + "id": 5754, + "name": "Horezu Poenari", + "county": "Dolj" + }, + { + "id": 5755, + "name": "Vela", + "county": "Dolj" + }, + { + "id": 5756, + "name": "Bucovicior", + "county": "Dolj" + }, + { + "id": 5757, + "name": "Cetatuia", + "county": "Dolj" + }, + { + "id": 5758, + "name": "Desnatui", + "county": "Dolj" + }, + { + "id": 5759, + "name": "Gubaucea", + "county": "Dolj" + }, + { + "id": 5760, + "name": "Seglet", + "county": "Dolj" + }, + { + "id": 5761, + "name": "Suharu", + "county": "Dolj" + }, + { + "id": 5762, + "name": "Stiubei", + "county": "Dolj" + }, + { + "id": 5763, + "name": "Verbita", + "county": "Dolj" + }, + { + "id": 5764, + "name": "Verbicioara", + "county": "Dolj" + }, + { + "id": 5765, + "name": "Vartop", + "county": "Dolj" + }, + { + "id": 5766, + "name": "Varvoru de Jos", + "county": "Dolj" + }, + { + "id": 5767, + "name": "Bujor", + "county": "Dolj" + }, + { + "id": 5768, + "name": "Ciutura", + "county": "Dolj" + }, + { + "id": 5769, + "name": "Criva", + "county": "Dolj" + }, + { + "id": 5770, + "name": "Dobromira", + "county": "Dolj" + }, + { + "id": 5771, + "name": "Dragoaia", + "county": "Dolj" + }, + { + "id": 5772, + "name": "Gabru", + "county": "Dolj" + }, + { + "id": 5773, + "name": "Varvor", + "county": "Dolj" + }, + { + "id": 5774, + "name": "Galati", + "county": "Galati" + }, + { + "id": 5775, + "name": "Sendreni", + "county": "Galati" + }, + { + "id": 5776, + "name": "Movileni", + "county": "Galati" + }, + { + "id": 5777, + "name": "Serbestii Vechi", + "county": "Galati" + }, + { + "id": 5778, + "name": "Vanatori", + "county": "Galati" + }, + { + "id": 5779, + "name": "Costi", + "county": "Galati" + }, + { + "id": 5780, + "name": "Odaia Manolache", + "county": "Galati" + }, + { + "id": 5781, + "name": "Tecuci", + "county": "Galati" + }, + { + "id": 5782, + "name": "Draganesti", + "county": "Galati" + }, + { + "id": 5783, + "name": "Malu Alb", + "county": "Galati" + }, + { + "id": 5784, + "name": "Munteni", + "county": "Galati" + }, + { + "id": 5785, + "name": "Frunzeasca", + "county": "Galati" + }, + { + "id": 5786, + "name": "Negrilesti", + "county": "Galati" + }, + { + "id": 5787, + "name": "Slobozia Blaneasa", + "county": "Galati" + }, + { + "id": 5788, + "name": "Tiganesti", + "county": "Galati" + }, + { + "id": 5789, + "name": "Ungureni", + "county": "Galati" + }, + { + "id": 5790, + "name": "Beresti", + "county": "Galati" + }, + { + "id": 5791, + "name": "Beresti-Meria", + "county": "Galati" + }, + { + "id": 5792, + "name": "Aldesti", + "county": "Galati" + }, + { + "id": 5793, + "name": "Balintesti", + "county": "Galati" + }, + { + "id": 5794, + "name": "Onciu", + "county": "Galati" + }, + { + "id": 5795, + "name": "Plesa", + "county": "Galati" + }, + { + "id": 5796, + "name": "Prodanesti", + "county": "Galati" + }, + { + "id": 5797, + "name": "Puricani", + "county": "Galati" + }, + { + "id": 5798, + "name": "Saseni", + "county": "Galati" + }, + { + "id": 5799, + "name": "Slivna", + "county": "Galati" + }, + { + "id": 5800, + "name": "Sipote", + "county": "Galati" + }, + { + "id": 5801, + "name": "Targu Bujor", + "county": "Galati" + }, + { + "id": 5802, + "name": "Moscu", + "county": "Galati" + }, + { + "id": 5803, + "name": "Umbraresti", + "county": "Galati" + }, + { + "id": 5804, + "name": "Barcea", + "county": "Galati" + }, + { + "id": 5805, + "name": "Podoleni", + "county": "Galati" + }, + { + "id": 5806, + "name": "Balabanesti", + "county": "Galati" + }, + { + "id": 5807, + "name": "Bursucani", + "county": "Galati" + }, + { + "id": 5808, + "name": "Cruceanu", + "county": "Galati" + }, + { + "id": 5809, + "name": "Lungesti", + "county": "Galati" + }, + { + "id": 5810, + "name": "Radesti", + "county": "Galati" + }, + { + "id": 5811, + "name": "Zimbru", + "county": "Galati" + }, + { + "id": 5812, + "name": "Balasesti", + "county": "Galati" + }, + { + "id": 5813, + "name": "Ciuresti", + "county": "Galati" + }, + { + "id": 5814, + "name": "Ciurestii Noi", + "county": "Galati" + }, + { + "id": 5815, + "name": "Pupezeni", + "county": "Galati" + }, + { + "id": 5816, + "name": "Baleni", + "county": "Galati" + }, + { + "id": 5817, + "name": "Baneasa", + "county": "Galati" + }, + { + "id": 5818, + "name": "Roscani", + "county": "Galati" + }, + { + "id": 5819, + "name": "Branistea", + "county": "Galati" + }, + { + "id": 5820, + "name": "Lozova", + "county": "Galati" + }, + { + "id": 5821, + "name": "Traian", + "county": "Galati" + }, + { + "id": 5822, + "name": "Vasile Alecsandri", + "county": "Galati" + }, + { + "id": 5823, + "name": "Brahasesti", + "county": "Galati" + }, + { + "id": 5824, + "name": "Corcioveni", + "county": "Galati" + }, + { + "id": 5825, + "name": "Cositeni", + "county": "Galati" + }, + { + "id": 5826, + "name": "Toflea", + "county": "Galati" + }, + { + "id": 5827, + "name": "Buciumeni", + "county": "Galati" + }, + { + "id": 5828, + "name": "Hantesti", + "county": "Galati" + }, + { + "id": 5829, + "name": "Tecucelu Sec", + "county": "Galati" + }, + { + "id": 5830, + "name": "Vizuresti", + "county": "Galati" + }, + { + "id": 5831, + "name": "Cavadinesti", + "county": "Galati" + }, + { + "id": 5832, + "name": "Comanesti", + "county": "Galati" + }, + { + "id": 5833, + "name": "Ganesti", + "county": "Galati" + }, + { + "id": 5834, + "name": "Vadeni", + "county": "Galati" + }, + { + "id": 5835, + "name": "Certesti", + "county": "Galati" + }, + { + "id": 5836, + "name": "Carlomanesti", + "county": "Galati" + }, + { + "id": 5837, + "name": "Cotoroaia", + "county": "Galati" + }, + { + "id": 5838, + "name": "Corod", + "county": "Galati" + }, + { + "id": 5839, + "name": "Blanzi", + "county": "Galati" + }, + { + "id": 5840, + "name": "Bratulesti", + "county": "Galati" + }, + { + "id": 5841, + "name": "Carapcesti", + "county": "Galati" + }, + { + "id": 5842, + "name": "Corni", + "county": "Galati" + }, + { + "id": 5843, + "name": "Maciseni", + "county": "Galati" + }, + { + "id": 5844, + "name": "Urlesti", + "county": "Galati" + }, + { + "id": 5845, + "name": "Cosmesti", + "county": "Galati" + }, + { + "id": 5846, + "name": "Baltareti", + "county": "Galati" + }, + { + "id": 5847, + "name": "Cosmestii-Vale", + "county": "Galati" + }, + { + "id": 5848, + "name": "Furcenii Noi", + "county": "Galati" + }, + { + "id": 5849, + "name": "Furcenii Vechi", + "county": "Galati" + }, + { + "id": 5850, + "name": "Satu Nou", + "county": "Galati" + }, + { + "id": 5851, + "name": "Costache Negri", + "county": "Galati" + }, + { + "id": 5852, + "name": "Cuca", + "county": "Galati" + }, + { + "id": 5853, + "name": "Cudalbi", + "county": "Galati" + }, + { + "id": 5854, + "name": "Draguseni", + "county": "Galati" + }, + { + "id": 5855, + "name": "Adam", + "county": "Galati" + }, + { + "id": 5856, + "name": "Cauiesti", + "county": "Galati" + }, + { + "id": 5857, + "name": "Fundeanu", + "county": "Galati" + }, + { + "id": 5858, + "name": "Ghinghesti", + "county": "Galati" + }, + { + "id": 5859, + "name": "Nicopole", + "county": "Galati" + }, + { + "id": 5860, + "name": "Stietesti", + "county": "Galati" + }, + { + "id": 5861, + "name": "Fartanesti", + "county": "Galati" + }, + { + "id": 5862, + "name": "Viile", + "county": "Galati" + }, + { + "id": 5863, + "name": "Foltesti", + "county": "Galati" + }, + { + "id": 5864, + "name": "Stoicani", + "county": "Galati" + }, + { + "id": 5865, + "name": "Frumusita", + "county": "Galati" + }, + { + "id": 5866, + "name": "Ijdileni", + "county": "Galati" + }, + { + "id": 5867, + "name": "Tamaoani", + "county": "Galati" + }, + { + "id": 5868, + "name": "Fundenii Noi", + "county": "Galati" + }, + { + "id": 5869, + "name": "Fundeni", + "county": "Galati" + }, + { + "id": 5870, + "name": "Hanu Conachi", + "county": "Galati" + }, + { + "id": 5871, + "name": "Lungoci", + "county": "Galati" + }, + { + "id": 5872, + "name": "Ghidigeni", + "county": "Galati" + }, + { + "id": 5873, + "name": "Gara Ghidigeni", + "county": "Galati" + }, + { + "id": 5874, + "name": "Gefu", + "county": "Galati" + }, + { + "id": 5875, + "name": "Garbovat", + "county": "Galati" + }, + { + "id": 5876, + "name": "Gura Garbovatului", + "county": "Galati" + }, + { + "id": 5877, + "name": "Slobozia Corni", + "county": "Galati" + }, + { + "id": 5878, + "name": "Talpigi", + "county": "Galati" + }, + { + "id": 5879, + "name": "Taplau", + "county": "Galati" + }, + { + "id": 5880, + "name": "Gohor", + "county": "Galati" + }, + { + "id": 5881, + "name": "Gara Berheci", + "county": "Galati" + }, + { + "id": 5882, + "name": "Ireasca", + "county": "Galati" + }, + { + "id": 5883, + "name": "Nartesti", + "county": "Galati" + }, + { + "id": 5884, + "name": "Posta", + "county": "Galati" + }, + { + "id": 5885, + "name": "Grivita", + "county": "Galati" + }, + { + "id": 5886, + "name": "Calmatui", + "county": "Galati" + }, + { + "id": 5887, + "name": "Independenta", + "county": "Galati" + }, + { + "id": 5888, + "name": "Ivesti", + "county": "Galati" + }, + { + "id": 5889, + "name": "Bucesti", + "county": "Galati" + }, + { + "id": 5890, + "name": "Jorasti", + "county": "Galati" + }, + { + "id": 5891, + "name": "Lunca", + "county": "Galati" + }, + { + "id": 5892, + "name": "Zarnesti", + "county": "Galati" + }, + { + "id": 5893, + "name": "Liesti", + "county": "Galati" + }, + { + "id": 5894, + "name": "Matca", + "county": "Galati" + }, + { + "id": 5895, + "name": "Mastacani", + "county": "Galati" + }, + { + "id": 5896, + "name": "Chiraftei", + "county": "Galati" + }, + { + "id": 5897, + "name": "Movileni", + "county": "Galati" + }, + { + "id": 5898, + "name": "Namoloasa", + "county": "Galati" + }, + { + "id": 5899, + "name": "Crangeni", + "county": "Galati" + }, + { + "id": 5900, + "name": "Namoloasa Sat", + "county": "Galati" + }, + { + "id": 5901, + "name": "Nicoresti", + "county": "Galati" + }, + { + "id": 5902, + "name": "Branistea", + "county": "Galati" + }, + { + "id": 5903, + "name": "Coasta Lupei", + "county": "Galati" + }, + { + "id": 5904, + "name": "Dobrinesti", + "county": "Galati" + }, + { + "id": 5905, + "name": "Fantani", + "county": "Galati" + }, + { + "id": 5906, + "name": "Grozavesti", + "county": "Galati" + }, + { + "id": 5907, + "name": "Ionasesti", + "county": "Galati" + }, + { + "id": 5908, + "name": "Malureni", + "county": "Galati" + }, + { + "id": 5909, + "name": "Piscu Corbului", + "county": "Galati" + }, + { + "id": 5910, + "name": "Poiana", + "county": "Galati" + }, + { + "id": 5911, + "name": "Sarbi", + "county": "Galati" + }, + { + "id": 5912, + "name": "Visina", + "county": "Galati" + }, + { + "id": 5913, + "name": "Oancea", + "county": "Galati" + }, + { + "id": 5914, + "name": "Slobozia Oancea", + "county": "Galati" + }, + { + "id": 5915, + "name": "Pechea", + "county": "Galati" + }, + { + "id": 5916, + "name": "Lupele", + "county": "Galati" + }, + { + "id": 5917, + "name": "Piscu", + "county": "Galati" + }, + { + "id": 5918, + "name": "Vames", + "county": "Galati" + }, + { + "id": 5919, + "name": "Priponesti", + "county": "Galati" + }, + { + "id": 5920, + "name": "Ciorasti", + "county": "Galati" + }, + { + "id": 5921, + "name": "Hustiu", + "county": "Galati" + }, + { + "id": 5922, + "name": "Liesti", + "county": "Galati" + }, + { + "id": 5923, + "name": "Priponestii de Jos", + "county": "Galati" + }, + { + "id": 5924, + "name": "Rediu", + "county": "Galati" + }, + { + "id": 5925, + "name": "Plevna", + "county": "Galati" + }, + { + "id": 5926, + "name": "Suhurlui", + "county": "Galati" + }, + { + "id": 5927, + "name": "Scanteiesti", + "county": "Galati" + }, + { + "id": 5928, + "name": "Fantanele", + "county": "Galati" + }, + { + "id": 5929, + "name": "Schela", + "county": "Galati" + }, + { + "id": 5930, + "name": "Negrea", + "county": "Galati" + }, + { + "id": 5931, + "name": "Slobozia Conachi", + "county": "Galati" + }, + { + "id": 5932, + "name": "Cuza Voda", + "county": "Galati" + }, + { + "id": 5933, + "name": "Izvoarele", + "county": "Galati" + }, + { + "id": 5934, + "name": "Smardan", + "county": "Galati" + }, + { + "id": 5935, + "name": "Cismele", + "county": "Galati" + }, + { + "id": 5936, + "name": "Mihail Kogalniceanu", + "county": "Galati" + }, + { + "id": 5937, + "name": "Smulti", + "county": "Galati" + }, + { + "id": 5938, + "name": "Suceveni", + "county": "Galati" + }, + { + "id": 5939, + "name": "Rogojeni", + "county": "Galati" + }, + { + "id": 5940, + "name": "Tudor Vladimirescu", + "county": "Galati" + }, + { + "id": 5941, + "name": "Tulucesti", + "county": "Galati" + }, + { + "id": 5942, + "name": "Sivita", + "county": "Galati" + }, + { + "id": 5943, + "name": "Tatarca", + "county": "Galati" + }, + { + "id": 5944, + "name": "Tepu", + "county": "Galati" + }, + { + "id": 5945, + "name": "Tepu de Sus", + "county": "Galati" + }, + { + "id": 5946, + "name": "Umbraresti", + "county": "Galati" + }, + { + "id": 5947, + "name": "Condrea", + "county": "Galati" + }, + { + "id": 5948, + "name": "Salcia", + "county": "Galati" + }, + { + "id": 5949, + "name": "Silistea", + "county": "Galati" + }, + { + "id": 5950, + "name": "Torcesti", + "county": "Galati" + }, + { + "id": 5951, + "name": "Umbraresti-Deal", + "county": "Galati" + }, + { + "id": 5952, + "name": "Valea Marului", + "county": "Galati" + }, + { + "id": 5953, + "name": "Mandresti", + "county": "Galati" + }, + { + "id": 5954, + "name": "Varlezi", + "county": "Galati" + }, + { + "id": 5955, + "name": "Craiesti", + "county": "Galati" + }, + { + "id": 5956, + "name": "Vladesti", + "county": "Galati" + }, + { + "id": 5957, + "name": "Branesti", + "county": "Galati" + }, + { + "id": 5958, + "name": "Targu Jiu", + "county": "Gorj" + }, + { + "id": 5959, + "name": "Barsesti", + "county": "Gorj" + }, + { + "id": 5960, + "name": "Dragoeni", + "county": "Gorj" + }, + { + "id": 5961, + "name": "Iezureni", + "county": "Gorj" + }, + { + "id": 5962, + "name": "Polata", + "county": "Gorj" + }, + { + "id": 5963, + "name": "Preajba Mare", + "county": "Gorj" + }, + { + "id": 5964, + "name": "Romanesti", + "county": "Gorj" + }, + { + "id": 5965, + "name": "Slobozia", + "county": "Gorj" + }, + { + "id": 5966, + "name": "Ursati", + "county": "Gorj" + }, + { + "id": 5967, + "name": "Balesti", + "county": "Gorj" + }, + { + "id": 5968, + "name": "Ceauru", + "county": "Gorj" + }, + { + "id": 5969, + "name": "Cornesti", + "county": "Gorj" + }, + { + "id": 5970, + "name": "Gavanesti", + "county": "Gorj" + }, + { + "id": 5971, + "name": "Rasova", + "county": "Gorj" + }, + { + "id": 5972, + "name": "Stolojani", + "county": "Gorj" + }, + { + "id": 5973, + "name": "Talpasesti", + "county": "Gorj" + }, + { + "id": 5974, + "name": "Tamasesti", + "county": "Gorj" + }, + { + "id": 5975, + "name": "Voinigesti", + "county": "Gorj" + }, + { + "id": 5976, + "name": "Dragutesti", + "county": "Gorj" + }, + { + "id": 5977, + "name": "Carbesti", + "county": "Gorj" + }, + { + "id": 5978, + "name": "Dambova", + "county": "Gorj" + }, + { + "id": 5979, + "name": "Iasi-Gorj", + "county": "Gorj" + }, + { + "id": 5980, + "name": "Talvesti", + "county": "Gorj" + }, + { + "id": 5981, + "name": "Urechesti", + "county": "Gorj" + }, + { + "id": 5982, + "name": "Turcinesti", + "county": "Gorj" + }, + { + "id": 5983, + "name": "Cartiu", + "county": "Gorj" + }, + { + "id": 5984, + "name": "Horezu", + "county": "Gorj" + }, + { + "id": 5985, + "name": "Rugi", + "county": "Gorj" + }, + { + "id": 5986, + "name": "Motru", + "county": "Gorj" + }, + { + "id": 5987, + "name": "Dealu Pomilor", + "county": "Gorj" + }, + { + "id": 5988, + "name": "Horasti", + "county": "Gorj" + }, + { + "id": 5989, + "name": "Insuratei", + "county": "Gorj" + }, + { + "id": 5990, + "name": "Leurda", + "county": "Gorj" + }, + { + "id": 5991, + "name": "Plostina", + "county": "Gorj" + }, + { + "id": 5992, + "name": "Lupoita", + "county": "Gorj" + }, + { + "id": 5993, + "name": "Rosiuta", + "county": "Gorj" + }, + { + "id": 5994, + "name": "Rapa", + "county": "Gorj" + }, + { + "id": 5995, + "name": "Novaci", + "county": "Gorj" + }, + { + "id": 5996, + "name": "Bercesti", + "county": "Gorj" + }, + { + "id": 5997, + "name": "Hirisesti", + "county": "Gorj" + }, + { + "id": 5998, + "name": "Pociovalistea", + "county": "Gorj" + }, + { + "id": 5999, + "name": "Sitesti", + "county": "Gorj" + }, + { + "id": 6000, + "name": "Targu Carbunesti", + "county": "Gorj" + }, + { + "id": 6001, + "name": "Blahnita de Jos", + "county": "Gorj" + }, + { + "id": 6002, + "name": "Carbunesti-Sat", + "county": "Gorj" + }, + { + "id": 6003, + "name": "Cojani", + "county": "Gorj" + }, + { + "id": 6004, + "name": "Cretesti", + "county": "Gorj" + }, + { + "id": 6005, + "name": "Curteana", + "county": "Gorj" + }, + { + "id": 6006, + "name": "Floresteni", + "county": "Gorj" + }, + { + "id": 6007, + "name": "Macesu", + "county": "Gorj" + }, + { + "id": 6008, + "name": "Pojogeni", + "county": "Gorj" + }, + { + "id": 6009, + "name": "Rogojeni", + "county": "Gorj" + }, + { + "id": 6010, + "name": "Stefanesti", + "county": "Gorj" + }, + { + "id": 6011, + "name": "Ticleni", + "county": "Gorj" + }, + { + "id": 6012, + "name": "Albeni", + "county": "Gorj" + }, + { + "id": 6013, + "name": "Barzeiu de Gilort", + "county": "Gorj" + }, + { + "id": 6014, + "name": "Bolbocesti", + "county": "Gorj" + }, + { + "id": 6015, + "name": "Doseni", + "county": "Gorj" + }, + { + "id": 6016, + "name": "Mirosloveni", + "county": "Gorj" + }, + { + "id": 6017, + "name": "Prunesti", + "county": "Gorj" + }, + { + "id": 6018, + "name": "Alimpesti", + "county": "Gorj" + }, + { + "id": 6019, + "name": "Ciupercenii de Oltet", + "county": "Gorj" + }, + { + "id": 6020, + "name": "Corsoru", + "county": "Gorj" + }, + { + "id": 6021, + "name": "Nistoresti", + "county": "Gorj" + }, + { + "id": 6022, + "name": "Sarbesti", + "county": "Gorj" + }, + { + "id": 6023, + "name": "Aninoasa", + "county": "Gorj" + }, + { + "id": 6024, + "name": "Bobaia", + "county": "Gorj" + }, + { + "id": 6025, + "name": "Costesti", + "county": "Gorj" + }, + { + "id": 6026, + "name": "Groserea", + "county": "Gorj" + }, + { + "id": 6027, + "name": "Sterpoaia", + "county": "Gorj" + }, + { + "id": 6028, + "name": "Arcani", + "county": "Gorj" + }, + { + "id": 6029, + "name": "Campofeni", + "county": "Gorj" + }, + { + "id": 6030, + "name": "Sanatesti", + "county": "Gorj" + }, + { + "id": 6031, + "name": "Stroiesti", + "county": "Gorj" + }, + { + "id": 6032, + "name": "Baia de Fier", + "county": "Gorj" + }, + { + "id": 6033, + "name": "Cernadia", + "county": "Gorj" + }, + { + "id": 6034, + "name": "Voitestii de Vale", + "county": "Gorj" + }, + { + "id": 6035, + "name": "Balanesti", + "county": "Gorj" + }, + { + "id": 6036, + "name": "Blidari", + "county": "Gorj" + }, + { + "id": 6037, + "name": "Canepesti", + "county": "Gorj" + }, + { + "id": 6038, + "name": "Glodeni", + "county": "Gorj" + }, + { + "id": 6039, + "name": "Ohaba", + "county": "Gorj" + }, + { + "id": 6040, + "name": "Voitestii din Deal", + "county": "Gorj" + }, + { + "id": 6041, + "name": "Barbatesti", + "county": "Gorj" + }, + { + "id": 6042, + "name": "Musculesti", + "county": "Gorj" + }, + { + "id": 6043, + "name": "Petresti", + "county": "Gorj" + }, + { + "id": 6044, + "name": "Socu", + "county": "Gorj" + }, + { + "id": 6045, + "name": "Bengesti", + "county": "Gorj" + }, + { + "id": 6046, + "name": "Balcesti", + "county": "Gorj" + }, + { + "id": 6047, + "name": "Bircii", + "county": "Gorj" + }, + { + "id": 6048, + "name": "Ciocadia", + "county": "Gorj" + }, + { + "id": 6049, + "name": "Berlesti", + "county": "Gorj" + }, + { + "id": 6050, + "name": "Barzeiu", + "county": "Gorj" + }, + { + "id": 6051, + "name": "Galcesti", + "county": "Gorj" + }, + { + "id": 6052, + "name": "Lihulesti", + "county": "Gorj" + }, + { + "id": 6053, + "name": "Parau Viu", + "county": "Gorj" + }, + { + "id": 6054, + "name": "Scrada", + "county": "Gorj" + }, + { + "id": 6055, + "name": "Scurtu", + "county": "Gorj" + }, + { + "id": 6056, + "name": "Balteni", + "county": "Gorj" + }, + { + "id": 6057, + "name": "Cocoreni", + "county": "Gorj" + }, + { + "id": 6058, + "name": "Moi", + "county": "Gorj" + }, + { + "id": 6059, + "name": "Pesteana Jiu", + "county": "Gorj" + }, + { + "id": 6060, + "name": "Rovinari", + "county": "Gorj" + }, + { + "id": 6061, + "name": "Vladuleni", + "county": "Gorj" + }, + { + "id": 6062, + "name": "Bolbosi", + "county": "Gorj" + }, + { + "id": 6063, + "name": "Balacesti", + "county": "Gorj" + }, + { + "id": 6064, + "name": "Bolboasa", + "county": "Gorj" + }, + { + "id": 6065, + "name": "Igirosu", + "county": "Gorj" + }, + { + "id": 6066, + "name": "Miclosu", + "county": "Gorj" + }, + { + "id": 6067, + "name": "Ohaba Jiu", + "county": "Gorj" + }, + { + "id": 6068, + "name": "Valea", + "county": "Gorj" + }, + { + "id": 6069, + "name": "Borascu", + "county": "Gorj" + }, + { + "id": 6070, + "name": "Baniu", + "county": "Gorj" + }, + { + "id": 6071, + "name": "Calaparu", + "county": "Gorj" + }, + { + "id": 6072, + "name": "Gura Menti", + "county": "Gorj" + }, + { + "id": 6073, + "name": "Mentii din Dos", + "county": "Gorj" + }, + { + "id": 6074, + "name": "Miluta", + "county": "Gorj" + }, + { + "id": 6075, + "name": "Scorusu", + "county": "Gorj" + }, + { + "id": 6076, + "name": "Branesti", + "county": "Gorj" + }, + { + "id": 6077, + "name": "Badesti", + "county": "Gorj" + }, + { + "id": 6078, + "name": "Brebenei", + "county": "Gorj" + }, + { + "id": 6079, + "name": "Capu Dealului", + "county": "Gorj" + }, + { + "id": 6080, + "name": "Gilortu", + "county": "Gorj" + }, + { + "id": 6081, + "name": "Parau", + "county": "Gorj" + }, + { + "id": 6082, + "name": "Bumbesti-Jiu", + "county": "Gorj" + }, + { + "id": 6083, + "name": "Curtisoara", + "county": "Gorj" + }, + { + "id": 6084, + "name": "Lazaresti", + "county": "Gorj" + }, + { + "id": 6085, + "name": "Plesa", + "county": "Gorj" + }, + { + "id": 6086, + "name": "Tetila", + "county": "Gorj" + }, + { + "id": 6087, + "name": "Bumbesti-Pitic", + "county": "Gorj" + }, + { + "id": 6088, + "name": "Carligei", + "county": "Gorj" + }, + { + "id": 6089, + "name": "Poienari", + "county": "Gorj" + }, + { + "id": 6090, + "name": "Bustuchin", + "county": "Gorj" + }, + { + "id": 6091, + "name": "Cionti", + "county": "Gorj" + }, + { + "id": 6092, + "name": "Motorgi", + "county": "Gorj" + }, + { + "id": 6093, + "name": "Namete", + "county": "Gorj" + }, + { + "id": 6094, + "name": "Poienita", + "county": "Gorj" + }, + { + "id": 6095, + "name": "Poiana Seciuri", + "county": "Gorj" + }, + { + "id": 6096, + "name": "Pojaru", + "county": "Gorj" + }, + { + "id": 6097, + "name": "Valea Pojarului", + "county": "Gorj" + }, + { + "id": 6098, + "name": "Capreni", + "county": "Gorj" + }, + { + "id": 6099, + "name": "Alunis", + "county": "Gorj" + }, + { + "id": 6100, + "name": "Bratesti", + "county": "Gorj" + }, + { + "id": 6101, + "name": "Bulbuceni", + "county": "Gorj" + }, + { + "id": 6102, + "name": "Cetatea", + "county": "Gorj" + }, + { + "id": 6103, + "name": "Cornetu", + "county": "Gorj" + }, + { + "id": 6104, + "name": "Dealu Spirei", + "county": "Gorj" + }, + { + "id": 6105, + "name": "Satu Nou", + "county": "Gorj" + }, + { + "id": 6106, + "name": "Catunele", + "county": "Gorj" + }, + { + "id": 6107, + "name": "Dealu Viilor", + "county": "Gorj" + }, + { + "id": 6108, + "name": "Lupoaia", + "county": "Gorj" + }, + { + "id": 6109, + "name": "Steic", + "county": "Gorj" + }, + { + "id": 6110, + "name": "Valea Manastirii", + "county": "Gorj" + }, + { + "id": 6111, + "name": "Valea Perilor", + "county": "Gorj" + }, + { + "id": 6112, + "name": "Ciuperceni", + "county": "Gorj" + }, + { + "id": 6113, + "name": "Boboiesti", + "county": "Gorj" + }, + { + "id": 6114, + "name": "Pesteana Vulcan", + "county": "Gorj" + }, + { + "id": 6115, + "name": "Priporu", + "county": "Gorj" + }, + { + "id": 6116, + "name": "Stramba Vulcan", + "county": "Gorj" + }, + { + "id": 6117, + "name": "Vartopu", + "county": "Gorj" + }, + { + "id": 6118, + "name": "Zorzila", + "county": "Gorj" + }, + { + "id": 6119, + "name": "Calnic", + "county": "Gorj" + }, + { + "id": 6120, + "name": "Calnicu de Sus", + "county": "Gorj" + }, + { + "id": 6121, + "name": "Didilesti", + "county": "Gorj" + }, + { + "id": 6122, + "name": "Galesoaia", + "county": "Gorj" + }, + { + "id": 6123, + "name": "Hodoreasca", + "county": "Gorj" + }, + { + "id": 6124, + "name": "Pieptani", + "county": "Gorj" + }, + { + "id": 6125, + "name": "Pinoasa", + "county": "Gorj" + }, + { + "id": 6126, + "name": "Stejerei", + "county": "Gorj" + }, + { + "id": 6127, + "name": "Valceaua", + "county": "Gorj" + }, + { + "id": 6128, + "name": "Crasna", + "county": "Gorj" + }, + { + "id": 6129, + "name": "Aninisu din Deal", + "county": "Gorj" + }, + { + "id": 6130, + "name": "Aninisu din Vale", + "county": "Gorj" + }, + { + "id": 6131, + "name": "Buzesti", + "county": "Gorj" + }, + { + "id": 6132, + "name": "Carpinis", + "county": "Gorj" + }, + { + "id": 6133, + "name": "Crasna din Deal", + "county": "Gorj" + }, + { + "id": 6134, + "name": "Dragoiesti", + "county": "Gorj" + }, + { + "id": 6135, + "name": "Dumbraveni", + "county": "Gorj" + }, + { + "id": 6136, + "name": "Radosi", + "county": "Gorj" + }, + { + "id": 6137, + "name": "Cruset", + "county": "Gorj" + }, + { + "id": 6138, + "name": "Bojinu", + "county": "Gorj" + }, + { + "id": 6139, + "name": "Marinesti", + "county": "Gorj" + }, + { + "id": 6140, + "name": "Maiag", + "county": "Gorj" + }, + { + "id": 6141, + "name": "Mierea", + "county": "Gorj" + }, + { + "id": 6142, + "name": "Miericeaua", + "county": "Gorj" + }, + { + "id": 6143, + "name": "Slamnesti", + "county": "Gorj" + }, + { + "id": 6144, + "name": "Slavuta", + "county": "Gorj" + }, + { + "id": 6145, + "name": "Urda de Jos", + "county": "Gorj" + }, + { + "id": 6146, + "name": "Valuta", + "county": "Gorj" + }, + { + "id": 6147, + "name": "Danciulesti", + "county": "Gorj" + }, + { + "id": 6148, + "name": "Bibulesti", + "county": "Gorj" + }, + { + "id": 6149, + "name": "Halangesti", + "county": "Gorj" + }, + { + "id": 6150, + "name": "Obarsia", + "county": "Gorj" + }, + { + "id": 6151, + "name": "Petrachei", + "county": "Gorj" + }, + { + "id": 6152, + "name": "Radinesti", + "county": "Gorj" + }, + { + "id": 6153, + "name": "Zaicoiu", + "county": "Gorj" + }, + { + "id": 6154, + "name": "Danesti", + "county": "Gorj" + }, + { + "id": 6155, + "name": "Barza", + "county": "Gorj" + }, + { + "id": 6156, + "name": "Botorogi", + "county": "Gorj" + }, + { + "id": 6157, + "name": "Bratuia", + "county": "Gorj" + }, + { + "id": 6158, + "name": "Bucureasa", + "county": "Gorj" + }, + { + "id": 6159, + "name": "Merfulesti", + "county": "Gorj" + }, + { + "id": 6160, + "name": "Sasa", + "county": "Gorj" + }, + { + "id": 6161, + "name": "Trocani", + "county": "Gorj" + }, + { + "id": 6162, + "name": "Tarculesti", + "county": "Gorj" + }, + { + "id": 6163, + "name": "Ungureni", + "county": "Gorj" + }, + { + "id": 6164, + "name": "Vacarea", + "county": "Gorj" + }, + { + "id": 6165, + "name": "Dragotesti", + "county": "Gorj" + }, + { + "id": 6166, + "name": "Corobai", + "county": "Gorj" + }, + { + "id": 6167, + "name": "Trestioara", + "county": "Gorj" + }, + { + "id": 6168, + "name": "Farcasesti", + "county": "Gorj" + }, + { + "id": 6169, + "name": "Farcasesti Mosneni", + "county": "Gorj" + }, + { + "id": 6170, + "name": "Pesteana de Jos", + "county": "Gorj" + }, + { + "id": 6171, + "name": "Rogojel", + "county": "Gorj" + }, + { + "id": 6172, + "name": "Rosia Jiu", + "county": "Gorj" + }, + { + "id": 6173, + "name": "Timiseni", + "county": "Gorj" + }, + { + "id": 6174, + "name": "Valea cu Apa", + "county": "Gorj" + }, + { + "id": 6175, + "name": "Iormanesti", + "county": "Gorj" + }, + { + "id": 6176, + "name": "Camuiesti", + "county": "Gorj" + }, + { + "id": 6177, + "name": "Clesnesti", + "county": "Gorj" + }, + { + "id": 6178, + "name": "Glogova", + "county": "Gorj" + }, + { + "id": 6179, + "name": "Olteanu", + "county": "Gorj" + }, + { + "id": 6180, + "name": "Godinesti", + "county": "Gorj" + }, + { + "id": 6181, + "name": "Arjoci", + "county": "Gorj" + }, + { + "id": 6182, + "name": "Chiliu", + "county": "Gorj" + }, + { + "id": 6183, + "name": "Calcesti", + "county": "Gorj" + }, + { + "id": 6184, + "name": "Parau de Pripor", + "county": "Gorj" + }, + { + "id": 6185, + "name": "Parau de Vale", + "county": "Gorj" + }, + { + "id": 6186, + "name": "Ratez", + "county": "Gorj" + }, + { + "id": 6187, + "name": "Hurezani", + "county": "Gorj" + }, + { + "id": 6188, + "name": "Busuioci", + "county": "Gorj" + }, + { + "id": 6189, + "name": "Pegeni", + "county": "Gorj" + }, + { + "id": 6190, + "name": "Plopu", + "county": "Gorj" + }, + { + "id": 6191, + "name": "Totea de Hurezani", + "county": "Gorj" + }, + { + "id": 6192, + "name": "Ionesti", + "county": "Gorj" + }, + { + "id": 6193, + "name": "Gura Susitei", + "county": "Gorj" + }, + { + "id": 6194, + "name": "Iliesti", + "county": "Gorj" + }, + { + "id": 6195, + "name": "Picu", + "county": "Gorj" + }, + { + "id": 6196, + "name": "Jupanesti", + "county": "Gorj" + }, + { + "id": 6197, + "name": "Boia", + "county": "Gorj" + }, + { + "id": 6198, + "name": "Parau Boia", + "county": "Gorj" + }, + { + "id": 6199, + "name": "Vidin", + "county": "Gorj" + }, + { + "id": 6200, + "name": "Viersani", + "county": "Gorj" + }, + { + "id": 6201, + "name": "Lelesti", + "county": "Gorj" + }, + { + "id": 6202, + "name": "Fratesti", + "county": "Gorj" + }, + { + "id": 6203, + "name": "Rasovita", + "county": "Gorj" + }, + { + "id": 6204, + "name": "Licurici", + "county": "Gorj" + }, + { + "id": 6205, + "name": "Frumusei", + "county": "Gorj" + }, + { + "id": 6206, + "name": "Negreni", + "county": "Gorj" + }, + { + "id": 6207, + "name": "Totea", + "county": "Gorj" + }, + { + "id": 6208, + "name": "Targu Logresti", + "county": "Gorj" + }, + { + "id": 6209, + "name": "Coltesti", + "county": "Gorj" + }, + { + "id": 6210, + "name": "Frunza", + "county": "Gorj" + }, + { + "id": 6211, + "name": "Logresti Mosteni", + "county": "Gorj" + }, + { + "id": 6212, + "name": "Maru", + "county": "Gorj" + }, + { + "id": 6213, + "name": "Popesti", + "county": "Gorj" + }, + { + "id": 6214, + "name": "Seaca", + "county": "Gorj" + }, + { + "id": 6215, + "name": "Matasari", + "county": "Gorj" + }, + { + "id": 6216, + "name": "Bradet", + "county": "Gorj" + }, + { + "id": 6217, + "name": "Bradetel", + "county": "Gorj" + }, + { + "id": 6218, + "name": "Croici", + "county": "Gorj" + }, + { + "id": 6219, + "name": "Runcurel", + "county": "Gorj" + }, + { + "id": 6220, + "name": "Musetesti", + "county": "Gorj" + }, + { + "id": 6221, + "name": "Arseni", + "county": "Gorj" + }, + { + "id": 6222, + "name": "Barcaciu", + "county": "Gorj" + }, + { + "id": 6223, + "name": "Gamani", + "county": "Gorj" + }, + { + "id": 6224, + "name": "Grui", + "county": "Gorj" + }, + { + "id": 6225, + "name": "Stancesti", + "county": "Gorj" + }, + { + "id": 6226, + "name": "Stancesti Larga", + "county": "Gorj" + }, + { + "id": 6227, + "name": "Negomir", + "county": "Gorj" + }, + { + "id": 6228, + "name": "Artanu", + "county": "Gorj" + }, + { + "id": 6229, + "name": "Bohorel", + "county": "Gorj" + }, + { + "id": 6230, + "name": "Condeiesti", + "county": "Gorj" + }, + { + "id": 6231, + "name": "Nucetu", + "county": "Gorj" + }, + { + "id": 6232, + "name": "Orzu", + "county": "Gorj" + }, + { + "id": 6233, + "name": "Paltinu", + "county": "Gorj" + }, + { + "id": 6234, + "name": "Raci", + "county": "Gorj" + }, + { + "id": 6235, + "name": "Ursoaia", + "county": "Gorj" + }, + { + "id": 6236, + "name": "Valea Racilor", + "county": "Gorj" + }, + { + "id": 6237, + "name": "Calugareni", + "county": "Gorj" + }, + { + "id": 6238, + "name": "Apa Neagra", + "county": "Gorj" + }, + { + "id": 6239, + "name": "Cerna-Sat", + "county": "Gorj" + }, + { + "id": 6240, + "name": "Closani", + "county": "Gorj" + }, + { + "id": 6241, + "name": "Motru Sec", + "county": "Gorj" + }, + { + "id": 6242, + "name": "Orzesti", + "county": "Gorj" + }, + { + "id": 6243, + "name": "Pades", + "county": "Gorj" + }, + { + "id": 6244, + "name": "Vaieni", + "county": "Gorj" + }, + { + "id": 6245, + "name": "Pestisani", + "county": "Gorj" + }, + { + "id": 6246, + "name": "Borosteni", + "county": "Gorj" + }, + { + "id": 6247, + "name": "Bradiceni", + "county": "Gorj" + }, + { + "id": 6248, + "name": "Francesti", + "county": "Gorj" + }, + { + "id": 6249, + "name": "Gureni", + "county": "Gorj" + }, + { + "id": 6250, + "name": "Hobita", + "county": "Gorj" + }, + { + "id": 6251, + "name": "Seuca", + "county": "Gorj" + }, + { + "id": 6252, + "name": "Plopsoru", + "county": "Gorj" + }, + { + "id": 6253, + "name": "Brosteni", + "county": "Gorj" + }, + { + "id": 6254, + "name": "Brostenii de Sus", + "county": "Gorj" + }, + { + "id": 6255, + "name": "Ceplea", + "county": "Gorj" + }, + { + "id": 6256, + "name": "Cursaru", + "county": "Gorj" + }, + { + "id": 6257, + "name": "Deleni", + "county": "Gorj" + }, + { + "id": 6258, + "name": "Izvoarele", + "county": "Gorj" + }, + { + "id": 6259, + "name": "Olari", + "county": "Gorj" + }, + { + "id": 6260, + "name": "Piscuri", + "county": "Gorj" + }, + { + "id": 6261, + "name": "Sardanesti", + "county": "Gorj" + }, + { + "id": 6262, + "name": "Valeni", + "county": "Gorj" + }, + { + "id": 6263, + "name": "Polovragi", + "county": "Gorj" + }, + { + "id": 6264, + "name": "Racovita", + "county": "Gorj" + }, + { + "id": 6265, + "name": "Prigoria", + "county": "Gorj" + }, + { + "id": 6266, + "name": "Bucsana", + "county": "Gorj" + }, + { + "id": 6267, + "name": "Burlani", + "county": "Gorj" + }, + { + "id": 6268, + "name": "Calugareasa", + "county": "Gorj" + }, + { + "id": 6269, + "name": "Dobrana", + "county": "Gorj" + }, + { + "id": 6270, + "name": "Negoiesti", + "county": "Gorj" + }, + { + "id": 6271, + "name": "Zorlesti", + "county": "Gorj" + }, + { + "id": 6272, + "name": "Rosia de Amaradia", + "county": "Gorj" + }, + { + "id": 6273, + "name": "Becheni", + "county": "Gorj" + }, + { + "id": 6274, + "name": "Dealu Viei", + "county": "Gorj" + }, + { + "id": 6275, + "name": "Ruget", + "county": "Gorj" + }, + { + "id": 6276, + "name": "Seciurile", + "county": "Gorj" + }, + { + "id": 6277, + "name": "Stejaru", + "county": "Gorj" + }, + { + "id": 6278, + "name": "Sitoaia", + "county": "Gorj" + }, + { + "id": 6279, + "name": "Runcu", + "county": "Gorj" + }, + { + "id": 6280, + "name": "Balta", + "county": "Gorj" + }, + { + "id": 6281, + "name": "Baltisoara", + "county": "Gorj" + }, + { + "id": 6282, + "name": "Dobrita", + "county": "Gorj" + }, + { + "id": 6283, + "name": "Rachiti", + "county": "Gorj" + }, + { + "id": 6284, + "name": "Suseni", + "county": "Gorj" + }, + { + "id": 6285, + "name": "Valea Mare", + "county": "Gorj" + }, + { + "id": 6286, + "name": "Samarinesti", + "county": "Gorj" + }, + { + "id": 6287, + "name": "Bazavani", + "county": "Gorj" + }, + { + "id": 6288, + "name": "Boca", + "county": "Gorj" + }, + { + "id": 6289, + "name": "Duculesti", + "county": "Gorj" + }, + { + "id": 6290, + "name": "Larga", + "county": "Gorj" + }, + { + "id": 6291, + "name": "Tirioi", + "county": "Gorj" + }, + { + "id": 6292, + "name": "Valea Bisericii", + "county": "Gorj" + }, + { + "id": 6293, + "name": "Valea Mica", + "county": "Gorj" + }, + { + "id": 6294, + "name": "Valea Poienii", + "county": "Gorj" + }, + { + "id": 6295, + "name": "Sacelu", + "county": "Gorj" + }, + { + "id": 6296, + "name": "Blahnita de Sus", + "county": "Gorj" + }, + { + "id": 6297, + "name": "Haiesti", + "county": "Gorj" + }, + { + "id": 6298, + "name": "Jeristea", + "county": "Gorj" + }, + { + "id": 6299, + "name": "Magheresti", + "county": "Gorj" + }, + { + "id": 6300, + "name": "Saulesti", + "county": "Gorj" + }, + { + "id": 6301, + "name": "Bibesti", + "county": "Gorj" + }, + { + "id": 6302, + "name": "Dolcesti", + "county": "Gorj" + }, + { + "id": 6303, + "name": "Purcaru", + "county": "Gorj" + }, + { + "id": 6304, + "name": "Scoarta", + "county": "Gorj" + }, + { + "id": 6305, + "name": "Bobu", + "county": "Gorj" + }, + { + "id": 6306, + "name": "Budieni", + "county": "Gorj" + }, + { + "id": 6307, + "name": "Ceratu de Copacioasa", + "county": "Gorj" + }, + { + "id": 6308, + "name": "Campu Mare", + "county": "Gorj" + }, + { + "id": 6309, + "name": "Colibasi", + "county": "Gorj" + }, + { + "id": 6310, + "name": "Copacioasa", + "county": "Gorj" + }, + { + "id": 6311, + "name": "Lazuri", + "county": "Gorj" + }, + { + "id": 6312, + "name": "Lintea", + "county": "Gorj" + }, + { + "id": 6313, + "name": "Mogosani", + "county": "Gorj" + }, + { + "id": 6314, + "name": "Pistestii din Deal", + "county": "Gorj" + }, + { + "id": 6315, + "name": "Sambotin", + "county": "Gorj" + }, + { + "id": 6316, + "name": "Arsuri", + "county": "Gorj" + }, + { + "id": 6317, + "name": "Gornacel", + "county": "Gorj" + }, + { + "id": 6318, + "name": "Pajistele", + "county": "Gorj" + }, + { + "id": 6319, + "name": "Schela", + "county": "Gorj" + }, + { + "id": 6320, + "name": "Slivilesti", + "county": "Gorj" + }, + { + "id": 6321, + "name": "Cojmanesti", + "county": "Gorj" + }, + { + "id": 6322, + "name": "Miculesti", + "county": "Gorj" + }, + { + "id": 6323, + "name": "Stiucani", + "county": "Gorj" + }, + { + "id": 6324, + "name": "Stramtu", + "county": "Gorj" + }, + { + "id": 6325, + "name": "Sura", + "county": "Gorj" + }, + { + "id": 6326, + "name": "Siacu", + "county": "Gorj" + }, + { + "id": 6327, + "name": "Tehomir", + "county": "Gorj" + }, + { + "id": 6328, + "name": "Stanesti", + "county": "Gorj" + }, + { + "id": 6329, + "name": "Alexeni", + "county": "Gorj" + }, + { + "id": 6330, + "name": "Balani", + "county": "Gorj" + }, + { + "id": 6331, + "name": "Calesti", + "county": "Gorj" + }, + { + "id": 6332, + "name": "Curpen", + "county": "Gorj" + }, + { + "id": 6333, + "name": "Mazaroi", + "county": "Gorj" + }, + { + "id": 6334, + "name": "Obreja", + "county": "Gorj" + }, + { + "id": 6335, + "name": "Parvulesti", + "county": "Gorj" + }, + { + "id": 6336, + "name": "Vaidei", + "county": "Gorj" + }, + { + "id": 6337, + "name": "Valari", + "county": "Gorj" + }, + { + "id": 6338, + "name": "Stejari", + "county": "Gorj" + }, + { + "id": 6339, + "name": "Balosani", + "county": "Gorj" + }, + { + "id": 6340, + "name": "Bacesti", + "county": "Gorj" + }, + { + "id": 6341, + "name": "Dealu Leului", + "county": "Gorj" + }, + { + "id": 6342, + "name": "Piscoiu", + "county": "Gorj" + }, + { + "id": 6343, + "name": "Popesti Stejari", + "county": "Gorj" + }, + { + "id": 6344, + "name": "Stoina", + "county": "Gorj" + }, + { + "id": 6345, + "name": "Ciorari", + "county": "Gorj" + }, + { + "id": 6346, + "name": "Mielusei", + "county": "Gorj" + }, + { + "id": 6347, + "name": "Paisani", + "county": "Gorj" + }, + { + "id": 6348, + "name": "Toiaga", + "county": "Gorj" + }, + { + "id": 6349, + "name": "Ulmet", + "county": "Gorj" + }, + { + "id": 6350, + "name": "Urda de Sus", + "county": "Gorj" + }, + { + "id": 6351, + "name": "Telesti", + "county": "Gorj" + }, + { + "id": 6352, + "name": "Buduhala", + "county": "Gorj" + }, + { + "id": 6353, + "name": "Somanesti", + "county": "Gorj" + }, + { + "id": 6354, + "name": "Tismana", + "county": "Gorj" + }, + { + "id": 6355, + "name": "Celei", + "county": "Gorj" + }, + { + "id": 6356, + "name": "Costeni", + "county": "Gorj" + }, + { + "id": 6357, + "name": "Gornovita", + "county": "Gorj" + }, + { + "id": 6358, + "name": "Isvarna", + "county": "Gorj" + }, + { + "id": 6359, + "name": "Pocruia", + "county": "Gorj" + }, + { + "id": 6360, + "name": "Racoti", + "county": "Gorj" + }, + { + "id": 6361, + "name": "Sohodol", + "county": "Gorj" + }, + { + "id": 6362, + "name": "Topesti", + "county": "Gorj" + }, + { + "id": 6363, + "name": "Valcele", + "county": "Gorj" + }, + { + "id": 6364, + "name": "Vanata", + "county": "Gorj" + }, + { + "id": 6365, + "name": "Turburea", + "county": "Gorj" + }, + { + "id": 6366, + "name": "Cocorova", + "county": "Gorj" + }, + { + "id": 6367, + "name": "Poiana", + "county": "Gorj" + }, + { + "id": 6368, + "name": "Spahii", + "county": "Gorj" + }, + { + "id": 6369, + "name": "Sipotu", + "county": "Gorj" + }, + { + "id": 6370, + "name": "Turceni", + "county": "Gorj" + }, + { + "id": 6371, + "name": "Garbovu", + "county": "Gorj" + }, + { + "id": 6372, + "name": "Jiltu", + "county": "Gorj" + }, + { + "id": 6373, + "name": "Murgesti", + "county": "Gorj" + }, + { + "id": 6374, + "name": "Stramba Jiu", + "county": "Gorj" + }, + { + "id": 6375, + "name": "Valea Viei", + "county": "Gorj" + }, + { + "id": 6376, + "name": "Tantareni", + "county": "Gorj" + }, + { + "id": 6377, + "name": "Arpadia", + "county": "Gorj" + }, + { + "id": 6378, + "name": "Chiciora", + "county": "Gorj" + }, + { + "id": 6379, + "name": "Floresti", + "county": "Gorj" + }, + { + "id": 6380, + "name": "Urdari", + "county": "Gorj" + }, + { + "id": 6381, + "name": "Fantanele", + "county": "Gorj" + }, + { + "id": 6382, + "name": "Hotaroasa", + "county": "Gorj" + }, + { + "id": 6383, + "name": "Vagiulesti", + "county": "Gorj" + }, + { + "id": 6384, + "name": "Carciu", + "county": "Gorj" + }, + { + "id": 6385, + "name": "Covrigi", + "county": "Gorj" + }, + { + "id": 6386, + "name": "Murgilesti", + "county": "Gorj" + }, + { + "id": 6387, + "name": "Valea Motrului", + "county": "Gorj" + }, + { + "id": 6388, + "name": "Andreesti", + "county": "Gorj" + }, + { + "id": 6389, + "name": "Frasin", + "county": "Gorj" + }, + { + "id": 6390, + "name": "Valea Desului", + "county": "Gorj" + }, + { + "id": 6391, + "name": "Vladimir", + "county": "Gorj" + }, + { + "id": 6392, + "name": "Vart", + "county": "Gorj" + }, + { + "id": 6393, + "name": "Odorheiu Secuiesc", + "county": "Harghita" + }, + { + "id": 6394, + "name": "Bradesti", + "county": "Harghita" + }, + { + "id": 6395, + "name": "Tarnovita", + "county": "Harghita" + }, + { + "id": 6396, + "name": "Satu Mare", + "county": "Harghita" + }, + { + "id": 6397, + "name": "Feliceni", + "county": "Harghita" + }, + { + "id": 6398, + "name": "Alexandrita", + "county": "Harghita" + }, + { + "id": 6399, + "name": "Arvateni", + "county": "Harghita" + }, + { + "id": 6400, + "name": "Cireseni", + "county": "Harghita" + }, + { + "id": 6401, + "name": "Forteni", + "county": "Harghita" + }, + { + "id": 6402, + "name": "Hoghia", + "county": "Harghita" + }, + { + "id": 6403, + "name": "Oteni", + "county": "Harghita" + }, + { + "id": 6404, + "name": "Polonita", + "county": "Harghita" + }, + { + "id": 6405, + "name": "Taureni", + "county": "Harghita" + }, + { + "id": 6406, + "name": "Teleac", + "county": "Harghita" + }, + { + "id": 6407, + "name": "Valeni", + "county": "Harghita" + }, + { + "id": 6408, + "name": "Miercurea Ciuc", + "county": "Harghita" + }, + { + "id": 6409, + "name": "Ciba", + "county": "Harghita" + }, + { + "id": 6410, + "name": "Harghita-Bai", + "county": "Harghita" + }, + { + "id": 6411, + "name": "Jigodin-Bai", + "county": "Harghita" + }, + { + "id": 6412, + "name": "Pauleni-Ciuc", + "county": "Harghita" + }, + { + "id": 6413, + "name": "Delnita", + "county": "Harghita" + }, + { + "id": 6414, + "name": "Soimeni", + "county": "Harghita" + }, + { + "id": 6415, + "name": "Baile Tusnad", + "county": "Harghita" + }, + { + "id": 6416, + "name": "Carpitus", + "county": "Harghita" + }, + { + "id": 6417, + "name": "Balan", + "county": "Harghita" + }, + { + "id": 6418, + "name": "Borsec", + "county": "Harghita" + }, + { + "id": 6419, + "name": "Cristuru Secuiesc", + "county": "Harghita" + }, + { + "id": 6420, + "name": "Filias", + "county": "Harghita" + }, + { + "id": 6421, + "name": "Gheorgheni", + "county": "Harghita" + }, + { + "id": 6422, + "name": "Covacipeter", + "county": "Harghita" + }, + { + "id": 6423, + "name": "Lacu Rosu", + "county": "Harghita" + }, + { + "id": 6424, + "name": "Vargatac", + "county": "Harghita" + }, + { + "id": 6425, + "name": "Visafolio", + "county": "Harghita" + }, + { + "id": 6426, + "name": "Toplita", + "county": "Harghita" + }, + { + "id": 6427, + "name": "Calimanel", + "county": "Harghita" + }, + { + "id": 6428, + "name": "Luncani", + "county": "Harghita" + }, + { + "id": 6429, + "name": "Magherus", + "county": "Harghita" + }, + { + "id": 6430, + "name": "Moglanesti", + "county": "Harghita" + }, + { + "id": 6431, + "name": "Secu", + "county": "Harghita" + }, + { + "id": 6432, + "name": "Vale", + "county": "Harghita" + }, + { + "id": 6433, + "name": "Vagani", + "county": "Harghita" + }, + { + "id": 6434, + "name": "Zencani", + "county": "Harghita" + }, + { + "id": 6435, + "name": "Vlahita", + "county": "Harghita" + }, + { + "id": 6436, + "name": "Baile Homorod", + "county": "Harghita" + }, + { + "id": 6437, + "name": "Minele Lueta", + "county": "Harghita" + }, + { + "id": 6438, + "name": "Atid", + "county": "Harghita" + }, + { + "id": 6439, + "name": "Criseni", + "county": "Harghita" + }, + { + "id": 6440, + "name": "Cusmed", + "county": "Harghita" + }, + { + "id": 6441, + "name": "Inlaceni", + "county": "Harghita" + }, + { + "id": 6442, + "name": "Siclod", + "county": "Harghita" + }, + { + "id": 6443, + "name": "Avramesti", + "county": "Harghita" + }, + { + "id": 6444, + "name": "Andreeni", + "county": "Harghita" + }, + { + "id": 6445, + "name": "Cechesti", + "county": "Harghita" + }, + { + "id": 6446, + "name": "Goagiu", + "county": "Harghita" + }, + { + "id": 6447, + "name": "Firtanus", + "county": "Harghita" + }, + { + "id": 6448, + "name": "Laz-Firtanus", + "county": "Harghita" + }, + { + "id": 6449, + "name": "Laz-Soimus", + "county": "Harghita" + }, + { + "id": 6450, + "name": "Medisoru Mic", + "county": "Harghita" + }, + { + "id": 6451, + "name": "Bilbor", + "county": "Harghita" + }, + { + "id": 6452, + "name": "Rachitis", + "county": "Harghita" + }, + { + "id": 6453, + "name": "Capalnita", + "county": "Harghita" + }, + { + "id": 6454, + "name": "Ciucsangeorgiu", + "county": "Harghita" + }, + { + "id": 6455, + "name": "Armaseni", + "county": "Harghita" + }, + { + "id": 6456, + "name": "Armasenii Noi", + "county": "Harghita" + }, + { + "id": 6457, + "name": "Bancu", + "county": "Harghita" + }, + { + "id": 6458, + "name": "Ciobanis", + "county": "Harghita" + }, + { + "id": 6459, + "name": "Cotormani", + "county": "Harghita" + }, + { + "id": 6460, + "name": "Eghersec", + "county": "Harghita" + }, + { + "id": 6461, + "name": "Ghiurche", + "county": "Harghita" + }, + { + "id": 6462, + "name": "Potiond", + "county": "Harghita" + }, + { + "id": 6463, + "name": "Ciumani", + "county": "Harghita" + }, + { + "id": 6464, + "name": "Carta", + "county": "Harghita" + }, + { + "id": 6465, + "name": "Ineu", + "county": "Harghita" + }, + { + "id": 6466, + "name": "Tomesti", + "county": "Harghita" + }, + { + "id": 6467, + "name": "Corbu", + "county": "Harghita" + }, + { + "id": 6468, + "name": "Capu Corbului", + "county": "Harghita" + }, + { + "id": 6469, + "name": "Corund", + "county": "Harghita" + }, + { + "id": 6470, + "name": "Atia", + "county": "Harghita" + }, + { + "id": 6471, + "name": "Calonda", + "county": "Harghita" + }, + { + "id": 6472, + "name": "Fantana Brazilor", + "county": "Harghita" + }, + { + "id": 6473, + "name": "Valea lui Pavel", + "county": "Harghita" + }, + { + "id": 6474, + "name": "Danesti", + "county": "Harghita" + }, + { + "id": 6475, + "name": "Madaras", + "county": "Harghita" + }, + { + "id": 6476, + "name": "Dealu", + "county": "Harghita" + }, + { + "id": 6477, + "name": "Fancel", + "county": "Harghita" + }, + { + "id": 6478, + "name": "Sancrai", + "county": "Harghita" + }, + { + "id": 6479, + "name": "Tamasu", + "county": "Harghita" + }, + { + "id": 6480, + "name": "Tibod", + "county": "Harghita" + }, + { + "id": 6481, + "name": "Ulcani", + "county": "Harghita" + }, + { + "id": 6482, + "name": "Valea Rotunda", + "county": "Harghita" + }, + { + "id": 6483, + "name": "Ditrau", + "county": "Harghita" + }, + { + "id": 6484, + "name": "Jolotca", + "county": "Harghita" + }, + { + "id": 6485, + "name": "Tengheler", + "county": "Harghita" + }, + { + "id": 6486, + "name": "Darjiu", + "county": "Harghita" + }, + { + "id": 6487, + "name": "Mujna", + "county": "Harghita" + }, + { + "id": 6488, + "name": "Frumoasa", + "county": "Harghita" + }, + { + "id": 6489, + "name": "Barzava", + "county": "Harghita" + }, + { + "id": 6490, + "name": "Fagetel", + "county": "Harghita" + }, + { + "id": 6491, + "name": "Nicolesti", + "county": "Harghita" + }, + { + "id": 6492, + "name": "Galautas", + "county": "Harghita" + }, + { + "id": 6493, + "name": "Dealu Armanului", + "county": "Harghita" + }, + { + "id": 6494, + "name": "Galautas-Parau", + "county": "Harghita" + }, + { + "id": 6495, + "name": "Nuteni", + "county": "Harghita" + }, + { + "id": 6496, + "name": "Plopis", + "county": "Harghita" + }, + { + "id": 6497, + "name": "Preluca", + "county": "Harghita" + }, + { + "id": 6498, + "name": "Toleseni", + "county": "Harghita" + }, + { + "id": 6499, + "name": "Zapodea", + "county": "Harghita" + }, + { + "id": 6500, + "name": "Joseni", + "county": "Harghita" + }, + { + "id": 6501, + "name": "Borzont", + "county": "Harghita" + }, + { + "id": 6502, + "name": "Bucin", + "county": "Harghita" + }, + { + "id": 6503, + "name": "Lazarea", + "county": "Harghita" + }, + { + "id": 6504, + "name": "Ghidut", + "county": "Harghita" + }, + { + "id": 6505, + "name": "Lueta", + "county": "Harghita" + }, + { + "id": 6506, + "name": "Baile Chirui", + "county": "Harghita" + }, + { + "id": 6507, + "name": "Lunca de Jos", + "county": "Harghita" + }, + { + "id": 6508, + "name": "Baratcos", + "county": "Harghita" + }, + { + "id": 6509, + "name": "Poiana Fagului", + "county": "Harghita" + }, + { + "id": 6510, + "name": "Puntea Lupului", + "county": "Harghita" + }, + { + "id": 6511, + "name": "Valea lui Antaloc", + "county": "Harghita" + }, + { + "id": 6512, + "name": "Valea Boros", + "county": "Harghita" + }, + { + "id": 6513, + "name": "Valea Capelei", + "county": "Harghita" + }, + { + "id": 6514, + "name": "Valea Intunecoasa", + "county": "Harghita" + }, + { + "id": 6515, + "name": "Valea Rece", + "county": "Harghita" + }, + { + "id": 6516, + "name": "Lunca de Sus", + "county": "Harghita" + }, + { + "id": 6517, + "name": "Comiat", + "county": "Harghita" + }, + { + "id": 6518, + "name": "Izvorul Trotusului", + "county": "Harghita" + }, + { + "id": 6519, + "name": "Paltinis-Ciuc", + "county": "Harghita" + }, + { + "id": 6520, + "name": "Valea Garbea", + "county": "Harghita" + }, + { + "id": 6521, + "name": "Valea Ugra", + "county": "Harghita" + }, + { + "id": 6522, + "name": "Lupeni", + "county": "Harghita" + }, + { + "id": 6523, + "name": "Bisericani", + "county": "Harghita" + }, + { + "id": 6524, + "name": "Bulgareni", + "county": "Harghita" + }, + { + "id": 6525, + "name": "Firtusu", + "county": "Harghita" + }, + { + "id": 6526, + "name": "Morareni", + "county": "Harghita" + }, + { + "id": 6527, + "name": "Paltinis", + "county": "Harghita" + }, + { + "id": 6528, + "name": "Pauleni", + "county": "Harghita" + }, + { + "id": 6529, + "name": "Satu Mic", + "county": "Harghita" + }, + { + "id": 6530, + "name": "Sancel", + "county": "Harghita" + }, + { + "id": 6531, + "name": "Martinis", + "county": "Harghita" + }, + { + "id": 6532, + "name": "Aldea", + "county": "Harghita" + }, + { + "id": 6533, + "name": "Badeni", + "county": "Harghita" + }, + { + "id": 6534, + "name": "Calugareni", + "county": "Harghita" + }, + { + "id": 6535, + "name": "Chinusu", + "county": "Harghita" + }, + { + "id": 6536, + "name": "Comanesti", + "county": "Harghita" + }, + { + "id": 6537, + "name": "Ghipes", + "county": "Harghita" + }, + { + "id": 6538, + "name": "Locodeni", + "county": "Harghita" + }, + { + "id": 6539, + "name": "Oraseni", + "county": "Harghita" + }, + { + "id": 6540, + "name": "Petreni", + "county": "Harghita" + }, + { + "id": 6541, + "name": "Rares", + "county": "Harghita" + }, + { + "id": 6542, + "name": "Sanpaul", + "county": "Harghita" + }, + { + "id": 6543, + "name": "Meresti", + "county": "Harghita" + }, + { + "id": 6544, + "name": "Mihaileni", + "county": "Harghita" + }, + { + "id": 6545, + "name": "Livezi", + "county": "Harghita" + }, + { + "id": 6546, + "name": "Nadejdea", + "county": "Harghita" + }, + { + "id": 6547, + "name": "Vacaresti", + "county": "Harghita" + }, + { + "id": 6548, + "name": "Mugeni", + "county": "Harghita" + }, + { + "id": 6549, + "name": "Alunis", + "county": "Harghita" + }, + { + "id": 6550, + "name": "Beta", + "county": "Harghita" + }, + { + "id": 6551, + "name": "Betesti", + "county": "Harghita" + }, + { + "id": 6552, + "name": "Dejutiu", + "county": "Harghita" + }, + { + "id": 6553, + "name": "Dobeni", + "county": "Harghita" + }, + { + "id": 6554, + "name": "Lutita", + "county": "Harghita" + }, + { + "id": 6555, + "name": "Matiseni", + "county": "Harghita" + }, + { + "id": 6556, + "name": "Porumbenii Mari", + "county": "Harghita" + }, + { + "id": 6557, + "name": "Porumbenii Mici", + "county": "Harghita" + }, + { + "id": 6558, + "name": "Taietura", + "county": "Harghita" + }, + { + "id": 6559, + "name": "Ocland", + "county": "Harghita" + }, + { + "id": 6560, + "name": "Craciunel", + "county": "Harghita" + }, + { + "id": 6561, + "name": "Satu Nou", + "county": "Harghita" + }, + { + "id": 6562, + "name": "Plaiesii de Jos", + "county": "Harghita" + }, + { + "id": 6563, + "name": "Casinu Nou", + "county": "Harghita" + }, + { + "id": 6564, + "name": "Iacobeni", + "county": "Harghita" + }, + { + "id": 6565, + "name": "Imper", + "county": "Harghita" + }, + { + "id": 6566, + "name": "Plaiesii de Sus", + "county": "Harghita" + }, + { + "id": 6567, + "name": "Praid", + "county": "Harghita" + }, + { + "id": 6568, + "name": "Becas", + "county": "Harghita" + }, + { + "id": 6569, + "name": "Bucin", + "county": "Harghita" + }, + { + "id": 6570, + "name": "Ocna de Jos", + "county": "Harghita" + }, + { + "id": 6571, + "name": "Ocna de Sus", + "county": "Harghita" + }, + { + "id": 6572, + "name": "Sasveres", + "county": "Harghita" + }, + { + "id": 6573, + "name": "Remetea", + "county": "Harghita" + }, + { + "id": 6574, + "name": "Fagetel", + "county": "Harghita" + }, + { + "id": 6575, + "name": "Martonca", + "county": "Harghita" + }, + { + "id": 6576, + "name": "Sineu", + "county": "Harghita" + }, + { + "id": 6577, + "name": "Sacel", + "county": "Harghita" + }, + { + "id": 6578, + "name": "Soimusu Mare", + "county": "Harghita" + }, + { + "id": 6579, + "name": "Soimusu Mic", + "county": "Harghita" + }, + { + "id": 6580, + "name": "Uilac", + "county": "Harghita" + }, + { + "id": 6581, + "name": "Vidacut", + "county": "Harghita" + }, + { + "id": 6582, + "name": "Sarmas", + "county": "Harghita" + }, + { + "id": 6583, + "name": "Fundoaia", + "county": "Harghita" + }, + { + "id": 6584, + "name": "Hodosa", + "county": "Harghita" + }, + { + "id": 6585, + "name": "Platonesti", + "county": "Harghita" + }, + { + "id": 6586, + "name": "Runc", + "county": "Harghita" + }, + { + "id": 6587, + "name": "Secuieni", + "county": "Harghita" + }, + { + "id": 6588, + "name": "Bodogaia", + "county": "Harghita" + }, + { + "id": 6589, + "name": "Eliseni", + "county": "Harghita" + }, + { + "id": 6590, + "name": "Siculeni", + "county": "Harghita" + }, + { + "id": 6591, + "name": "Ciaracio", + "county": "Harghita" + }, + { + "id": 6592, + "name": "Ciceu", + "county": "Harghita" + }, + { + "id": 6593, + "name": "Racu", + "county": "Harghita" + }, + { + "id": 6594, + "name": "Satu Nou", + "county": "Harghita" + }, + { + "id": 6595, + "name": "Sancraieni", + "county": "Harghita" + }, + { + "id": 6596, + "name": "Fitod", + "county": "Harghita" + }, + { + "id": 6597, + "name": "Hosasau", + "county": "Harghita" + }, + { + "id": 6598, + "name": "Leliceni", + "county": "Harghita" + }, + { + "id": 6599, + "name": "Misentea", + "county": "Harghita" + }, + { + "id": 6600, + "name": "Santimbru", + "county": "Harghita" + }, + { + "id": 6601, + "name": "Santimbru-Bai", + "county": "Harghita" + }, + { + "id": 6602, + "name": "Sandominic", + "county": "Harghita" + }, + { + "id": 6603, + "name": "Sanmartin", + "county": "Harghita" + }, + { + "id": 6604, + "name": "Ciucani", + "county": "Harghita" + }, + { + "id": 6605, + "name": "Cozmeni", + "county": "Harghita" + }, + { + "id": 6606, + "name": "Lazaresti", + "county": "Harghita" + }, + { + "id": 6607, + "name": "Valea Uzului", + "county": "Harghita" + }, + { + "id": 6608, + "name": "Sansimion", + "county": "Harghita" + }, + { + "id": 6609, + "name": "Cetatuia", + "county": "Harghita" + }, + { + "id": 6610, + "name": "Subcetate", + "county": "Harghita" + }, + { + "id": 6611, + "name": "Calnaci", + "county": "Harghita" + }, + { + "id": 6612, + "name": "Duda", + "county": "Harghita" + }, + { + "id": 6613, + "name": "Filpea", + "county": "Harghita" + }, + { + "id": 6614, + "name": "Suseni", + "county": "Harghita" + }, + { + "id": 6615, + "name": "Chileni", + "county": "Harghita" + }, + { + "id": 6616, + "name": "Liban", + "county": "Harghita" + }, + { + "id": 6617, + "name": "Senetea", + "county": "Harghita" + }, + { + "id": 6618, + "name": "Valea Stramba", + "county": "Harghita" + }, + { + "id": 6619, + "name": "Simonesti", + "county": "Harghita" + }, + { + "id": 6620, + "name": "Bentid", + "county": "Harghita" + }, + { + "id": 6621, + "name": "Cadaciu Mare", + "county": "Harghita" + }, + { + "id": 6622, + "name": "Cadaciu Mic", + "county": "Harghita" + }, + { + "id": 6623, + "name": "Cehetel", + "county": "Harghita" + }, + { + "id": 6624, + "name": "Chedia Mare", + "county": "Harghita" + }, + { + "id": 6625, + "name": "Chedia Mica", + "county": "Harghita" + }, + { + "id": 6626, + "name": "Cobatesti", + "county": "Harghita" + }, + { + "id": 6627, + "name": "Medisoru Mare", + "county": "Harghita" + }, + { + "id": 6628, + "name": "Mihaileni", + "county": "Harghita" + }, + { + "id": 6629, + "name": "Nicoleni", + "county": "Harghita" + }, + { + "id": 6630, + "name": "Ruganesti", + "county": "Harghita" + }, + { + "id": 6631, + "name": "Tarcesti", + "county": "Harghita" + }, + { + "id": 6632, + "name": "Turdeni", + "county": "Harghita" + }, + { + "id": 6633, + "name": "Tulghes", + "county": "Harghita" + }, + { + "id": 6634, + "name": "Hagota", + "county": "Harghita" + }, + { + "id": 6635, + "name": "Pintic", + "county": "Harghita" + }, + { + "id": 6636, + "name": "Recea", + "county": "Harghita" + }, + { + "id": 6637, + "name": "Tusnad", + "county": "Harghita" + }, + { + "id": 6638, + "name": "Tusnadu Nou", + "county": "Harghita" + }, + { + "id": 6639, + "name": "Vrabia", + "county": "Harghita" + }, + { + "id": 6640, + "name": "Ulies", + "county": "Harghita" + }, + { + "id": 6641, + "name": "Daia", + "county": "Harghita" + }, + { + "id": 6642, + "name": "Iasu", + "county": "Harghita" + }, + { + "id": 6643, + "name": "Ighiu", + "county": "Harghita" + }, + { + "id": 6644, + "name": "Nicolesti", + "county": "Harghita" + }, + { + "id": 6645, + "name": "Obranesti", + "county": "Harghita" + }, + { + "id": 6646, + "name": "Petecu", + "county": "Harghita" + }, + { + "id": 6647, + "name": "Vasileni", + "county": "Harghita" + }, + { + "id": 6648, + "name": "Varsag", + "county": "Harghita" + }, + { + "id": 6649, + "name": "Voslabeni", + "county": "Harghita" + }, + { + "id": 6650, + "name": "Izvoru Muresului", + "county": "Harghita" + }, + { + "id": 6651, + "name": "Zetea", + "county": "Harghita" + }, + { + "id": 6652, + "name": "Desag", + "county": "Harghita" + }, + { + "id": 6653, + "name": "Izvoare", + "county": "Harghita" + }, + { + "id": 6654, + "name": "Poiana Tarnavei", + "county": "Harghita" + }, + { + "id": 6655, + "name": "Sicasau", + "county": "Harghita" + }, + { + "id": 6656, + "name": "Sub Cetate", + "county": "Harghita" + }, + { + "id": 6657, + "name": "Deva", + "county": "Hunedoara" + }, + { + "id": 6658, + "name": "Santuhalm", + "county": "Hunedoara" + }, + { + "id": 6659, + "name": "Archia", + "county": "Hunedoara" + }, + { + "id": 6660, + "name": "Barcea Mica", + "county": "Hunedoara" + }, + { + "id": 6661, + "name": "Cristur", + "county": "Hunedoara" + }, + { + "id": 6662, + "name": "Carjiti", + "county": "Hunedoara" + }, + { + "id": 6663, + "name": "Almasu Sec", + "county": "Hunedoara" + }, + { + "id": 6664, + "name": "Cherghes", + "county": "Hunedoara" + }, + { + "id": 6665, + "name": "Cozia", + "county": "Hunedoara" + }, + { + "id": 6666, + "name": "Popesti", + "county": "Hunedoara" + }, + { + "id": 6667, + "name": "Hunedoara", + "county": "Hunedoara" + }, + { + "id": 6668, + "name": "Racastia", + "county": "Hunedoara" + }, + { + "id": 6669, + "name": "Bos", + "county": "Hunedoara" + }, + { + "id": 6670, + "name": "Gros", + "county": "Hunedoara" + }, + { + "id": 6671, + "name": "Hasdat", + "county": "Hunedoara" + }, + { + "id": 6672, + "name": "Pestisu Mare", + "county": "Hunedoara" + }, + { + "id": 6673, + "name": "Ghelari", + "county": "Hunedoara" + }, + { + "id": 6674, + "name": "Govajdia", + "county": "Hunedoara" + }, + { + "id": 6675, + "name": "Plop", + "county": "Hunedoara" + }, + { + "id": 6676, + "name": "Ruda", + "county": "Hunedoara" + }, + { + "id": 6677, + "name": "Teliucu Inferior", + "county": "Hunedoara" + }, + { + "id": 6678, + "name": "Cincis-Cerna", + "county": "Hunedoara" + }, + { + "id": 6679, + "name": "Izvoarele", + "county": "Hunedoara" + }, + { + "id": 6680, + "name": "Teliucu Superior", + "county": "Hunedoara" + }, + { + "id": 6681, + "name": "Petrosani", + "county": "Hunedoara" + }, + { + "id": 6682, + "name": "Dalja Mare", + "county": "Hunedoara" + }, + { + "id": 6683, + "name": "Dalja Mica", + "county": "Hunedoara" + }, + { + "id": 6684, + "name": "Pestera", + "county": "Hunedoara" + }, + { + "id": 6685, + "name": "Slatinioara", + "county": "Hunedoara" + }, + { + "id": 6686, + "name": "Lupeni", + "county": "Hunedoara" + }, + { + "id": 6687, + "name": "Petrila", + "county": "Hunedoara" + }, + { + "id": 6688, + "name": "Cimpa", + "county": "Hunedoara" + }, + { + "id": 6689, + "name": "Jiet", + "county": "Hunedoara" + }, + { + "id": 6690, + "name": "Rascoala", + "county": "Hunedoara" + }, + { + "id": 6691, + "name": "Tirici", + "county": "Hunedoara" + }, + { + "id": 6692, + "name": "Uricani", + "county": "Hunedoara" + }, + { + "id": 6693, + "name": "Campu lui Neag", + "county": "Hunedoara" + }, + { + "id": 6694, + "name": "Valea de Brazi", + "county": "Hunedoara" + }, + { + "id": 6695, + "name": "Vulcan", + "county": "Hunedoara" + }, + { + "id": 6696, + "name": "Dealu Babii", + "county": "Hunedoara" + }, + { + "id": 6697, + "name": "Jiu-Paroseni", + "county": "Hunedoara" + }, + { + "id": 6698, + "name": "Aninoasa", + "county": "Hunedoara" + }, + { + "id": 6699, + "name": "Iscroni", + "county": "Hunedoara" + }, + { + "id": 6700, + "name": "Banita", + "county": "Hunedoara" + }, + { + "id": 6701, + "name": "Crivadia", + "county": "Hunedoara" + }, + { + "id": 6702, + "name": "Merisor", + "county": "Hunedoara" + }, + { + "id": 6703, + "name": "Brad", + "county": "Hunedoara" + }, + { + "id": 6704, + "name": "Mesteacan", + "county": "Hunedoara" + }, + { + "id": 6705, + "name": "Potingani", + "county": "Hunedoara" + }, + { + "id": 6706, + "name": "Ruda-Brad", + "county": "Hunedoara" + }, + { + "id": 6707, + "name": "Taratel", + "county": "Hunedoara" + }, + { + "id": 6708, + "name": "Valea Bradului", + "county": "Hunedoara" + }, + { + "id": 6709, + "name": "Criscior", + "county": "Hunedoara" + }, + { + "id": 6710, + "name": "Barza", + "county": "Hunedoara" + }, + { + "id": 6711, + "name": "Valea Arsului", + "county": "Hunedoara" + }, + { + "id": 6712, + "name": "Zdrapti", + "county": "Hunedoara" + }, + { + "id": 6713, + "name": "Calan", + "county": "Hunedoara" + }, + { + "id": 6714, + "name": "Streisangeorgiu", + "county": "Hunedoara" + }, + { + "id": 6715, + "name": "Batiz", + "county": "Hunedoara" + }, + { + "id": 6716, + "name": "Calanu Mic", + "county": "Hunedoara" + }, + { + "id": 6717, + "name": "Grid", + "county": "Hunedoara" + }, + { + "id": 6718, + "name": "Nadastia de Jos", + "county": "Hunedoara" + }, + { + "id": 6719, + "name": "Nadastia de Sus", + "county": "Hunedoara" + }, + { + "id": 6720, + "name": "Ohaba Streiului", + "county": "Hunedoara" + }, + { + "id": 6721, + "name": "Sancrai", + "county": "Hunedoara" + }, + { + "id": 6722, + "name": "Santamaria de Piatra", + "county": "Hunedoara" + }, + { + "id": 6723, + "name": "Strei", + "county": "Hunedoara" + }, + { + "id": 6724, + "name": "Strei-Sacel", + "county": "Hunedoara" + }, + { + "id": 6725, + "name": "Valea Sangeorgiului", + "county": "Hunedoara" + }, + { + "id": 6726, + "name": "Hateg", + "county": "Hunedoara" + }, + { + "id": 6727, + "name": "Nalatvad", + "county": "Hunedoara" + }, + { + "id": 6728, + "name": "Silvasu de Jos", + "county": "Hunedoara" + }, + { + "id": 6729, + "name": "Silvasu de Sus", + "county": "Hunedoara" + }, + { + "id": 6730, + "name": "Orastie", + "county": "Hunedoara" + }, + { + "id": 6731, + "name": "Simeria", + "county": "Hunedoara" + }, + { + "id": 6732, + "name": "Barcea Mare", + "county": "Hunedoara" + }, + { + "id": 6733, + "name": "Carpinis", + "county": "Hunedoara" + }, + { + "id": 6734, + "name": "Simeria Veche", + "county": "Hunedoara" + }, + { + "id": 6735, + "name": "Santandrei", + "county": "Hunedoara" + }, + { + "id": 6736, + "name": "Saulesti", + "county": "Hunedoara" + }, + { + "id": 6737, + "name": "Uroi", + "county": "Hunedoara" + }, + { + "id": 6738, + "name": "Baia de Cris", + "county": "Hunedoara" + }, + { + "id": 6739, + "name": "Baldovin", + "county": "Hunedoara" + }, + { + "id": 6740, + "name": "Caraci", + "county": "Hunedoara" + }, + { + "id": 6741, + "name": "Carastau", + "county": "Hunedoara" + }, + { + "id": 6742, + "name": "Lunca", + "county": "Hunedoara" + }, + { + "id": 6743, + "name": "Risca", + "county": "Hunedoara" + }, + { + "id": 6744, + "name": "Risculita", + "county": "Hunedoara" + }, + { + "id": 6745, + "name": "Tebea", + "county": "Hunedoara" + }, + { + "id": 6746, + "name": "Valeni", + "county": "Hunedoara" + }, + { + "id": 6747, + "name": "Balsa", + "county": "Hunedoara" + }, + { + "id": 6748, + "name": "Almasu Mic de Munte", + "county": "Hunedoara" + }, + { + "id": 6749, + "name": "Ardeu", + "county": "Hunedoara" + }, + { + "id": 6750, + "name": "Bunesti", + "county": "Hunedoara" + }, + { + "id": 6751, + "name": "Galbina", + "county": "Hunedoara" + }, + { + "id": 6752, + "name": "Mada", + "county": "Hunedoara" + }, + { + "id": 6753, + "name": "Oprisesti", + "county": "Hunedoara" + }, + { + "id": 6754, + "name": "Poiana", + "county": "Hunedoara" + }, + { + "id": 6755, + "name": "Poienita", + "county": "Hunedoara" + }, + { + "id": 6756, + "name": "Rosia", + "county": "Hunedoara" + }, + { + "id": 6757, + "name": "Stauini", + "county": "Hunedoara" + }, + { + "id": 6758, + "name": "Techereu", + "county": "Hunedoara" + }, + { + "id": 6759, + "name": "Valisoara", + "county": "Hunedoara" + }, + { + "id": 6760, + "name": "Voia", + "county": "Hunedoara" + }, + { + "id": 6761, + "name": "Baru", + "county": "Hunedoara" + }, + { + "id": 6762, + "name": "Livadia", + "county": "Hunedoara" + }, + { + "id": 6763, + "name": "Petros", + "county": "Hunedoara" + }, + { + "id": 6764, + "name": "Valea Lupului", + "county": "Hunedoara" + }, + { + "id": 6765, + "name": "Bacia", + "county": "Hunedoara" + }, + { + "id": 6766, + "name": "Petreni", + "county": "Hunedoara" + }, + { + "id": 6767, + "name": "Tampa", + "county": "Hunedoara" + }, + { + "id": 6768, + "name": "Totia", + "county": "Hunedoara" + }, + { + "id": 6769, + "name": "Baita", + "county": "Hunedoara" + }, + { + "id": 6770, + "name": "Barbura", + "county": "Hunedoara" + }, + { + "id": 6771, + "name": "Cainelu de Sus", + "county": "Hunedoara" + }, + { + "id": 6772, + "name": "Craciunesti", + "county": "Hunedoara" + }, + { + "id": 6773, + "name": "Fizes", + "county": "Hunedoara" + }, + { + "id": 6774, + "name": "Hartagani", + "county": "Hunedoara" + }, + { + "id": 6775, + "name": "Lunca", + "county": "Hunedoara" + }, + { + "id": 6776, + "name": "Ormindea", + "county": "Hunedoara" + }, + { + "id": 6777, + "name": "Pestera", + "county": "Hunedoara" + }, + { + "id": 6778, + "name": "Saliste", + "county": "Hunedoara" + }, + { + "id": 6779, + "name": "Trestia", + "county": "Hunedoara" + }, + { + "id": 6780, + "name": "Batrana", + "county": "Hunedoara" + }, + { + "id": 6781, + "name": "Fata Rosie", + "county": "Hunedoara" + }, + { + "id": 6782, + "name": "Piatra", + "county": "Hunedoara" + }, + { + "id": 6783, + "name": "Rachitaua", + "county": "Hunedoara" + }, + { + "id": 6784, + "name": "Beriu", + "county": "Hunedoara" + }, + { + "id": 6785, + "name": "Castau", + "county": "Hunedoara" + }, + { + "id": 6786, + "name": "Cucuis", + "county": "Hunedoara" + }, + { + "id": 6787, + "name": "Magureni", + "county": "Hunedoara" + }, + { + "id": 6788, + "name": "Orastioara de Jos", + "county": "Hunedoara" + }, + { + "id": 6789, + "name": "Poieni", + "county": "Hunedoara" + }, + { + "id": 6790, + "name": "Sereca", + "county": "Hunedoara" + }, + { + "id": 6791, + "name": "Sibisel", + "county": "Hunedoara" + }, + { + "id": 6792, + "name": "Blajeni", + "county": "Hunedoara" + }, + { + "id": 6793, + "name": "Blajeni-Vulcan", + "county": "Hunedoara" + }, + { + "id": 6794, + "name": "Cris", + "county": "Hunedoara" + }, + { + "id": 6795, + "name": "Dragu-Brad", + "county": "Hunedoara" + }, + { + "id": 6796, + "name": "Grosuri", + "county": "Hunedoara" + }, + { + "id": 6797, + "name": "Plai", + "county": "Hunedoara" + }, + { + "id": 6798, + "name": "Ret", + "county": "Hunedoara" + }, + { + "id": 6799, + "name": "Salatruc", + "county": "Hunedoara" + }, + { + "id": 6800, + "name": "Bosorod", + "county": "Hunedoara" + }, + { + "id": 6801, + "name": "Alun", + "county": "Hunedoara" + }, + { + "id": 6802, + "name": "Bobaia", + "county": "Hunedoara" + }, + { + "id": 6803, + "name": "Chitid", + "county": "Hunedoara" + }, + { + "id": 6804, + "name": "Cioclovina", + "county": "Hunedoara" + }, + { + "id": 6805, + "name": "Luncani", + "county": "Hunedoara" + }, + { + "id": 6806, + "name": "Prihodiste", + "county": "Hunedoara" + }, + { + "id": 6807, + "name": "Ursici", + "county": "Hunedoara" + }, + { + "id": 6808, + "name": "Tarsa", + "county": "Hunedoara" + }, + { + "id": 6809, + "name": "Branisca", + "county": "Hunedoara" + }, + { + "id": 6810, + "name": "Boz", + "county": "Hunedoara" + }, + { + "id": 6811, + "name": "Barastii Iliei", + "county": "Hunedoara" + }, + { + "id": 6812, + "name": "Cabesti", + "county": "Hunedoara" + }, + { + "id": 6813, + "name": "Gialacuta", + "county": "Hunedoara" + }, + { + "id": 6814, + "name": "Furcsoara", + "county": "Hunedoara" + }, + { + "id": 6815, + "name": "Rovina", + "county": "Hunedoara" + }, + { + "id": 6816, + "name": "Tarnava", + "county": "Hunedoara" + }, + { + "id": 6817, + "name": "Tarnavita", + "county": "Hunedoara" + }, + { + "id": 6818, + "name": "Bretea Romana", + "county": "Hunedoara" + }, + { + "id": 6819, + "name": "Batalar", + "county": "Hunedoara" + }, + { + "id": 6820, + "name": "Bercu", + "county": "Hunedoara" + }, + { + "id": 6821, + "name": "Bretea Streiului", + "county": "Hunedoara" + }, + { + "id": 6822, + "name": "Covragiu", + "county": "Hunedoara" + }, + { + "id": 6823, + "name": "Gantaga", + "county": "Hunedoara" + }, + { + "id": 6824, + "name": "Maceu", + "county": "Hunedoara" + }, + { + "id": 6825, + "name": "Ocolisu Mare", + "county": "Hunedoara" + }, + { + "id": 6826, + "name": "Plopi", + "county": "Hunedoara" + }, + { + "id": 6827, + "name": "Rusi", + "county": "Hunedoara" + }, + { + "id": 6828, + "name": "Valcele", + "county": "Hunedoara" + }, + { + "id": 6829, + "name": "Valcelele Bune", + "county": "Hunedoara" + }, + { + "id": 6830, + "name": "Valceluta", + "county": "Hunedoara" + }, + { + "id": 6831, + "name": "Buces", + "county": "Hunedoara" + }, + { + "id": 6832, + "name": "Buces-Vulcan", + "county": "Hunedoara" + }, + { + "id": 6833, + "name": "Dupapiatra", + "county": "Hunedoara" + }, + { + "id": 6834, + "name": "Grohotele", + "county": "Hunedoara" + }, + { + "id": 6835, + "name": "Mihaileni", + "county": "Hunedoara" + }, + { + "id": 6836, + "name": "Stanija", + "county": "Hunedoara" + }, + { + "id": 6837, + "name": "Tarnita", + "county": "Hunedoara" + }, + { + "id": 6838, + "name": "Bucuresci", + "county": "Hunedoara" + }, + { + "id": 6839, + "name": "Curechiu", + "county": "Hunedoara" + }, + { + "id": 6840, + "name": "Merisor", + "county": "Hunedoara" + }, + { + "id": 6841, + "name": "Rovina", + "county": "Hunedoara" + }, + { + "id": 6842, + "name": "Sesuri", + "county": "Hunedoara" + }, + { + "id": 6843, + "name": "Bulzestii de Sus", + "county": "Hunedoara" + }, + { + "id": 6844, + "name": "Bulzestii de Jos", + "county": "Hunedoara" + }, + { + "id": 6845, + "name": "Giurgesti", + "county": "Hunedoara" + }, + { + "id": 6846, + "name": "Grohot", + "county": "Hunedoara" + }, + { + "id": 6847, + "name": "Paulesti", + "county": "Hunedoara" + }, + { + "id": 6848, + "name": "Rusesti", + "county": "Hunedoara" + }, + { + "id": 6849, + "name": "Stanculesti", + "county": "Hunedoara" + }, + { + "id": 6850, + "name": "Ticera", + "county": "Hunedoara" + }, + { + "id": 6851, + "name": "Tomnatec", + "county": "Hunedoara" + }, + { + "id": 6852, + "name": "Bunila", + "county": "Hunedoara" + }, + { + "id": 6853, + "name": "Alun", + "county": "Hunedoara" + }, + { + "id": 6854, + "name": "Cernisoara Florese", + "county": "Hunedoara" + }, + { + "id": 6855, + "name": "Poienita Voinii", + "county": "Hunedoara" + }, + { + "id": 6856, + "name": "Vadu Dobrii", + "county": "Hunedoara" + }, + { + "id": 6857, + "name": "Burjuc", + "county": "Hunedoara" + }, + { + "id": 6858, + "name": "Bradatel", + "county": "Hunedoara" + }, + { + "id": 6859, + "name": "Glodghilesti", + "county": "Hunedoara" + }, + { + "id": 6860, + "name": "Petresti", + "county": "Hunedoara" + }, + { + "id": 6861, + "name": "Tatarasti", + "county": "Hunedoara" + }, + { + "id": 6862, + "name": "Tisa", + "county": "Hunedoara" + }, + { + "id": 6863, + "name": "Cerbal", + "county": "Hunedoara" + }, + { + "id": 6864, + "name": "Aranies", + "county": "Hunedoara" + }, + { + "id": 6865, + "name": "Feregi", + "county": "Hunedoara" + }, + { + "id": 6866, + "name": "Merisoru de Munte", + "county": "Hunedoara" + }, + { + "id": 6867, + "name": "Poienita Tomii", + "county": "Hunedoara" + }, + { + "id": 6868, + "name": "Poiana Rachitelii", + "county": "Hunedoara" + }, + { + "id": 6869, + "name": "Socet", + "county": "Hunedoara" + }, + { + "id": 6870, + "name": "Ulm", + "county": "Hunedoara" + }, + { + "id": 6871, + "name": "Certeju de Sus", + "county": "Hunedoara" + }, + { + "id": 6872, + "name": "Bocsa Mare", + "county": "Hunedoara" + }, + { + "id": 6873, + "name": "Bocsa Mica", + "county": "Hunedoara" + }, + { + "id": 6874, + "name": "Hondol", + "county": "Hunedoara" + }, + { + "id": 6875, + "name": "Magura-Toplita", + "county": "Hunedoara" + }, + { + "id": 6876, + "name": "Nojag", + "county": "Hunedoara" + }, + { + "id": 6877, + "name": "Sacaramb", + "county": "Hunedoara" + }, + { + "id": 6878, + "name": "Toplita Muresului", + "county": "Hunedoara" + }, + { + "id": 6879, + "name": "Varmaga", + "county": "Hunedoara" + }, + { + "id": 6880, + "name": "Densus", + "county": "Hunedoara" + }, + { + "id": 6881, + "name": "Criva", + "county": "Hunedoara" + }, + { + "id": 6882, + "name": "Hatagel", + "county": "Hunedoara" + }, + { + "id": 6883, + "name": "Pesteana", + "county": "Hunedoara" + }, + { + "id": 6884, + "name": "Pestenita", + "county": "Hunedoara" + }, + { + "id": 6885, + "name": "Poieni", + "county": "Hunedoara" + }, + { + "id": 6886, + "name": "Stei", + "county": "Hunedoara" + }, + { + "id": 6887, + "name": "Dobra", + "county": "Hunedoara" + }, + { + "id": 6888, + "name": "Abucea", + "county": "Hunedoara" + }, + { + "id": 6889, + "name": "Bujoru", + "county": "Hunedoara" + }, + { + "id": 6890, + "name": "Fagetel", + "county": "Hunedoara" + }, + { + "id": 6891, + "name": "Lapusnic", + "county": "Hunedoara" + }, + { + "id": 6892, + "name": "Mihaiesti", + "county": "Hunedoara" + }, + { + "id": 6893, + "name": "Panc", + "county": "Hunedoara" + }, + { + "id": 6894, + "name": "Panc-Saliste", + "county": "Hunedoara" + }, + { + "id": 6895, + "name": "Radulesti", + "county": "Hunedoara" + }, + { + "id": 6896, + "name": "Roscani", + "county": "Hunedoara" + }, + { + "id": 6897, + "name": "Stancesti", + "county": "Hunedoara" + }, + { + "id": 6898, + "name": "Stancesti-Ohaba", + "county": "Hunedoara" + }, + { + "id": 6899, + "name": "Stretea", + "county": "Hunedoara" + }, + { + "id": 6900, + "name": "Geoagiu", + "county": "Hunedoara" + }, + { + "id": 6901, + "name": "Aurel Vlaicu", + "county": "Hunedoara" + }, + { + "id": 6902, + "name": "Bacaia", + "county": "Hunedoara" + }, + { + "id": 6903, + "name": "Bozes", + "county": "Hunedoara" + }, + { + "id": 6904, + "name": "Cigmau", + "county": "Hunedoara" + }, + { + "id": 6905, + "name": "Gelmar", + "county": "Hunedoara" + }, + { + "id": 6906, + "name": "Geoagiu-Bai", + "county": "Hunedoara" + }, + { + "id": 6907, + "name": "Homorod", + "county": "Hunedoara" + }, + { + "id": 6908, + "name": "Mermezeu-Valeni", + "county": "Hunedoara" + }, + { + "id": 6909, + "name": "Renghet", + "county": "Hunedoara" + }, + { + "id": 6910, + "name": "Valeni", + "county": "Hunedoara" + }, + { + "id": 6911, + "name": "Gurasada", + "county": "Hunedoara" + }, + { + "id": 6912, + "name": "Boiu de Jos", + "county": "Hunedoara" + }, + { + "id": 6913, + "name": "Boiu de Sus", + "county": "Hunedoara" + }, + { + "id": 6914, + "name": "Carmazanesti", + "county": "Hunedoara" + }, + { + "id": 6915, + "name": "Campuri de Sus", + "county": "Hunedoara" + }, + { + "id": 6916, + "name": "Campuri-Surduc", + "county": "Hunedoara" + }, + { + "id": 6917, + "name": "Danulesti", + "county": "Hunedoara" + }, + { + "id": 6918, + "name": "Gothatea", + "county": "Hunedoara" + }, + { + "id": 6919, + "name": "Runcsor", + "county": "Hunedoara" + }, + { + "id": 6920, + "name": "Ulies", + "county": "Hunedoara" + }, + { + "id": 6921, + "name": "Vica", + "county": "Hunedoara" + }, + { + "id": 6922, + "name": "Harau", + "county": "Hunedoara" + }, + { + "id": 6923, + "name": "Banpotoc", + "county": "Hunedoara" + }, + { + "id": 6924, + "name": "Barsau", + "county": "Hunedoara" + }, + { + "id": 6925, + "name": "Chimindia", + "county": "Hunedoara" + }, + { + "id": 6926, + "name": "Ilia", + "county": "Hunedoara" + }, + { + "id": 6927, + "name": "Bacea", + "county": "Hunedoara" + }, + { + "id": 6928, + "name": "Bretea Muresana", + "county": "Hunedoara" + }, + { + "id": 6929, + "name": "Braznic", + "county": "Hunedoara" + }, + { + "id": 6930, + "name": "Cuies", + "county": "Hunedoara" + }, + { + "id": 6931, + "name": "Dumbravita", + "county": "Hunedoara" + }, + { + "id": 6932, + "name": "Sacamas", + "county": "Hunedoara" + }, + { + "id": 6933, + "name": "Sarbi", + "county": "Hunedoara" + }, + { + "id": 6934, + "name": "Valea Lunga", + "county": "Hunedoara" + }, + { + "id": 6935, + "name": "Lapugiu de Jos", + "county": "Hunedoara" + }, + { + "id": 6936, + "name": "Bastea", + "county": "Hunedoara" + }, + { + "id": 6937, + "name": "Cosesti", + "county": "Hunedoara" + }, + { + "id": 6938, + "name": "Fintoag", + "county": "Hunedoara" + }, + { + "id": 6939, + "name": "Grind", + "county": "Hunedoara" + }, + { + "id": 6940, + "name": "Holdea", + "county": "Hunedoara" + }, + { + "id": 6941, + "name": "Lapugiu de Sus", + "county": "Hunedoara" + }, + { + "id": 6942, + "name": "Lasau", + "county": "Hunedoara" + }, + { + "id": 6943, + "name": "Ohaba", + "county": "Hunedoara" + }, + { + "id": 6944, + "name": "Teiu", + "county": "Hunedoara" + }, + { + "id": 6945, + "name": "Lelese", + "county": "Hunedoara" + }, + { + "id": 6946, + "name": "Cerisor", + "county": "Hunedoara" + }, + { + "id": 6947, + "name": "Runcu Mare", + "county": "Hunedoara" + }, + { + "id": 6948, + "name": "Sohodol", + "county": "Hunedoara" + }, + { + "id": 6949, + "name": "Lunca Cernii de Jos", + "county": "Hunedoara" + }, + { + "id": 6950, + "name": "Ciumita", + "county": "Hunedoara" + }, + { + "id": 6951, + "name": "Fantana", + "county": "Hunedoara" + }, + { + "id": 6952, + "name": "Gura Bordului", + "county": "Hunedoara" + }, + { + "id": 6953, + "name": "Lunca Cernii de Sus", + "county": "Hunedoara" + }, + { + "id": 6954, + "name": "Meria", + "county": "Hunedoara" + }, + { + "id": 6955, + "name": "Negoiu", + "county": "Hunedoara" + }, + { + "id": 6956, + "name": "Valea Babii", + "county": "Hunedoara" + }, + { + "id": 6957, + "name": "Luncoiu de Jos", + "county": "Hunedoara" + }, + { + "id": 6958, + "name": "Dudesti", + "county": "Hunedoara" + }, + { + "id": 6959, + "name": "Luncoiu de Sus", + "county": "Hunedoara" + }, + { + "id": 6960, + "name": "Podele", + "county": "Hunedoara" + }, + { + "id": 6961, + "name": "Stejarel", + "county": "Hunedoara" + }, + { + "id": 6962, + "name": "Martinesti", + "county": "Hunedoara" + }, + { + "id": 6963, + "name": "Dancu Mare", + "county": "Hunedoara" + }, + { + "id": 6964, + "name": "Dancu Mic", + "county": "Hunedoara" + }, + { + "id": 6965, + "name": "Jeledinti", + "county": "Hunedoara" + }, + { + "id": 6966, + "name": "Magura", + "county": "Hunedoara" + }, + { + "id": 6967, + "name": "Tamasasa", + "county": "Hunedoara" + }, + { + "id": 6968, + "name": "Turmas", + "county": "Hunedoara" + }, + { + "id": 6969, + "name": "Orastioara de Sus", + "county": "Hunedoara" + }, + { + "id": 6970, + "name": "Bucium", + "county": "Hunedoara" + }, + { + "id": 6971, + "name": "Costesti", + "county": "Hunedoara" + }, + { + "id": 6972, + "name": "Costesti-Deal", + "county": "Hunedoara" + }, + { + "id": 6973, + "name": "Gradistea de Munte", + "county": "Hunedoara" + }, + { + "id": 6974, + "name": "Ludestii de Jos", + "county": "Hunedoara" + }, + { + "id": 6975, + "name": "Ludestii de Sus", + "county": "Hunedoara" + }, + { + "id": 6976, + "name": "Ocolisu Mic", + "county": "Hunedoara" + }, + { + "id": 6977, + "name": "Pestisu Mic", + "county": "Hunedoara" + }, + { + "id": 6978, + "name": "Almasu Mic", + "county": "Hunedoara" + }, + { + "id": 6979, + "name": "Ciulpaz", + "county": "Hunedoara" + }, + { + "id": 6980, + "name": "Cutin", + "county": "Hunedoara" + }, + { + "id": 6981, + "name": "Dumbrava", + "county": "Hunedoara" + }, + { + "id": 6982, + "name": "Josani", + "county": "Hunedoara" + }, + { + "id": 6983, + "name": "Manerau", + "county": "Hunedoara" + }, + { + "id": 6984, + "name": "Nandru", + "county": "Hunedoara" + }, + { + "id": 6985, + "name": "Valea Nandrului", + "county": "Hunedoara" + }, + { + "id": 6986, + "name": "Pui", + "county": "Hunedoara" + }, + { + "id": 6987, + "name": "Baiesti", + "county": "Hunedoara" + }, + { + "id": 6988, + "name": "Federi", + "county": "Hunedoara" + }, + { + "id": 6989, + "name": "Fizesti", + "county": "Hunedoara" + }, + { + "id": 6990, + "name": "Galati", + "county": "Hunedoara" + }, + { + "id": 6991, + "name": "Hobita", + "county": "Hunedoara" + }, + { + "id": 6992, + "name": "Ohaba-Ponor", + "county": "Hunedoara" + }, + { + "id": 6993, + "name": "Ponor", + "county": "Hunedoara" + }, + { + "id": 6994, + "name": "Rau Barbat", + "county": "Hunedoara" + }, + { + "id": 6995, + "name": "Rusor", + "county": "Hunedoara" + }, + { + "id": 6996, + "name": "Serel", + "county": "Hunedoara" + }, + { + "id": 6997, + "name": "Uric", + "county": "Hunedoara" + }, + { + "id": 6998, + "name": "Rapoltu Mare", + "county": "Hunedoara" + }, + { + "id": 6999, + "name": "Bobalna", + "county": "Hunedoara" + }, + { + "id": 7000, + "name": "Boiu", + "county": "Hunedoara" + }, + { + "id": 7001, + "name": "Folt", + "county": "Hunedoara" + }, + { + "id": 7002, + "name": "Rapoltel", + "county": "Hunedoara" + }, + { + "id": 7003, + "name": "Rachitova", + "county": "Hunedoara" + }, + { + "id": 7004, + "name": "Boita", + "county": "Hunedoara" + }, + { + "id": 7005, + "name": "Ciula Mare", + "county": "Hunedoara" + }, + { + "id": 7006, + "name": "Ciula Mica", + "county": "Hunedoara" + }, + { + "id": 7007, + "name": "Gotesti", + "county": "Hunedoara" + }, + { + "id": 7008, + "name": "Mesteacan", + "county": "Hunedoara" + }, + { + "id": 7009, + "name": "Valioara", + "county": "Hunedoara" + }, + { + "id": 7010, + "name": "Ribita", + "county": "Hunedoara" + }, + { + "id": 7011, + "name": "Crisan", + "county": "Hunedoara" + }, + { + "id": 7012, + "name": "Dumbrava de Jos", + "county": "Hunedoara" + }, + { + "id": 7013, + "name": "Dumbrava de Sus", + "county": "Hunedoara" + }, + { + "id": 7014, + "name": "Ribicioara", + "county": "Hunedoara" + }, + { + "id": 7015, + "name": "Uibaresti", + "county": "Hunedoara" + }, + { + "id": 7016, + "name": "Rau de Mori", + "county": "Hunedoara" + }, + { + "id": 7017, + "name": "Brazi", + "county": "Hunedoara" + }, + { + "id": 7018, + "name": "Clopotiva", + "county": "Hunedoara" + }, + { + "id": 7019, + "name": "Ohaba-Sibisel", + "county": "Hunedoara" + }, + { + "id": 7020, + "name": "Ostrov", + "county": "Hunedoara" + }, + { + "id": 7021, + "name": "Ostrovel", + "county": "Hunedoara" + }, + { + "id": 7022, + "name": "Ostrovu Mic", + "county": "Hunedoara" + }, + { + "id": 7023, + "name": "Sibisel", + "county": "Hunedoara" + }, + { + "id": 7024, + "name": "Suseni", + "county": "Hunedoara" + }, + { + "id": 7025, + "name": "Unciuc", + "county": "Hunedoara" + }, + { + "id": 7026, + "name": "Valea Daljii", + "county": "Hunedoara" + }, + { + "id": 7027, + "name": "Romos", + "county": "Hunedoara" + }, + { + "id": 7028, + "name": "Ciungu Mare", + "county": "Hunedoara" + }, + { + "id": 7029, + "name": "Pischinti", + "county": "Hunedoara" + }, + { + "id": 7030, + "name": "Romosel", + "county": "Hunedoara" + }, + { + "id": 7031, + "name": "Vaidei", + "county": "Hunedoara" + }, + { + "id": 7032, + "name": "Sarmizegetusa", + "county": "Hunedoara" + }, + { + "id": 7033, + "name": "Breazova", + "county": "Hunedoara" + }, + { + "id": 7034, + "name": "Hobita-Gradiste", + "county": "Hunedoara" + }, + { + "id": 7035, + "name": "Paucinesti", + "county": "Hunedoara" + }, + { + "id": 7036, + "name": "Zeicani", + "county": "Hunedoara" + }, + { + "id": 7037, + "name": "Salasu de Sus", + "county": "Hunedoara" + }, + { + "id": 7038, + "name": "Coroiesti", + "county": "Hunedoara" + }, + { + "id": 7039, + "name": "Malaiesti", + "county": "Hunedoara" + }, + { + "id": 7040, + "name": "Nucsoara", + "county": "Hunedoara" + }, + { + "id": 7041, + "name": "Ohaba de Sub Piatra", + "county": "Hunedoara" + }, + { + "id": 7042, + "name": "Paros", + "county": "Hunedoara" + }, + { + "id": 7043, + "name": "Pestera", + "county": "Hunedoara" + }, + { + "id": 7044, + "name": "Rau Alb", + "county": "Hunedoara" + }, + { + "id": 7045, + "name": "Rau Mic", + "county": "Hunedoara" + }, + { + "id": 7046, + "name": "Salasu de Jos", + "county": "Hunedoara" + }, + { + "id": 7047, + "name": "Zavoi", + "county": "Hunedoara" + }, + { + "id": 7048, + "name": "Santamaria-Orlea", + "county": "Hunedoara" + }, + { + "id": 7049, + "name": "Balomir", + "county": "Hunedoara" + }, + { + "id": 7050, + "name": "Barastii Hategului", + "county": "Hunedoara" + }, + { + "id": 7051, + "name": "Bucium-Orlea", + "county": "Hunedoara" + }, + { + "id": 7052, + "name": "Ciopeia", + "county": "Hunedoara" + }, + { + "id": 7053, + "name": "Sacel", + "county": "Hunedoara" + }, + { + "id": 7054, + "name": "Sanpetru", + "county": "Hunedoara" + }, + { + "id": 7055, + "name": "Subcetate", + "county": "Hunedoara" + }, + { + "id": 7056, + "name": "Vadu", + "county": "Hunedoara" + }, + { + "id": 7057, + "name": "Soimus", + "county": "Hunedoara" + }, + { + "id": 7058, + "name": "Balata", + "county": "Hunedoara" + }, + { + "id": 7059, + "name": "Boholt", + "county": "Hunedoara" + }, + { + "id": 7060, + "name": "Bejan", + "county": "Hunedoara" + }, + { + "id": 7061, + "name": "Bejan-Tarnavita", + "county": "Hunedoara" + }, + { + "id": 7062, + "name": "Cainelu de Jos", + "county": "Hunedoara" + }, + { + "id": 7063, + "name": "Chiscadaga", + "county": "Hunedoara" + }, + { + "id": 7064, + "name": "Fornadia", + "county": "Hunedoara" + }, + { + "id": 7065, + "name": "Paulis", + "county": "Hunedoara" + }, + { + "id": 7066, + "name": "Sulighete", + "county": "Hunedoara" + }, + { + "id": 7067, + "name": "Tomesti", + "county": "Hunedoara" + }, + { + "id": 7068, + "name": "Dobrot", + "county": "Hunedoara" + }, + { + "id": 7069, + "name": "Leaut", + "county": "Hunedoara" + }, + { + "id": 7070, + "name": "Livada", + "county": "Hunedoara" + }, + { + "id": 7071, + "name": "Obarsa", + "county": "Hunedoara" + }, + { + "id": 7072, + "name": "Steia", + "county": "Hunedoara" + }, + { + "id": 7073, + "name": "Tiulesti", + "county": "Hunedoara" + }, + { + "id": 7074, + "name": "Valea Mare de Cris", + "county": "Hunedoara" + }, + { + "id": 7075, + "name": "Toplita", + "county": "Hunedoara" + }, + { + "id": 7076, + "name": "Curpenii Silvasului", + "county": "Hunedoara" + }, + { + "id": 7077, + "name": "Dealu Mic", + "county": "Hunedoara" + }, + { + "id": 7078, + "name": "Dabaca", + "county": "Hunedoara" + }, + { + "id": 7079, + "name": "Goles", + "county": "Hunedoara" + }, + { + "id": 7080, + "name": "Hasdau", + "county": "Hunedoara" + }, + { + "id": 7081, + "name": "Mosoru", + "county": "Hunedoara" + }, + { + "id": 7082, + "name": "Valari", + "county": "Hunedoara" + }, + { + "id": 7083, + "name": "Totesti", + "county": "Hunedoara" + }, + { + "id": 7084, + "name": "Carnesti", + "county": "Hunedoara" + }, + { + "id": 7085, + "name": "Copaci", + "county": "Hunedoara" + }, + { + "id": 7086, + "name": "Paclisa", + "county": "Hunedoara" + }, + { + "id": 7087, + "name": "Reea", + "county": "Hunedoara" + }, + { + "id": 7088, + "name": "Turdas", + "county": "Hunedoara" + }, + { + "id": 7089, + "name": "Pricaz", + "county": "Hunedoara" + }, + { + "id": 7090, + "name": "Rapas", + "county": "Hunedoara" + }, + { + "id": 7091, + "name": "Spini", + "county": "Hunedoara" + }, + { + "id": 7092, + "name": "General Berthelot", + "county": "Hunedoara" + }, + { + "id": 7093, + "name": "Craguis", + "county": "Hunedoara" + }, + { + "id": 7094, + "name": "Farcadin", + "county": "Hunedoara" + }, + { + "id": 7095, + "name": "Livezi", + "county": "Hunedoara" + }, + { + "id": 7096, + "name": "Tustea", + "county": "Hunedoara" + }, + { + "id": 7097, + "name": "Vata de Jos", + "county": "Hunedoara" + }, + { + "id": 7098, + "name": "Basarabasa", + "county": "Hunedoara" + }, + { + "id": 7099, + "name": "Birtin", + "county": "Hunedoara" + }, + { + "id": 7100, + "name": "Brotuna", + "county": "Hunedoara" + }, + { + "id": 7101, + "name": "Cazanesti", + "county": "Hunedoara" + }, + { + "id": 7102, + "name": "Ciungani", + "county": "Hunedoara" + }, + { + "id": 7103, + "name": "Ociu", + "county": "Hunedoara" + }, + { + "id": 7104, + "name": "Ocisor", + "county": "Hunedoara" + }, + { + "id": 7105, + "name": "Pravaleni", + "county": "Hunedoara" + }, + { + "id": 7106, + "name": "Prihodiste", + "county": "Hunedoara" + }, + { + "id": 7107, + "name": "Tatarastii de Cris", + "county": "Hunedoara" + }, + { + "id": 7108, + "name": "Tarnava de Cris", + "county": "Hunedoara" + }, + { + "id": 7109, + "name": "Vata de Sus", + "county": "Hunedoara" + }, + { + "id": 7110, + "name": "Valisoara", + "county": "Hunedoara" + }, + { + "id": 7111, + "name": "Dealu Mare", + "county": "Hunedoara" + }, + { + "id": 7112, + "name": "Salistioara", + "county": "Hunedoara" + }, + { + "id": 7113, + "name": "Stoieneasa", + "county": "Hunedoara" + }, + { + "id": 7114, + "name": "Vetel", + "county": "Hunedoara" + }, + { + "id": 7115, + "name": "Boia Barzii", + "county": "Hunedoara" + }, + { + "id": 7116, + "name": "Bretelin", + "county": "Hunedoara" + }, + { + "id": 7117, + "name": "Caoi", + "county": "Hunedoara" + }, + { + "id": 7118, + "name": "Herepeia", + "county": "Hunedoara" + }, + { + "id": 7119, + "name": "Lesnic", + "county": "Hunedoara" + }, + { + "id": 7120, + "name": "Mintia", + "county": "Hunedoara" + }, + { + "id": 7121, + "name": "Muncelu Mare", + "county": "Hunedoara" + }, + { + "id": 7122, + "name": "Muncelu Mic", + "county": "Hunedoara" + }, + { + "id": 7123, + "name": "Runcu Mic", + "county": "Hunedoara" + }, + { + "id": 7124, + "name": "Vorta", + "county": "Hunedoara" + }, + { + "id": 7125, + "name": "Certeju de Jos", + "county": "Hunedoara" + }, + { + "id": 7126, + "name": "Coaja", + "county": "Hunedoara" + }, + { + "id": 7127, + "name": "Dumesti", + "county": "Hunedoara" + }, + { + "id": 7128, + "name": "Luncsoara", + "county": "Hunedoara" + }, + { + "id": 7129, + "name": "Valea Poienii", + "county": "Hunedoara" + }, + { + "id": 7130, + "name": "Visca", + "county": "Hunedoara" + }, + { + "id": 7131, + "name": "Zam", + "county": "Hunedoara" + }, + { + "id": 7132, + "name": "Almasel", + "county": "Hunedoara" + }, + { + "id": 7133, + "name": "Almas-Saliste", + "county": "Hunedoara" + }, + { + "id": 7134, + "name": "Braseu", + "county": "Hunedoara" + }, + { + "id": 7135, + "name": "Cerbia", + "county": "Hunedoara" + }, + { + "id": 7136, + "name": "Deleni", + "county": "Hunedoara" + }, + { + "id": 7137, + "name": "Godinesti", + "county": "Hunedoara" + }, + { + "id": 7138, + "name": "Micanesti", + "county": "Hunedoara" + }, + { + "id": 7139, + "name": "Poganesti", + "county": "Hunedoara" + }, + { + "id": 7140, + "name": "Pojoga", + "county": "Hunedoara" + }, + { + "id": 7141, + "name": "Salciva", + "county": "Hunedoara" + }, + { + "id": 7142, + "name": "Tamasesti", + "county": "Hunedoara" + }, + { + "id": 7143, + "name": "Valea", + "county": "Hunedoara" + }, + { + "id": 7144, + "name": "Calarasi", + "county": "Calarasi" + }, + { + "id": 7145, + "name": "Modelu", + "county": "Calarasi" + }, + { + "id": 7146, + "name": "Radu Negru", + "county": "Calarasi" + }, + { + "id": 7147, + "name": "Stoenesti", + "county": "Calarasi" + }, + { + "id": 7148, + "name": "Tonea", + "county": "Calarasi" + }, + { + "id": 7149, + "name": "Slobozia", + "county": "Ialomita" + }, + { + "id": 7150, + "name": "Bora", + "county": "Ialomita" + }, + { + "id": 7151, + "name": "Slobozia Noua", + "county": "Ialomita" + }, + { + "id": 7152, + "name": "Fetesti", + "county": "Ialomita" + }, + { + "id": 7153, + "name": "Buliga", + "county": "Ialomita" + }, + { + "id": 7154, + "name": "Fetesti-Gara", + "county": "Ialomita" + }, + { + "id": 7155, + "name": "Vlasca", + "county": "Ialomita" + }, + { + "id": 7156, + "name": "Tandarei", + "county": "Ialomita" + }, + { + "id": 7157, + "name": "Albesti", + "county": "Ialomita" + }, + { + "id": 7158, + "name": "Bataluri", + "county": "Ialomita" + }, + { + "id": 7159, + "name": "Buesti", + "county": "Ialomita" + }, + { + "id": 7160, + "name": "Marsilieni", + "county": "Ialomita" + }, + { + "id": 7161, + "name": "Amara", + "county": "Ialomita" + }, + { + "id": 7162, + "name": "Amara Noua", + "county": "Ialomita" + }, + { + "id": 7163, + "name": "Andrasesti", + "county": "Ialomita" + }, + { + "id": 7164, + "name": "Orboesti", + "county": "Ialomita" + }, + { + "id": 7165, + "name": "Balaciu", + "county": "Ialomita" + }, + { + "id": 7166, + "name": "Copuzu", + "county": "Ialomita" + }, + { + "id": 7167, + "name": "Crasanii de Jos", + "county": "Ialomita" + }, + { + "id": 7168, + "name": "Crasanii de Sus", + "county": "Ialomita" + }, + { + "id": 7169, + "name": "Sarateni", + "county": "Ialomita" + }, + { + "id": 7170, + "name": "Borcea", + "county": "Calarasi" + }, + { + "id": 7171, + "name": "Bordusani", + "county": "Ialomita" + }, + { + "id": 7172, + "name": "Cegani", + "county": "Ialomita" + }, + { + "id": 7173, + "name": "Bucu", + "county": "Ialomita" + }, + { + "id": 7174, + "name": "Ograda", + "county": "Ialomita" + }, + { + "id": 7175, + "name": "Cazanesti", + "county": "Ialomita" + }, + { + "id": 7176, + "name": "Ciocanesti", + "county": "Calarasi" + }, + { + "id": 7177, + "name": "Ciochina", + "county": "Ialomita" + }, + { + "id": 7178, + "name": "Borduselu", + "county": "Ialomita" + }, + { + "id": 7179, + "name": "Orezu", + "county": "Ialomita" + }, + { + "id": 7180, + "name": "Piersica", + "county": "Ialomita" + }, + { + "id": 7181, + "name": "Ciulnita", + "county": "Ialomita" + }, + { + "id": 7182, + "name": "Ion Ghica", + "county": "Ialomita" + }, + { + "id": 7183, + "name": "Ivanesti", + "county": "Ialomita" + }, + { + "id": 7184, + "name": "Poiana", + "county": "Ialomita" + }, + { + "id": 7185, + "name": "Cocora", + "county": "Ialomita" + }, + { + "id": 7186, + "name": "Colelia", + "county": "Ialomita" + }, + { + "id": 7187, + "name": "Cosambesti", + "county": "Ialomita" + }, + { + "id": 7188, + "name": "Gimbasani", + "county": "Ialomita" + }, + { + "id": 7189, + "name": "Marculesti", + "county": "Ialomita" + }, + { + "id": 7190, + "name": "Ceacu", + "county": "Calarasi" + }, + { + "id": 7191, + "name": "Calarasii Vechi", + "county": "Calarasi" + }, + { + "id": 7192, + "name": "Cuza Voda", + "county": "Calarasi" + }, + { + "id": 7193, + "name": "Dichiseni", + "county": "Calarasi" + }, + { + "id": 7194, + "name": "Coslogeni", + "county": "Calarasi" + }, + { + "id": 7195, + "name": "Libertatea", + "county": "Calarasi" + }, + { + "id": 7196, + "name": "Satnoeni", + "county": "Calarasi" + }, + { + "id": 7197, + "name": "Dor Marunt", + "county": "Calarasi" + }, + { + "id": 7198, + "name": "Dalga", + "county": "Calarasi" + }, + { + "id": 7199, + "name": "Dalga-Gara", + "county": "Calarasi" + }, + { + "id": 7200, + "name": "Infratirea", + "county": "Calarasi" + }, + { + "id": 7201, + "name": "Ogoru", + "county": "Calarasi" + }, + { + "id": 7202, + "name": "Pelinu", + "county": "Calarasi" + }, + { + "id": 7203, + "name": "Dorobantu", + "county": "Calarasi" + }, + { + "id": 7204, + "name": "Bosneagu", + "county": "Calarasi" + }, + { + "id": 7205, + "name": "Varasti", + "county": "Calarasi" + }, + { + "id": 7206, + "name": "Dragalina", + "county": "Calarasi" + }, + { + "id": 7207, + "name": "Constantin Brancoveanu", + "county": "Calarasi" + }, + { + "id": 7208, + "name": "Drajna Noua", + "county": "Calarasi" + }, + { + "id": 7209, + "name": "Dragos Voda", + "county": "Calarasi" + }, + { + "id": 7210, + "name": "Bogdana", + "county": "Calarasi" + }, + { + "id": 7211, + "name": "Socoalele", + "county": "Calarasi" + }, + { + "id": 7212, + "name": "Facaeni", + "county": "Ialomita" + }, + { + "id": 7213, + "name": "Progresu", + "county": "Ialomita" + }, + { + "id": 7214, + "name": "Gheorghe Doja", + "county": "Ialomita" + }, + { + "id": 7215, + "name": "Gheorghe Lazar", + "county": "Ialomita" + }, + { + "id": 7216, + "name": "Giurgeni", + "county": "Ialomita" + }, + { + "id": 7217, + "name": "Gradistea", + "county": "Calarasi" + }, + { + "id": 7218, + "name": "Bogata", + "county": "Calarasi" + }, + { + "id": 7219, + "name": "Cunesti", + "county": "Calarasi" + }, + { + "id": 7220, + "name": "Rasa", + "county": "Calarasi" + }, + { + "id": 7221, + "name": "Grindu", + "county": "Ialomita" + }, + { + "id": 7222, + "name": "Grivita", + "county": "Ialomita" + }, + { + "id": 7223, + "name": "Smirna", + "county": "Ialomita" + }, + { + "id": 7224, + "name": "Traian", + "county": "Ialomita" + }, + { + "id": 7225, + "name": "Independenta", + "county": "Calarasi" + }, + { + "id": 7226, + "name": "Potcoava", + "county": "Calarasi" + }, + { + "id": 7227, + "name": "Visinii", + "county": "Calarasi" + }, + { + "id": 7228, + "name": "Jegalia", + "county": "Calarasi" + }, + { + "id": 7229, + "name": "Galdau", + "county": "Calarasi" + }, + { + "id": 7230, + "name": "Iezeru", + "county": "Calarasi" + }, + { + "id": 7231, + "name": "Lehliu", + "county": "Calarasi" + }, + { + "id": 7232, + "name": "Sapunari", + "county": "Calarasi" + }, + { + "id": 7233, + "name": "Lehliu-Gara", + "county": "Calarasi" + }, + { + "id": 7234, + "name": "Buzoeni", + "county": "Calarasi" + }, + { + "id": 7235, + "name": "Razvani", + "county": "Calarasi" + }, + { + "id": 7236, + "name": "Valea Seaca", + "county": "Calarasi" + }, + { + "id": 7237, + "name": "Lupsanu", + "county": "Calarasi" + }, + { + "id": 7238, + "name": "Nucetu", + "county": "Calarasi" + }, + { + "id": 7239, + "name": "Plevna", + "county": "Calarasi" + }, + { + "id": 7240, + "name": "Radu Voda", + "county": "Calarasi" + }, + { + "id": 7241, + "name": "Valea Rusului", + "county": "Calarasi" + }, + { + "id": 7242, + "name": "Mihail Kogalniceanu", + "county": "Ialomita" + }, + { + "id": 7243, + "name": "Gura Ialomitei", + "county": "Ialomita" + }, + { + "id": 7244, + "name": "Hagieni", + "county": "Ialomita" + }, + { + "id": 7245, + "name": "Luciu", + "county": "Ialomita" + }, + { + "id": 7246, + "name": "Milosesti", + "county": "Ialomita" + }, + { + "id": 7247, + "name": "Nicolesti", + "county": "Ialomita" + }, + { + "id": 7248, + "name": "Tovarasia", + "county": "Ialomita" + }, + { + "id": 7249, + "name": "Movila", + "county": "Ialomita" + }, + { + "id": 7250, + "name": "Munteni-Buzau", + "county": "Ialomita" + }, + { + "id": 7251, + "name": "Nicolae Balcescu", + "county": "Calarasi" + }, + { + "id": 7252, + "name": "Alexandru Odobescu", + "county": "Calarasi" + }, + { + "id": 7253, + "name": "Galatui", + "county": "Calarasi" + }, + { + "id": 7254, + "name": "Perieti", + "county": "Ialomita" + }, + { + "id": 7255, + "name": "Fundata", + "county": "Ialomita" + }, + { + "id": 7256, + "name": "Misleanu", + "county": "Ialomita" + }, + { + "id": 7257, + "name": "Paltinisu", + "county": "Ialomita" + }, + { + "id": 7258, + "name": "Stejaru", + "county": "Ialomita" + }, + { + "id": 7259, + "name": "Perisoru", + "county": "Calarasi" + }, + { + "id": 7260, + "name": "Marculesti-Gara", + "county": "Calarasi" + }, + { + "id": 7261, + "name": "Tudor Vladimirescu", + "county": "Calarasi" + }, + { + "id": 7262, + "name": "Reviga", + "county": "Ialomita" + }, + { + "id": 7263, + "name": "Crunti", + "county": "Ialomita" + }, + { + "id": 7264, + "name": "Mircea cel Batran", + "county": "Ialomita" + }, + { + "id": 7265, + "name": "Rovine", + "county": "Ialomita" + }, + { + "id": 7266, + "name": "Roseti", + "county": "Calarasi" + }, + { + "id": 7267, + "name": "Salcioara", + "county": "Ialomita" + }, + { + "id": 7268, + "name": "Rasi", + "county": "Ialomita" + }, + { + "id": 7269, + "name": "Saveni", + "county": "Ialomita" + }, + { + "id": 7270, + "name": "Fratilesti", + "county": "Ialomita" + }, + { + "id": 7271, + "name": "Lacusteni", + "county": "Ialomita" + }, + { + "id": 7272, + "name": "Platonesti", + "county": "Ialomita" + }, + { + "id": 7273, + "name": "Scanteia", + "county": "Ialomita" + }, + { + "id": 7274, + "name": "Iazu", + "county": "Ialomita" + }, + { + "id": 7275, + "name": "Sfantu Gheorghe", + "county": "Ialomita" + }, + { + "id": 7276, + "name": "Butoiu", + "county": "Ialomita" + }, + { + "id": 7277, + "name": "Malu", + "county": "Ialomita" + }, + { + "id": 7278, + "name": "Stelnica", + "county": "Ialomita" + }, + { + "id": 7279, + "name": "Maltezi", + "county": "Ialomita" + }, + { + "id": 7280, + "name": "Retezatu", + "county": "Ialomita" + }, + { + "id": 7281, + "name": "Suditi", + "county": "Ialomita" + }, + { + "id": 7282, + "name": "Gura Vaii", + "county": "Ialomita" + }, + { + "id": 7283, + "name": "Stefan cel Mare", + "county": "Calarasi" + }, + { + "id": 7284, + "name": "Stefan Voda", + "county": "Calarasi" + }, + { + "id": 7285, + "name": "Ulmu", + "county": "Calarasi" + }, + { + "id": 7286, + "name": "Chirnogi", + "county": "Calarasi" + }, + { + "id": 7287, + "name": "Faurei", + "county": "Calarasi" + }, + { + "id": 7288, + "name": "Zimbru", + "county": "Calarasi" + }, + { + "id": 7289, + "name": "Unirea", + "county": "Calarasi" + }, + { + "id": 7290, + "name": "Oltina", + "county": "Calarasi" + }, + { + "id": 7291, + "name": "Valea Ciorii", + "county": "Ialomita" + }, + { + "id": 7292, + "name": "Bucsa", + "county": "Ialomita" + }, + { + "id": 7293, + "name": "Dumitresti", + "county": "Ialomita" + }, + { + "id": 7294, + "name": "Murgeanca", + "county": "Ialomita" + }, + { + "id": 7295, + "name": "Valcelele", + "county": "Calarasi" + }, + { + "id": 7296, + "name": "Floroaica", + "county": "Calarasi" + }, + { + "id": 7297, + "name": "Vlad Tepes", + "county": "Calarasi" + }, + { + "id": 7298, + "name": "Mihai Viteazu", + "county": "Calarasi" + }, + { + "id": 7299, + "name": "Vladeni", + "county": "Ialomita" + }, + { + "id": 7300, + "name": "Iasi", + "county": "Iasi" + }, + { + "id": 7301, + "name": "Barnova", + "county": "Iasi" + }, + { + "id": 7302, + "name": "Cercu", + "county": "Iasi" + }, + { + "id": 7303, + "name": "Paun", + "county": "Iasi" + }, + { + "id": 7304, + "name": "Pietraria", + "county": "Iasi" + }, + { + "id": 7305, + "name": "Todirel", + "county": "Iasi" + }, + { + "id": 7306, + "name": "Visan", + "county": "Iasi" + }, + { + "id": 7307, + "name": "Holboca", + "county": "Iasi" + }, + { + "id": 7308, + "name": "Cristesti", + "county": "Iasi" + }, + { + "id": 7309, + "name": "Dancu", + "county": "Iasi" + }, + { + "id": 7310, + "name": "Orzeni", + "county": "Iasi" + }, + { + "id": 7311, + "name": "Rusenii Noi", + "county": "Iasi" + }, + { + "id": 7312, + "name": "Rusenii Vechi", + "county": "Iasi" + }, + { + "id": 7313, + "name": "Valea Lunga", + "county": "Iasi" + }, + { + "id": 7314, + "name": "Rediu", + "county": "Iasi" + }, + { + "id": 7315, + "name": "Breazu", + "county": "Iasi" + }, + { + "id": 7316, + "name": "Horlesti", + "county": "Iasi" + }, + { + "id": 7317, + "name": "Tautesti", + "county": "Iasi" + }, + { + "id": 7318, + "name": "Valea Lupului", + "county": "Iasi" + }, + { + "id": 7319, + "name": "Tomesti", + "county": "Iasi" + }, + { + "id": 7320, + "name": "Chicerea", + "county": "Iasi" + }, + { + "id": 7321, + "name": "Goruni", + "county": "Iasi" + }, + { + "id": 7322, + "name": "Vladiceni", + "county": "Iasi" + }, + { + "id": 7323, + "name": "Harlau", + "county": "Iasi" + }, + { + "id": 7324, + "name": "Parcovaci", + "county": "Iasi" + }, + { + "id": 7325, + "name": "Pascani", + "county": "Iasi" + }, + { + "id": 7326, + "name": "Blagesti", + "county": "Iasi" + }, + { + "id": 7327, + "name": "Bosteni", + "county": "Iasi" + }, + { + "id": 7328, + "name": "Gastesti", + "county": "Iasi" + }, + { + "id": 7329, + "name": "Lunca", + "county": "Iasi" + }, + { + "id": 7330, + "name": "Sodomeni", + "county": "Iasi" + }, + { + "id": 7331, + "name": "Targu Frumos", + "county": "Iasi" + }, + { + "id": 7332, + "name": "Bals", + "county": "Iasi" + }, + { + "id": 7333, + "name": "Boureni", + "county": "Iasi" + }, + { + "id": 7334, + "name": "Buznea", + "county": "Iasi" + }, + { + "id": 7335, + "name": "Coasta Magurii", + "county": "Iasi" + }, + { + "id": 7336, + "name": "Costesti", + "county": "Iasi" + }, + { + "id": 7337, + "name": "Dadesti", + "county": "Iasi" + }, + { + "id": 7338, + "name": "Ganesti", + "county": "Iasi" + }, + { + "id": 7339, + "name": "Giurgesti", + "county": "Iasi" + }, + { + "id": 7340, + "name": "Ion Neculce", + "county": "Iasi" + }, + { + "id": 7341, + "name": "Prigoreni", + "county": "Iasi" + }, + { + "id": 7342, + "name": "Razboieni", + "county": "Iasi" + }, + { + "id": 7343, + "name": "Alexandru I. Cuza", + "county": "Iasi" + }, + { + "id": 7344, + "name": "Kogalniceni", + "county": "Iasi" + }, + { + "id": 7345, + "name": "Scheia", + "county": "Iasi" + }, + { + "id": 7346, + "name": "Volintiresti", + "county": "Iasi" + }, + { + "id": 7347, + "name": "Andrieseni", + "county": "Iasi" + }, + { + "id": 7348, + "name": "Buhaeni", + "county": "Iasi" + }, + { + "id": 7349, + "name": "Draganesti", + "county": "Iasi" + }, + { + "id": 7350, + "name": "Fantanele", + "county": "Iasi" + }, + { + "id": 7351, + "name": "Glavanesti", + "county": "Iasi" + }, + { + "id": 7352, + "name": "Iepureni", + "county": "Iasi" + }, + { + "id": 7353, + "name": "Spineni", + "county": "Iasi" + }, + { + "id": 7354, + "name": "Aroneanu", + "county": "Iasi" + }, + { + "id": 7355, + "name": "Dorobant", + "county": "Iasi" + }, + { + "id": 7356, + "name": "Rediu Aldei", + "county": "Iasi" + }, + { + "id": 7357, + "name": "Sorogani", + "county": "Iasi" + }, + { + "id": 7358, + "name": "Baltati", + "county": "Iasi" + }, + { + "id": 7359, + "name": "Cotargaci", + "county": "Iasi" + }, + { + "id": 7360, + "name": "Filiasi", + "county": "Iasi" + }, + { + "id": 7361, + "name": "Madarjesti", + "county": "Iasi" + }, + { + "id": 7362, + "name": "Podisu", + "county": "Iasi" + }, + { + "id": 7363, + "name": "Sarca", + "county": "Iasi" + }, + { + "id": 7364, + "name": "Valea Oilor", + "county": "Iasi" + }, + { + "id": 7365, + "name": "Belcesti", + "county": "Iasi" + }, + { + "id": 7366, + "name": "Liteni", + "county": "Iasi" + }, + { + "id": 7367, + "name": "Munteni", + "county": "Iasi" + }, + { + "id": 7368, + "name": "Satu Nou", + "county": "Iasi" + }, + { + "id": 7369, + "name": "Tansa", + "county": "Iasi" + }, + { + "id": 7370, + "name": "Ulmi", + "county": "Iasi" + }, + { + "id": 7371, + "name": "Bivolari", + "county": "Iasi" + }, + { + "id": 7372, + "name": "Buruienesti", + "county": "Iasi" + }, + { + "id": 7373, + "name": "Solonet", + "county": "Iasi" + }, + { + "id": 7374, + "name": "Tabara", + "county": "Iasi" + }, + { + "id": 7375, + "name": "Traian", + "county": "Iasi" + }, + { + "id": 7376, + "name": "Bosia", + "county": "Iasi" + }, + { + "id": 7377, + "name": "Coada Stancii", + "county": "Iasi" + }, + { + "id": 7378, + "name": "Manzatesti", + "county": "Iasi" + }, + { + "id": 7379, + "name": "Ungheni", + "county": "Iasi" + }, + { + "id": 7380, + "name": "Braesti", + "county": "Iasi" + }, + { + "id": 7381, + "name": "Albesti", + "county": "Iasi" + }, + { + "id": 7382, + "name": "Buda", + "county": "Iasi" + }, + { + "id": 7383, + "name": "Cristesti", + "county": "Iasi" + }, + { + "id": 7384, + "name": "Rediu", + "county": "Iasi" + }, + { + "id": 7385, + "name": "Butea", + "county": "Iasi" + }, + { + "id": 7386, + "name": "Miclauseni", + "county": "Iasi" + }, + { + "id": 7387, + "name": "Ceplenita", + "county": "Iasi" + }, + { + "id": 7388, + "name": "Buhalnita", + "county": "Iasi" + }, + { + "id": 7389, + "name": "Poiana Marului", + "county": "Iasi" + }, + { + "id": 7390, + "name": "Zlodica", + "county": "Iasi" + }, + { + "id": 7391, + "name": "Ciortesti", + "county": "Iasi" + }, + { + "id": 7392, + "name": "Coropceni", + "county": "Iasi" + }, + { + "id": 7393, + "name": "Deleni", + "county": "Iasi" + }, + { + "id": 7394, + "name": "Rotaria", + "county": "Iasi" + }, + { + "id": 7395, + "name": "Serbesti", + "county": "Iasi" + }, + { + "id": 7396, + "name": "Ciurea", + "county": "Iasi" + }, + { + "id": 7397, + "name": "Curaturi", + "county": "Iasi" + }, + { + "id": 7398, + "name": "Dumbrava", + "county": "Iasi" + }, + { + "id": 7399, + "name": "Hlincea", + "county": "Iasi" + }, + { + "id": 7400, + "name": "Lunca Cetatuii", + "county": "Iasi" + }, + { + "id": 7401, + "name": "Picioru Lupului", + "county": "Iasi" + }, + { + "id": 7402, + "name": "Slobozia", + "county": "Iasi" + }, + { + "id": 7403, + "name": "Coarnele Caprei", + "county": "Iasi" + }, + { + "id": 7404, + "name": "Arama", + "county": "Iasi" + }, + { + "id": 7405, + "name": "Petrosica", + "county": "Iasi" + }, + { + "id": 7406, + "name": "Osoi", + "county": "Iasi" + }, + { + "id": 7407, + "name": "Comarna", + "county": "Iasi" + }, + { + "id": 7408, + "name": "Curagau", + "county": "Iasi" + }, + { + "id": 7409, + "name": "Stanca", + "county": "Iasi" + }, + { + "id": 7410, + "name": "Costuleni", + "county": "Iasi" + }, + { + "id": 7411, + "name": "Covasna", + "county": "Iasi" + }, + { + "id": 7412, + "name": "Cozia", + "county": "Iasi" + }, + { + "id": 7413, + "name": "Hilita", + "county": "Iasi" + }, + { + "id": 7414, + "name": "Cotnari", + "county": "Iasi" + }, + { + "id": 7415, + "name": "Bahluiu", + "county": "Iasi" + }, + { + "id": 7416, + "name": "Cireseni", + "county": "Iasi" + }, + { + "id": 7417, + "name": "Carjoaia", + "county": "Iasi" + }, + { + "id": 7418, + "name": "Fagat", + "county": "Iasi" + }, + { + "id": 7419, + "name": "Hodora", + "county": "Iasi" + }, + { + "id": 7420, + "name": "Horodistea", + "county": "Iasi" + }, + { + "id": 7421, + "name": "Iosupeni", + "county": "Iasi" + }, + { + "id": 7422, + "name": "Luparia", + "county": "Iasi" + }, + { + "id": 7423, + "name": "Valea Racului", + "county": "Iasi" + }, + { + "id": 7424, + "name": "Zbereni", + "county": "Iasi" + }, + { + "id": 7425, + "name": "Cozmesti", + "county": "Iasi" + }, + { + "id": 7426, + "name": "Podolenii de Jos", + "county": "Iasi" + }, + { + "id": 7427, + "name": "Podolenii de Sus", + "county": "Iasi" + }, + { + "id": 7428, + "name": "Cristesti", + "county": "Iasi" + }, + { + "id": 7429, + "name": "Homita", + "county": "Iasi" + }, + { + "id": 7430, + "name": "Cucuteni", + "county": "Iasi" + }, + { + "id": 7431, + "name": "Baiceni", + "county": "Iasi" + }, + { + "id": 7432, + "name": "Barbatesti", + "county": "Iasi" + }, + { + "id": 7433, + "name": "Sacaresti", + "county": "Iasi" + }, + { + "id": 7434, + "name": "Dagata", + "county": "Iasi" + }, + { + "id": 7435, + "name": "Balusesti", + "county": "Iasi" + }, + { + "id": 7436, + "name": "Boatca", + "county": "Iasi" + }, + { + "id": 7437, + "name": "Buzdug", + "county": "Iasi" + }, + { + "id": 7438, + "name": "Manastirea", + "county": "Iasi" + }, + { + "id": 7439, + "name": "Piscu Rusului", + "county": "Iasi" + }, + { + "id": 7440, + "name": "Poienile", + "county": "Iasi" + }, + { + "id": 7441, + "name": "Tarnita", + "county": "Iasi" + }, + { + "id": 7442, + "name": "Zece Prajini", + "county": "Iasi" + }, + { + "id": 7443, + "name": "Deleni", + "county": "Iasi" + }, + { + "id": 7444, + "name": "Feredeni", + "county": "Iasi" + }, + { + "id": 7445, + "name": "Leahu-Nacu", + "county": "Iasi" + }, + { + "id": 7446, + "name": "Maxut", + "county": "Iasi" + }, + { + "id": 7447, + "name": "Poiana", + "county": "Iasi" + }, + { + "id": 7448, + "name": "Slobozia", + "county": "Iasi" + }, + { + "id": 7449, + "name": "Dobrovat", + "county": "Iasi" + }, + { + "id": 7450, + "name": "Dolhesti", + "county": "Iasi" + }, + { + "id": 7451, + "name": "Bradicesti", + "county": "Iasi" + }, + { + "id": 7452, + "name": "Pietris", + "county": "Iasi" + }, + { + "id": 7453, + "name": "Dumesti", + "county": "Iasi" + }, + { + "id": 7454, + "name": "Banu", + "county": "Iasi" + }, + { + "id": 7455, + "name": "Chilisoaia", + "county": "Iasi" + }, + { + "id": 7456, + "name": "Hoisesti", + "county": "Iasi" + }, + { + "id": 7457, + "name": "Pausesti", + "county": "Iasi" + }, + { + "id": 7458, + "name": "Erbiceni", + "county": "Iasi" + }, + { + "id": 7459, + "name": "Barlesti", + "county": "Iasi" + }, + { + "id": 7460, + "name": "Spinoasa", + "county": "Iasi" + }, + { + "id": 7461, + "name": "Spranceana", + "county": "Iasi" + }, + { + "id": 7462, + "name": "Totoesti", + "county": "Iasi" + }, + { + "id": 7463, + "name": "Focuri", + "county": "Iasi" + }, + { + "id": 7464, + "name": "Fantanele", + "county": "Iasi" + }, + { + "id": 7465, + "name": "Golaiesti", + "county": "Iasi" + }, + { + "id": 7466, + "name": "Bran", + "county": "Iasi" + }, + { + "id": 7467, + "name": "Cilibiu", + "county": "Iasi" + }, + { + "id": 7468, + "name": "Cotu lui Ivan", + "county": "Iasi" + }, + { + "id": 7469, + "name": "Gradinari", + "county": "Iasi" + }, + { + "id": 7470, + "name": "Medeleni", + "county": "Iasi" + }, + { + "id": 7471, + "name": "Petresti", + "county": "Iasi" + }, + { + "id": 7472, + "name": "Podu Jijiei", + "county": "Iasi" + }, + { + "id": 7473, + "name": "Gorban", + "county": "Iasi" + }, + { + "id": 7474, + "name": "Gura Bohotin", + "county": "Iasi" + }, + { + "id": 7475, + "name": "Podu Hagiului", + "county": "Iasi" + }, + { + "id": 7476, + "name": "Scoposeni", + "county": "Iasi" + }, + { + "id": 7477, + "name": "Zberoaia", + "county": "Iasi" + }, + { + "id": 7478, + "name": "Grajduri", + "county": "Iasi" + }, + { + "id": 7479, + "name": "Carbunari", + "county": "Iasi" + }, + { + "id": 7480, + "name": "Corcodel", + "county": "Iasi" + }, + { + "id": 7481, + "name": "Lunca", + "county": "Iasi" + }, + { + "id": 7482, + "name": "Padureni", + "county": "Iasi" + }, + { + "id": 7483, + "name": "Poiana cu Cetate", + "county": "Iasi" + }, + { + "id": 7484, + "name": "Valea Satului", + "county": "Iasi" + }, + { + "id": 7485, + "name": "Gropnita", + "county": "Iasi" + }, + { + "id": 7486, + "name": "Bulbucani", + "county": "Iasi" + }, + { + "id": 7487, + "name": "Forasti", + "county": "Iasi" + }, + { + "id": 7488, + "name": "Malaesti", + "county": "Iasi" + }, + { + "id": 7489, + "name": "Saveni", + "county": "Iasi" + }, + { + "id": 7490, + "name": "Sangeri", + "county": "Iasi" + }, + { + "id": 7491, + "name": "Grozesti", + "county": "Iasi" + }, + { + "id": 7492, + "name": "Coltu Cornii", + "county": "Iasi" + }, + { + "id": 7493, + "name": "Salageni", + "county": "Iasi" + }, + { + "id": 7494, + "name": "Halaucesti", + "county": "Iasi" + }, + { + "id": 7495, + "name": "Luncasi", + "county": "Iasi" + }, + { + "id": 7496, + "name": "Helesteni", + "county": "Iasi" + }, + { + "id": 7497, + "name": "Harmaneasa", + "county": "Iasi" + }, + { + "id": 7498, + "name": "Movileni", + "county": "Iasi" + }, + { + "id": 7499, + "name": "Oboroceni", + "county": "Iasi" + }, + { + "id": 7500, + "name": "Horlesti", + "county": "Iasi" + }, + { + "id": 7501, + "name": "Bogdanesti", + "county": "Iasi" + }, + { + "id": 7502, + "name": "Scoposeni", + "county": "Iasi" + }, + { + "id": 7503, + "name": "Ipatele", + "county": "Iasi" + }, + { + "id": 7504, + "name": "Alexesti", + "county": "Iasi" + }, + { + "id": 7505, + "name": "Bacu", + "county": "Iasi" + }, + { + "id": 7506, + "name": "Cuza Voda", + "county": "Iasi" + }, + { + "id": 7507, + "name": "Lespezi", + "county": "Iasi" + }, + { + "id": 7508, + "name": "Buda", + "county": "Iasi" + }, + { + "id": 7509, + "name": "Bursuc-Deal", + "county": "Iasi" + }, + { + "id": 7510, + "name": "Bursuc-Vale", + "county": "Iasi" + }, + { + "id": 7511, + "name": "Dumbrava", + "county": "Iasi" + }, + { + "id": 7512, + "name": "Heci", + "county": "Iasi" + }, + { + "id": 7513, + "name": "Letcani", + "county": "Iasi" + }, + { + "id": 7514, + "name": "Bogonos", + "county": "Iasi" + }, + { + "id": 7515, + "name": "Cogeasca", + "county": "Iasi" + }, + { + "id": 7516, + "name": "Cucuteni", + "county": "Iasi" + }, + { + "id": 7517, + "name": "Lungani", + "county": "Iasi" + }, + { + "id": 7518, + "name": "Crucea", + "county": "Iasi" + }, + { + "id": 7519, + "name": "Goesti", + "county": "Iasi" + }, + { + "id": 7520, + "name": "Zmeu", + "county": "Iasi" + }, + { + "id": 7521, + "name": "Madarjac", + "county": "Iasi" + }, + { + "id": 7522, + "name": "Bojila", + "county": "Iasi" + }, + { + "id": 7523, + "name": "Frumusica", + "county": "Iasi" + }, + { + "id": 7524, + "name": "Mircesti", + "county": "Iasi" + }, + { + "id": 7525, + "name": "Iugani", + "county": "Iasi" + }, + { + "id": 7526, + "name": "Izvoarele", + "county": "Iasi" + }, + { + "id": 7527, + "name": "Rachiteni", + "county": "Iasi" + }, + { + "id": 7528, + "name": "Ursaresti", + "county": "Iasi" + }, + { + "id": 7529, + "name": "Mironeasa", + "county": "Iasi" + }, + { + "id": 7530, + "name": "Schitu Hadambului", + "county": "Iasi" + }, + { + "id": 7531, + "name": "Ursita", + "county": "Iasi" + }, + { + "id": 7532, + "name": "Miroslava", + "county": "Iasi" + }, + { + "id": 7533, + "name": "Balciu", + "county": "Iasi" + }, + { + "id": 7534, + "name": "Bratuleni", + "county": "Iasi" + }, + { + "id": 7535, + "name": "Ciurbesti", + "county": "Iasi" + }, + { + "id": 7536, + "name": "Cornesti", + "county": "Iasi" + }, + { + "id": 7537, + "name": "Dancas", + "county": "Iasi" + }, + { + "id": 7538, + "name": "Gaureni", + "county": "Iasi" + }, + { + "id": 7539, + "name": "Horpaz", + "county": "Iasi" + }, + { + "id": 7540, + "name": "Proselnici", + "county": "Iasi" + }, + { + "id": 7541, + "name": "Uricani", + "county": "Iasi" + }, + { + "id": 7542, + "name": "Valea Adanca", + "county": "Iasi" + }, + { + "id": 7543, + "name": "Valea Ursului", + "county": "Iasi" + }, + { + "id": 7544, + "name": "Vorovesti", + "county": "Iasi" + }, + { + "id": 7545, + "name": "Miroslovesti", + "county": "Iasi" + }, + { + "id": 7546, + "name": "Ciohorani", + "county": "Iasi" + }, + { + "id": 7547, + "name": "Mitesti", + "county": "Iasi" + }, + { + "id": 7548, + "name": "Soci", + "county": "Iasi" + }, + { + "id": 7549, + "name": "Verseni", + "county": "Iasi" + }, + { + "id": 7550, + "name": "Mogosesti", + "county": "Iasi" + }, + { + "id": 7551, + "name": "Budesti", + "county": "Iasi" + }, + { + "id": 7552, + "name": "Hadambu", + "county": "Iasi" + }, + { + "id": 7553, + "name": "Manjesti", + "county": "Iasi" + }, + { + "id": 7554, + "name": "Mogosesti-Siret", + "county": "Iasi" + }, + { + "id": 7555, + "name": "Muncelu de Sus", + "county": "Iasi" + }, + { + "id": 7556, + "name": "Tudor Vladimirescu", + "county": "Iasi" + }, + { + "id": 7557, + "name": "Mosna", + "county": "Iasi" + }, + { + "id": 7558, + "name": "Motca", + "county": "Iasi" + }, + { + "id": 7559, + "name": "Boureni", + "county": "Iasi" + }, + { + "id": 7560, + "name": "Movileni", + "county": "Iasi" + }, + { + "id": 7561, + "name": "Iepureni", + "county": "Iasi" + }, + { + "id": 7562, + "name": "Larga-Jijia", + "county": "Iasi" + }, + { + "id": 7563, + "name": "Potangeni", + "county": "Iasi" + }, + { + "id": 7564, + "name": "Oteleni", + "county": "Iasi" + }, + { + "id": 7565, + "name": "Handresti", + "county": "Iasi" + }, + { + "id": 7566, + "name": "Plugari", + "county": "Iasi" + }, + { + "id": 7567, + "name": "Borosoaia", + "county": "Iasi" + }, + { + "id": 7568, + "name": "Onesti", + "county": "Iasi" + }, + { + "id": 7569, + "name": "Podu Iloaiei", + "county": "Iasi" + }, + { + "id": 7570, + "name": "Budai", + "county": "Iasi" + }, + { + "id": 7571, + "name": "Cositeni", + "county": "Iasi" + }, + { + "id": 7572, + "name": "Holm", + "county": "Iasi" + }, + { + "id": 7573, + "name": "Scobalteni", + "county": "Iasi" + }, + { + "id": 7574, + "name": "Popesti", + "county": "Iasi" + }, + { + "id": 7575, + "name": "Doroscani", + "county": "Iasi" + }, + { + "id": 7576, + "name": "Harpasesti", + "county": "Iasi" + }, + { + "id": 7577, + "name": "Obrijeni", + "county": "Iasi" + }, + { + "id": 7578, + "name": "Padureni", + "county": "Iasi" + }, + { + "id": 7579, + "name": "Vama", + "county": "Iasi" + }, + { + "id": 7580, + "name": "Popricani", + "county": "Iasi" + }, + { + "id": 7581, + "name": "Carlig", + "county": "Iasi" + }, + { + "id": 7582, + "name": "Cotu Morii", + "county": "Iasi" + }, + { + "id": 7583, + "name": "Cuza Voda", + "county": "Iasi" + }, + { + "id": 7584, + "name": "Moimesti", + "county": "Iasi" + }, + { + "id": 7585, + "name": "Rediu Mitropoliei", + "county": "Iasi" + }, + { + "id": 7586, + "name": "Tipilesti", + "county": "Iasi" + }, + { + "id": 7587, + "name": "Vanatori", + "county": "Iasi" + }, + { + "id": 7588, + "name": "Vulturi", + "county": "Iasi" + }, + { + "id": 7589, + "name": "Prisacani", + "county": "Iasi" + }, + { + "id": 7590, + "name": "Macaresti", + "county": "Iasi" + }, + { + "id": 7591, + "name": "Moreni", + "county": "Iasi" + }, + { + "id": 7592, + "name": "Probota", + "county": "Iasi" + }, + { + "id": 7593, + "name": "Balteni", + "county": "Iasi" + }, + { + "id": 7594, + "name": "Perieni", + "county": "Iasi" + }, + { + "id": 7595, + "name": "Raducaneni", + "county": "Iasi" + }, + { + "id": 7596, + "name": "Bohotin", + "county": "Iasi" + }, + { + "id": 7597, + "name": "Isaiia", + "county": "Iasi" + }, + { + "id": 7598, + "name": "Rosu", + "county": "Iasi" + }, + { + "id": 7599, + "name": "Romanesti", + "county": "Iasi" + }, + { + "id": 7600, + "name": "Avantu", + "county": "Iasi" + }, + { + "id": 7601, + "name": "Ursoaia", + "county": "Iasi" + }, + { + "id": 7602, + "name": "Ruginoasa", + "county": "Iasi" + }, + { + "id": 7603, + "name": "Dumbravita", + "county": "Iasi" + }, + { + "id": 7604, + "name": "Rediu", + "county": "Iasi" + }, + { + "id": 7605, + "name": "Vascani", + "county": "Iasi" + }, + { + "id": 7606, + "name": "Schitu Duca", + "county": "Iasi" + }, + { + "id": 7607, + "name": "Blaga", + "county": "Iasi" + }, + { + "id": 7608, + "name": "Dumitrestii Galatii", + "county": "Iasi" + }, + { + "id": 7609, + "name": "Pocreaca", + "county": "Iasi" + }, + { + "id": 7610, + "name": "Poieni", + "county": "Iasi" + }, + { + "id": 7611, + "name": "Poiana", + "county": "Iasi" + }, + { + "id": 7612, + "name": "Satu Nou", + "county": "Iasi" + }, + { + "id": 7613, + "name": "Slobozia", + "county": "Iasi" + }, + { + "id": 7614, + "name": "Scanteia", + "county": "Iasi" + }, + { + "id": 7615, + "name": "Bodesti", + "county": "Iasi" + }, + { + "id": 7616, + "name": "Borosesti", + "county": "Iasi" + }, + { + "id": 7617, + "name": "Ciocarlesti", + "county": "Iasi" + }, + { + "id": 7618, + "name": "Lunca Rates", + "county": "Iasi" + }, + { + "id": 7619, + "name": "Rediu", + "county": "Iasi" + }, + { + "id": 7620, + "name": "Tufestii de Sus", + "county": "Iasi" + }, + { + "id": 7621, + "name": "Scobinti", + "county": "Iasi" + }, + { + "id": 7622, + "name": "Badeni", + "county": "Iasi" + }, + { + "id": 7623, + "name": "Fetesti", + "county": "Iasi" + }, + { + "id": 7624, + "name": "Sticlaria", + "county": "Iasi" + }, + { + "id": 7625, + "name": "Zagavia", + "county": "Iasi" + }, + { + "id": 7626, + "name": "Sinesti", + "county": "Iasi" + }, + { + "id": 7627, + "name": "Bocnita", + "county": "Iasi" + }, + { + "id": 7628, + "name": "Osoi", + "county": "Iasi" + }, + { + "id": 7629, + "name": "Stornesti", + "county": "Iasi" + }, + { + "id": 7630, + "name": "Siretel", + "county": "Iasi" + }, + { + "id": 7631, + "name": "Berezlogi", + "county": "Iasi" + }, + { + "id": 7632, + "name": "Humosu", + "county": "Iasi" + }, + { + "id": 7633, + "name": "Satu Nou", + "county": "Iasi" + }, + { + "id": 7634, + "name": "Slobozia", + "county": "Iasi" + }, + { + "id": 7635, + "name": "Stolniceni-Prajescu", + "county": "Iasi" + }, + { + "id": 7636, + "name": "Bratesti", + "county": "Iasi" + }, + { + "id": 7637, + "name": "Cozmesti", + "county": "Iasi" + }, + { + "id": 7638, + "name": "Strunga", + "county": "Iasi" + }, + { + "id": 7639, + "name": "Bratulesti", + "county": "Iasi" + }, + { + "id": 7640, + "name": "Crivesti", + "county": "Iasi" + }, + { + "id": 7641, + "name": "Cucova", + "county": "Iasi" + }, + { + "id": 7642, + "name": "Farcaseni", + "county": "Iasi" + }, + { + "id": 7643, + "name": "Fedeleseni", + "county": "Iasi" + }, + { + "id": 7644, + "name": "Gura Vaii", + "county": "Iasi" + }, + { + "id": 7645, + "name": "Habasesti", + "county": "Iasi" + }, + { + "id": 7646, + "name": "Scheia", + "county": "Iasi" + }, + { + "id": 7647, + "name": "Cauesti", + "county": "Iasi" + }, + { + "id": 7648, + "name": "Cioca-Boca", + "county": "Iasi" + }, + { + "id": 7649, + "name": "Draguseni", + "county": "Iasi" + }, + { + "id": 7650, + "name": "Frenciugi", + "county": "Iasi" + }, + { + "id": 7651, + "name": "Poiana Scheii", + "county": "Iasi" + }, + { + "id": 7652, + "name": "Satu Nou", + "county": "Iasi" + }, + { + "id": 7653, + "name": "Sipote", + "county": "Iasi" + }, + { + "id": 7654, + "name": "Chiscareni", + "county": "Iasi" + }, + { + "id": 7655, + "name": "Halceni", + "county": "Iasi" + }, + { + "id": 7656, + "name": "Iazu Nou", + "county": "Iasi" + }, + { + "id": 7657, + "name": "Iazu Vechi", + "county": "Iasi" + }, + { + "id": 7658, + "name": "Mitoc", + "county": "Iasi" + }, + { + "id": 7659, + "name": "Tansa", + "county": "Iasi" + }, + { + "id": 7660, + "name": "Suhulet", + "county": "Iasi" + }, + { + "id": 7661, + "name": "Tatarusi", + "county": "Iasi" + }, + { + "id": 7662, + "name": "Iorcani", + "county": "Iasi" + }, + { + "id": 7663, + "name": "Pietrosu", + "county": "Iasi" + }, + { + "id": 7664, + "name": "Uda", + "county": "Iasi" + }, + { + "id": 7665, + "name": "Valcica", + "county": "Iasi" + }, + { + "id": 7666, + "name": "Todiresti", + "county": "Iasi" + }, + { + "id": 7667, + "name": "Baiceni", + "county": "Iasi" + }, + { + "id": 7668, + "name": "Boldesti", + "county": "Iasi" + }, + { + "id": 7669, + "name": "Harmanestii Noi", + "county": "Iasi" + }, + { + "id": 7670, + "name": "Harmanestii Vechi", + "county": "Iasi" + }, + { + "id": 7671, + "name": "Stroesti", + "county": "Iasi" + }, + { + "id": 7672, + "name": "Trifesti", + "county": "Iasi" + }, + { + "id": 7673, + "name": "Hermeziu", + "county": "Iasi" + }, + { + "id": 7674, + "name": "Radeni", + "county": "Iasi" + }, + { + "id": 7675, + "name": "Roscani", + "county": "Iasi" + }, + { + "id": 7676, + "name": "Vladomira", + "county": "Iasi" + }, + { + "id": 7677, + "name": "Zaboloteni", + "county": "Iasi" + }, + { + "id": 7678, + "name": "Tibana", + "county": "Iasi" + }, + { + "id": 7679, + "name": "Alexeni", + "county": "Iasi" + }, + { + "id": 7680, + "name": "Domnita", + "county": "Iasi" + }, + { + "id": 7681, + "name": "Garbesti", + "county": "Iasi" + }, + { + "id": 7682, + "name": "Moara Ciornei", + "county": "Iasi" + }, + { + "id": 7683, + "name": "Oproaia", + "county": "Iasi" + }, + { + "id": 7684, + "name": "Poiana de Sus", + "county": "Iasi" + }, + { + "id": 7685, + "name": "Poiana Manastirii", + "county": "Iasi" + }, + { + "id": 7686, + "name": "Runcu", + "county": "Iasi" + }, + { + "id": 7687, + "name": "Vadu Vejei", + "county": "Iasi" + }, + { + "id": 7688, + "name": "Tibanesti", + "county": "Iasi" + }, + { + "id": 7689, + "name": "Glodenii Gandului", + "county": "Iasi" + }, + { + "id": 7690, + "name": "Griesti", + "county": "Iasi" + }, + { + "id": 7691, + "name": "Jigoreni", + "county": "Iasi" + }, + { + "id": 7692, + "name": "Rasboieni", + "county": "Iasi" + }, + { + "id": 7693, + "name": "Recea", + "county": "Iasi" + }, + { + "id": 7694, + "name": "Tungujei", + "county": "Iasi" + }, + { + "id": 7695, + "name": "Valenii", + "county": "Iasi" + }, + { + "id": 7696, + "name": "Tiganasi", + "county": "Iasi" + }, + { + "id": 7697, + "name": "Carniceni", + "county": "Iasi" + }, + { + "id": 7698, + "name": "Mihail Kogalniceanu", + "county": "Iasi" + }, + { + "id": 7699, + "name": "Stejarii", + "county": "Iasi" + }, + { + "id": 7700, + "name": "Tutora", + "county": "Iasi" + }, + { + "id": 7701, + "name": "Chiperesti", + "county": "Iasi" + }, + { + "id": 7702, + "name": "Opriseni", + "county": "Iasi" + }, + { + "id": 7703, + "name": "Valea Seaca", + "county": "Iasi" + }, + { + "id": 7704, + "name": "Contesti", + "county": "Iasi" + }, + { + "id": 7705, + "name": "Topile", + "county": "Iasi" + }, + { + "id": 7706, + "name": "Victoria", + "county": "Iasi" + }, + { + "id": 7707, + "name": "Frasuleni", + "county": "Iasi" + }, + { + "id": 7708, + "name": "Icuseni", + "county": "Iasi" + }, + { + "id": 7709, + "name": "Luceni", + "county": "Iasi" + }, + { + "id": 7710, + "name": "Sculeni", + "county": "Iasi" + }, + { + "id": 7711, + "name": "Stanca", + "county": "Iasi" + }, + { + "id": 7712, + "name": "Sendreni", + "county": "Iasi" + }, + { + "id": 7713, + "name": "Vanatori", + "county": "Iasi" + }, + { + "id": 7714, + "name": "Crivesti", + "county": "Iasi" + }, + { + "id": 7715, + "name": "Gura Badilitei", + "county": "Iasi" + }, + { + "id": 7716, + "name": "Hartoape", + "county": "Iasi" + }, + { + "id": 7717, + "name": "Vladnicut", + "county": "Iasi" + }, + { + "id": 7718, + "name": "Vladeni", + "county": "Iasi" + }, + { + "id": 7719, + "name": "Alexandru cel Bun", + "county": "Iasi" + }, + { + "id": 7720, + "name": "Borsa", + "county": "Iasi" + }, + { + "id": 7721, + "name": "Brosteni", + "county": "Iasi" + }, + { + "id": 7722, + "name": "Iacobeni", + "county": "Iasi" + }, + { + "id": 7723, + "name": "Valcelele", + "county": "Iasi" + }, + { + "id": 7724, + "name": "Voinesti", + "county": "Iasi" + }, + { + "id": 7725, + "name": "Lungani", + "county": "Iasi" + }, + { + "id": 7726, + "name": "Schitu Stavnic", + "county": "Iasi" + }, + { + "id": 7727, + "name": "Slobozia", + "county": "Iasi" + }, + { + "id": 7728, + "name": "Vocotesti", + "county": "Iasi" + }, + { + "id": 7729, + "name": "Giurgiu", + "county": "Giurgiu" + }, + { + "id": 7730, + "name": "Slobozia", + "county": "Giurgiu" + }, + { + "id": 7731, + "name": "Buftea", + "county": "Ilfov" + }, + { + "id": 7732, + "name": "Buciumeni", + "county": "Ilfov" + }, + { + "id": 7733, + "name": "Oltenita", + "county": "Calarasi" + }, + { + "id": 7734, + "name": "Mitreni", + "county": "Calarasi" + }, + { + "id": 7735, + "name": "Clatesti", + "county": "Calarasi" + }, + { + "id": 7736, + "name": "Valea Rosie", + "county": "Calarasi" + }, + { + "id": 7737, + "name": "Urziceni", + "county": "Ialomita" + }, + { + "id": 7738, + "name": "Ciocarlia", + "county": "Ialomita" + }, + { + "id": 7739, + "name": "Cotorca", + "county": "Ialomita" + }, + { + "id": 7740, + "name": "Manasia", + "county": "Ialomita" + }, + { + "id": 7741, + "name": "Adancata", + "county": "Ialomita" + }, + { + "id": 7742, + "name": "Patru Frati", + "county": "Ialomita" + }, + { + "id": 7743, + "name": "Adunatii-Copaceni", + "county": "Giurgiu" + }, + { + "id": 7744, + "name": "Darasti-Vlasca", + "county": "Giurgiu" + }, + { + "id": 7745, + "name": "Mogosesti", + "county": "Giurgiu" + }, + { + "id": 7746, + "name": "Varlaam", + "county": "Giurgiu" + }, + { + "id": 7747, + "name": "Afumati", + "county": "Ilfov" + }, + { + "id": 7748, + "name": "Alexeni", + "county": "Ialomita" + }, + { + "id": 7749, + "name": "Armasesti", + "county": "Ialomita" + }, + { + "id": 7750, + "name": "Barbulesti", + "county": "Ialomita" + }, + { + "id": 7751, + "name": "Malu Rosu", + "county": "Ialomita" + }, + { + "id": 7752, + "name": "Nenisori", + "county": "Ialomita" + }, + { + "id": 7753, + "name": "Axintele", + "county": "Ialomita" + }, + { + "id": 7754, + "name": "Barbatescu", + "county": "Ialomita" + }, + { + "id": 7755, + "name": "Horia", + "county": "Ialomita" + }, + { + "id": 7756, + "name": "Balotesti", + "county": "Ilfov" + }, + { + "id": 7757, + "name": "Dumbraveni", + "county": "Ilfov" + }, + { + "id": 7758, + "name": "Saftica", + "county": "Ilfov" + }, + { + "id": 7759, + "name": "Baneasa", + "county": "Giurgiu" + }, + { + "id": 7760, + "name": "Frasinu", + "county": "Giurgiu" + }, + { + "id": 7761, + "name": "Pietrele", + "county": "Giurgiu" + }, + { + "id": 7762, + "name": "Sfantu Gheorghe", + "county": "Giurgiu" + }, + { + "id": 7763, + "name": "Barcanesti", + "county": "Ialomita" + }, + { + "id": 7764, + "name": "Condeesti", + "county": "Ialomita" + }, + { + "id": 7765, + "name": "Belciugatele", + "county": "Calarasi" + }, + { + "id": 7766, + "name": "Candeasca", + "county": "Calarasi" + }, + { + "id": 7767, + "name": "Cojesti", + "county": "Calarasi" + }, + { + "id": 7768, + "name": "Mataraua", + "county": "Calarasi" + }, + { + "id": 7769, + "name": "Mariuta", + "county": "Calarasi" + }, + { + "id": 7770, + "name": "Berceni", + "county": "Ilfov" + }, + { + "id": 7771, + "name": "Bolintin-Deal", + "county": "Giurgiu" + }, + { + "id": 7772, + "name": "Mihai Voda", + "county": "Giurgiu" + }, + { + "id": 7773, + "name": "Bolintin-Vale", + "county": "Giurgiu" + }, + { + "id": 7774, + "name": "Crivina", + "county": "Giurgiu" + }, + { + "id": 7775, + "name": "Malu Spart", + "county": "Giurgiu" + }, + { + "id": 7776, + "name": "Suseni", + "county": "Giurgiu" + }, + { + "id": 7777, + "name": "Brazii", + "county": "Ialomita" + }, + { + "id": 7778, + "name": "Maia", + "county": "Ialomita" + }, + { + "id": 7779, + "name": "Movileanca", + "county": "Ialomita" + }, + { + "id": 7780, + "name": "Rasimnicea", + "county": "Ialomita" + }, + { + "id": 7781, + "name": "Branesti", + "county": "Ilfov" + }, + { + "id": 7782, + "name": "Islaz", + "county": "Ilfov" + }, + { + "id": 7783, + "name": "Pasarea", + "county": "Ilfov" + }, + { + "id": 7784, + "name": "Vadu Anei", + "county": "Ilfov" + }, + { + "id": 7785, + "name": "Brezoaele", + "county": "Dambovita" + }, + { + "id": 7786, + "name": "Brezoaia", + "county": "Dambovita" + }, + { + "id": 7787, + "name": "Bucsani", + "county": "Giurgiu" + }, + { + "id": 7788, + "name": "Anghelesti", + "county": "Giurgiu" + }, + { + "id": 7789, + "name": "Goleasca", + "county": "Giurgiu" + }, + { + "id": 7790, + "name": "Obedeni", + "county": "Giurgiu" + }, + { + "id": 7791, + "name": "Podisor", + "county": "Giurgiu" + }, + { + "id": 7792, + "name": "Vadu Lat", + "county": "Giurgiu" + }, + { + "id": 7793, + "name": "Uiesti", + "county": "Giurgiu" + }, + { + "id": 7794, + "name": "Budesti", + "county": "Calarasi" + }, + { + "id": 7795, + "name": "Aprozi", + "county": "Calarasi" + }, + { + "id": 7796, + "name": "Buciumeni", + "county": "Calarasi" + }, + { + "id": 7797, + "name": "Crivat", + "county": "Calarasi" + }, + { + "id": 7798, + "name": "Gruiu", + "county": "Calarasi" + }, + { + "id": 7799, + "name": "Bulbucata", + "county": "Giurgiu" + }, + { + "id": 7800, + "name": "Coteni", + "county": "Giurgiu" + }, + { + "id": 7801, + "name": "Facau", + "county": "Giurgiu" + }, + { + "id": 7802, + "name": "Teisori", + "county": "Giurgiu" + }, + { + "id": 7803, + "name": "Butimanu", + "county": "Dambovita" + }, + { + "id": 7804, + "name": "Barbuceanu", + "county": "Dambovita" + }, + { + "id": 7805, + "name": "Lucianca", + "county": "Dambovita" + }, + { + "id": 7806, + "name": "Ungureni", + "county": "Dambovita" + }, + { + "id": 7807, + "name": "Buturugeni", + "county": "Giurgiu" + }, + { + "id": 7808, + "name": "Padureni", + "county": "Giurgiu" + }, + { + "id": 7809, + "name": "Podu Ilfovatului", + "county": "Giurgiu" + }, + { + "id": 7810, + "name": "Posta", + "county": "Giurgiu" + }, + { + "id": 7811, + "name": "Calugareni", + "county": "Giurgiu" + }, + { + "id": 7812, + "name": "Branistari", + "county": "Giurgiu" + }, + { + "id": 7813, + "name": "Crucea de Piatra", + "county": "Giurgiu" + }, + { + "id": 7814, + "name": "Hulubesti", + "county": "Giurgiu" + }, + { + "id": 7815, + "name": "Uzunu", + "county": "Giurgiu" + }, + { + "id": 7816, + "name": "Cascioarele", + "county": "Calarasi" + }, + { + "id": 7817, + "name": "Cernica", + "county": "Ilfov" + }, + { + "id": 7818, + "name": "Balaceanca", + "county": "Ilfov" + }, + { + "id": 7819, + "name": "Caldararu", + "county": "Ilfov" + }, + { + "id": 7820, + "name": "Posta", + "county": "Ilfov" + }, + { + "id": 7821, + "name": "Tanganu", + "county": "Ilfov" + }, + { + "id": 7822, + "name": "Chirnogi", + "county": "Calarasi" + }, + { + "id": 7823, + "name": "Chiselet", + "county": "Calarasi" + }, + { + "id": 7824, + "name": "Ciocanesti", + "county": "Dambovita" + }, + { + "id": 7825, + "name": "Cretu", + "county": "Dambovita" + }, + { + "id": 7826, + "name": "Decindea", + "county": "Dambovita" + }, + { + "id": 7827, + "name": "Urziceanca", + "county": "Dambovita" + }, + { + "id": 7828, + "name": "Vizuresti", + "county": "Dambovita" + }, + { + "id": 7829, + "name": "Ciolpani", + "county": "Ilfov" + }, + { + "id": 7830, + "name": "Izvorani", + "county": "Ilfov" + }, + { + "id": 7831, + "name": "Luparia", + "county": "Ilfov" + }, + { + "id": 7832, + "name": "Piscu", + "county": "Ilfov" + }, + { + "id": 7833, + "name": "Ciorogarla", + "county": "Ilfov" + }, + { + "id": 7834, + "name": "Darvari", + "county": "Ilfov" + }, + { + "id": 7835, + "name": "Clejani", + "county": "Giurgiu" + }, + { + "id": 7836, + "name": "Neajlov", + "county": "Giurgiu" + }, + { + "id": 7837, + "name": "Podu Doamnei", + "county": "Giurgiu" + }, + { + "id": 7838, + "name": "Sterea", + "county": "Giurgiu" + }, + { + "id": 7839, + "name": "Clinceni", + "county": "Ilfov" + }, + { + "id": 7840, + "name": "Olteni", + "county": "Ilfov" + }, + { + "id": 7841, + "name": "Ordoreanu", + "county": "Ilfov" + }, + { + "id": 7842, + "name": "Colibasi", + "county": "Giurgiu" + }, + { + "id": 7843, + "name": "Campurelu", + "county": "Giurgiu" + }, + { + "id": 7844, + "name": "Comana", + "county": "Giurgiu" + }, + { + "id": 7845, + "name": "Budeni", + "county": "Giurgiu" + }, + { + "id": 7846, + "name": "Falastoaca", + "county": "Giurgiu" + }, + { + "id": 7847, + "name": "Gradistea", + "county": "Giurgiu" + }, + { + "id": 7848, + "name": "Vlad Tepes", + "county": "Giurgiu" + }, + { + "id": 7849, + "name": "Corbeanca", + "county": "Ilfov" + }, + { + "id": 7850, + "name": "Ostratu", + "county": "Ilfov" + }, + { + "id": 7851, + "name": "Petresti", + "county": "Ilfov" + }, + { + "id": 7852, + "name": "Tamasi", + "county": "Ilfov" + }, + { + "id": 7853, + "name": "Cornetu", + "county": "Ilfov" + }, + { + "id": 7854, + "name": "Buda", + "county": "Ilfov" + }, + { + "id": 7855, + "name": "Cosereni", + "county": "Ialomita" + }, + { + "id": 7856, + "name": "Boranesti", + "county": "Ialomita" + }, + { + "id": 7857, + "name": "Sintesti", + "county": "Ialomita" + }, + { + "id": 7858, + "name": "Crevedia", + "county": "Dambovita" + }, + { + "id": 7859, + "name": "Cocani", + "county": "Dambovita" + }, + { + "id": 7860, + "name": "Darza", + "county": "Dambovita" + }, + { + "id": 7861, + "name": "Manastirea", + "county": "Dambovita" + }, + { + "id": 7862, + "name": "Samurcasi", + "county": "Dambovita" + }, + { + "id": 7863, + "name": "Crevedia Mare", + "county": "Giurgiu" + }, + { + "id": 7864, + "name": "Crevedia Mica", + "county": "Giurgiu" + }, + { + "id": 7865, + "name": "Dealu", + "county": "Giurgiu" + }, + { + "id": 7866, + "name": "Gaiseanca", + "county": "Giurgiu" + }, + { + "id": 7867, + "name": "Priboiu", + "county": "Giurgiu" + }, + { + "id": 7868, + "name": "Sfantu Gheorghe", + "county": "Giurgiu" + }, + { + "id": 7869, + "name": "Curcani", + "county": "Calarasi" + }, + { + "id": 7870, + "name": "Salcioara", + "county": "Calarasi" + }, + { + "id": 7871, + "name": "Daia", + "county": "Giurgiu" + }, + { + "id": 7872, + "name": "Plopsoru", + "county": "Giurgiu" + }, + { + "id": 7873, + "name": "Dascalu", + "county": "Ilfov" + }, + { + "id": 7874, + "name": "Creata", + "county": "Ilfov" + }, + { + "id": 7875, + "name": "Gagu", + "county": "Ilfov" + }, + { + "id": 7876, + "name": "Runcu", + "county": "Ilfov" + }, + { + "id": 7877, + "name": "Darasti-Ilfov", + "county": "Ilfov" + }, + { + "id": 7878, + "name": "1 Decembrie", + "county": "Ilfov" + }, + { + "id": 7879, + "name": "Copaceni", + "county": "Ilfov" + }, + { + "id": 7880, + "name": "Domnesti", + "county": "Ilfov" + }, + { + "id": 7881, + "name": "Teghes", + "county": "Ilfov" + }, + { + "id": 7882, + "name": "Dragomiresti-Vale", + "county": "Ilfov" + }, + { + "id": 7883, + "name": "Dragomiresti-Deal", + "county": "Ilfov" + }, + { + "id": 7884, + "name": "Zurbaua", + "county": "Ilfov" + }, + { + "id": 7885, + "name": "Dragoesti", + "county": "Ialomita" + }, + { + "id": 7886, + "name": "Chiroiu-Pamanteni", + "county": "Ialomita" + }, + { + "id": 7887, + "name": "Chiroiu-Satu Nou", + "county": "Ialomita" + }, + { + "id": 7888, + "name": "Chiroiu-Ungureni", + "county": "Ialomita" + }, + { + "id": 7889, + "name": "Valea Bisericii", + "county": "Ialomita" + }, + { + "id": 7890, + "name": "Dridu", + "county": "Ialomita" + }, + { + "id": 7891, + "name": "Dridu-Snagov", + "county": "Ialomita" + }, + { + "id": 7892, + "name": "Moldoveni", + "county": "Ialomita" + }, + { + "id": 7893, + "name": "Fierbinti-Targ", + "county": "Ialomita" + }, + { + "id": 7894, + "name": "Fierbintii de Jos", + "county": "Ialomita" + }, + { + "id": 7895, + "name": "Fierbintii de Sus", + "county": "Ialomita" + }, + { + "id": 7896, + "name": "Grecii de Jos", + "county": "Ialomita" + }, + { + "id": 7897, + "name": "Stoenesti", + "county": "Giurgiu" + }, + { + "id": 7898, + "name": "Floresti", + "county": "Giurgiu" + }, + { + "id": 7899, + "name": "Palanca", + "county": "Giurgiu" + }, + { + "id": 7900, + "name": "Frasinet", + "county": "Calarasi" + }, + { + "id": 7901, + "name": "Curatesti", + "county": "Calarasi" + }, + { + "id": 7902, + "name": "Danesti", + "county": "Calarasi" + }, + { + "id": 7903, + "name": "Frasinetu de Jos", + "county": "Calarasi" + }, + { + "id": 7904, + "name": "Luptatori", + "county": "Calarasi" + }, + { + "id": 7905, + "name": "Tariceni", + "county": "Calarasi" + }, + { + "id": 7906, + "name": "Fratesti", + "county": "Giurgiu" + }, + { + "id": 7907, + "name": "Cetatea", + "county": "Giurgiu" + }, + { + "id": 7908, + "name": "Remus", + "county": "Giurgiu" + }, + { + "id": 7909, + "name": "Frumusani", + "county": "Calarasi" + }, + { + "id": 7910, + "name": "Orasti", + "county": "Calarasi" + }, + { + "id": 7911, + "name": "Pasarea", + "county": "Calarasi" + }, + { + "id": 7912, + "name": "Padurisu", + "county": "Calarasi" + }, + { + "id": 7913, + "name": "Pitigaia", + "county": "Calarasi" + }, + { + "id": 7914, + "name": "Postavari", + "county": "Calarasi" + }, + { + "id": 7915, + "name": "Fundeni", + "county": "Calarasi" + }, + { + "id": 7916, + "name": "Fundulea", + "county": "Calarasi" + }, + { + "id": 7917, + "name": "Alexandru I. Cuza", + "county": "Calarasi" + }, + { + "id": 7918, + "name": "Gostilele", + "county": "Calarasi" + }, + { + "id": 7919, + "name": "Gaiseni", + "county": "Giurgiu" + }, + { + "id": 7920, + "name": "Carpenisu", + "county": "Giurgiu" + }, + { + "id": 7921, + "name": "Cascioarele", + "county": "Giurgiu" + }, + { + "id": 7922, + "name": "Podu Popa Nae", + "county": "Giurgiu" + }, + { + "id": 7923, + "name": "Ganeasa", + "county": "Ilfov" + }, + { + "id": 7924, + "name": "Cozieni", + "county": "Ilfov" + }, + { + "id": 7925, + "name": "Moara Domneasca", + "county": "Ilfov" + }, + { + "id": 7926, + "name": "Piteasca", + "county": "Ilfov" + }, + { + "id": 7927, + "name": "Sindrilita", + "county": "Ilfov" + }, + { + "id": 7928, + "name": "Gaujani", + "county": "Giurgiu" + }, + { + "id": 7929, + "name": "Cetatuia", + "county": "Giurgiu" + }, + { + "id": 7930, + "name": "Pietrisu", + "county": "Giurgiu" + }, + { + "id": 7931, + "name": "Ghimpati", + "county": "Giurgiu" + }, + { + "id": 7932, + "name": "Copaciu", + "county": "Giurgiu" + }, + { + "id": 7933, + "name": "Naipu", + "county": "Giurgiu" + }, + { + "id": 7934, + "name": "Valea Plopilor", + "county": "Giurgiu" + }, + { + "id": 7935, + "name": "Garbovi", + "county": "Ialomita" + }, + { + "id": 7936, + "name": "Gogosari", + "county": "Giurgiu" + }, + { + "id": 7937, + "name": "Draghiceanu", + "county": "Giurgiu" + }, + { + "id": 7938, + "name": "Izvoru", + "county": "Giurgiu" + }, + { + "id": 7939, + "name": "Ralesti", + "county": "Giurgiu" + }, + { + "id": 7940, + "name": "Gostinu", + "county": "Giurgiu" + }, + { + "id": 7941, + "name": "Gostinari", + "county": "Giurgiu" + }, + { + "id": 7942, + "name": "Mironesti", + "county": "Giurgiu" + }, + { + "id": 7943, + "name": "Gradinari", + "county": "Giurgiu" + }, + { + "id": 7944, + "name": "Tantava", + "county": "Giurgiu" + }, + { + "id": 7945, + "name": "Zorile", + "county": "Giurgiu" + }, + { + "id": 7946, + "name": "Gradistea", + "county": "Ilfov" + }, + { + "id": 7947, + "name": "Sitaru", + "county": "Ilfov" + }, + { + "id": 7948, + "name": "Greaca", + "county": "Giurgiu" + }, + { + "id": 7949, + "name": "Putu Greci", + "county": "Giurgiu" + }, + { + "id": 7950, + "name": "Zboiu", + "county": "Giurgiu" + }, + { + "id": 7951, + "name": "Gruiu", + "county": "Ilfov" + }, + { + "id": 7952, + "name": "Lipia", + "county": "Ilfov" + }, + { + "id": 7953, + "name": "Santu Floresti", + "county": "Ilfov" + }, + { + "id": 7954, + "name": "Silistea Snagovului", + "county": "Ilfov" + }, + { + "id": 7955, + "name": "Gurbanesti", + "county": "Calarasi" + }, + { + "id": 7956, + "name": "Codreni", + "county": "Calarasi" + }, + { + "id": 7957, + "name": "Cotofanca", + "county": "Calarasi" + }, + { + "id": 7958, + "name": "Preasna", + "county": "Calarasi" + }, + { + "id": 7959, + "name": "Preasna Veche", + "county": "Calarasi" + }, + { + "id": 7960, + "name": "Valea Presnei", + "county": "Calarasi" + }, + { + "id": 7961, + "name": "Hotarele", + "county": "Giurgiu" + }, + { + "id": 7962, + "name": "Herasti", + "county": "Giurgiu" + }, + { + "id": 7963, + "name": "Isvoarele", + "county": "Giurgiu" + }, + { + "id": 7964, + "name": "Milosesti", + "county": "Giurgiu" + }, + { + "id": 7965, + "name": "Teiusu", + "county": "Giurgiu" + }, + { + "id": 7966, + "name": "Iepuresti", + "county": "Giurgiu" + }, + { + "id": 7967, + "name": "Banesti", + "county": "Giurgiu" + }, + { + "id": 7968, + "name": "Chirculesti", + "county": "Giurgiu" + }, + { + "id": 7969, + "name": "Gorneni", + "county": "Giurgiu" + }, + { + "id": 7970, + "name": "Stalpu", + "county": "Giurgiu" + }, + { + "id": 7971, + "name": "Valter Maracineanu", + "county": "Giurgiu" + }, + { + "id": 7972, + "name": "Ileana", + "county": "Calarasi" + }, + { + "id": 7973, + "name": "Artari", + "county": "Calarasi" + }, + { + "id": 7974, + "name": "Florica", + "county": "Calarasi" + }, + { + "id": 7975, + "name": "Podari", + "county": "Calarasi" + }, + { + "id": 7976, + "name": "Rasurile", + "county": "Calarasi" + }, + { + "id": 7977, + "name": "Razoarele", + "county": "Calarasi" + }, + { + "id": 7978, + "name": "Satu Nou", + "county": "Calarasi" + }, + { + "id": 7979, + "name": "Stefanesti", + "county": "Calarasi" + }, + { + "id": 7980, + "name": "Vlaiculesti", + "county": "Calarasi" + }, + { + "id": 7981, + "name": "Ion Roata", + "county": "Ialomita" + }, + { + "id": 7982, + "name": "Brosteni", + "county": "Ialomita" + }, + { + "id": 7983, + "name": "Izvoarele", + "county": "Giurgiu" + }, + { + "id": 7984, + "name": "Chiriacu", + "county": "Giurgiu" + }, + { + "id": 7985, + "name": "Dimitrie Cantemir", + "county": "Giurgiu" + }, + { + "id": 7986, + "name": "Petru Rares", + "county": "Giurgiu" + }, + { + "id": 7987, + "name": "Radu Voda", + "county": "Giurgiu" + }, + { + "id": 7988, + "name": "Valea Bujorului", + "county": "Giurgiu" + }, + { + "id": 7989, + "name": "Jilavele", + "county": "Ialomita" + }, + { + "id": 7990, + "name": "Slatioarele", + "county": "Ialomita" + }, + { + "id": 7991, + "name": "Joita", + "county": "Giurgiu" + }, + { + "id": 7992, + "name": "Bacu", + "county": "Giurgiu" + }, + { + "id": 7993, + "name": "Cosoba", + "county": "Giurgiu" + }, + { + "id": 7994, + "name": "Sabareni", + "county": "Giurgiu" + }, + { + "id": 7995, + "name": "Letca Noua", + "county": "Giurgiu" + }, + { + "id": 7996, + "name": "Letca Veche", + "county": "Giurgiu" + }, + { + "id": 7997, + "name": "Milcovatu", + "county": "Giurgiu" + }, + { + "id": 7998, + "name": "Luica", + "county": "Calarasi" + }, + { + "id": 7999, + "name": "Valea Stanii", + "county": "Calarasi" + }, + { + "id": 8000, + "name": "Mihai Bravu", + "county": "Giurgiu" + }, + { + "id": 8001, + "name": "Mihailesti", + "county": "Giurgiu" + }, + { + "id": 8002, + "name": "Draganescu", + "county": "Giurgiu" + }, + { + "id": 8003, + "name": "Novaci", + "county": "Giurgiu" + }, + { + "id": 8004, + "name": "Popesti", + "county": "Giurgiu" + }, + { + "id": 8005, + "name": "Manastirea", + "county": "Calarasi" + }, + { + "id": 8006, + "name": "Coconi", + "county": "Calarasi" + }, + { + "id": 8007, + "name": "Sultana", + "county": "Calarasi" + }, + { + "id": 8008, + "name": "Marsa", + "county": "Giurgiu" + }, + { + "id": 8009, + "name": "Moara Vlasiei", + "county": "Ilfov" + }, + { + "id": 8010, + "name": "Caciulati", + "county": "Ilfov" + }, + { + "id": 8011, + "name": "Movilita", + "county": "Ialomita" + }, + { + "id": 8012, + "name": "Bitina-Pamanteni", + "county": "Ialomita" + }, + { + "id": 8013, + "name": "Bitina-Ungureni", + "county": "Ialomita" + }, + { + "id": 8014, + "name": "Rosiori", + "county": "Ialomita" + }, + { + "id": 8015, + "name": "Nana", + "county": "Calarasi" + }, + { + "id": 8016, + "name": "Nicolae Balcescu", + "county": "Calarasi" + }, + { + "id": 8017, + "name": "Fantana Doamnei", + "county": "Calarasi" + }, + { + "id": 8018, + "name": "Paicu", + "county": "Calarasi" + }, + { + "id": 8019, + "name": "Niculesti", + "county": "Dambovita" + }, + { + "id": 8020, + "name": "Ciocanari", + "county": "Dambovita" + }, + { + "id": 8021, + "name": "Movila", + "county": "Dambovita" + }, + { + "id": 8022, + "name": "Nuci", + "county": "Ilfov" + }, + { + "id": 8023, + "name": "Balta Neagra", + "county": "Ilfov" + }, + { + "id": 8024, + "name": "Merii Petchii", + "county": "Ilfov" + }, + { + "id": 8025, + "name": "Micsunestii Mari", + "county": "Ilfov" + }, + { + "id": 8026, + "name": "Micsunestii-Moara", + "county": "Ilfov" + }, + { + "id": 8027, + "name": "Ogrezeni", + "county": "Giurgiu" + }, + { + "id": 8028, + "name": "Hobaia", + "county": "Giurgiu" + }, + { + "id": 8029, + "name": "Oinacu", + "county": "Giurgiu" + }, + { + "id": 8030, + "name": "Branistea", + "county": "Giurgiu" + }, + { + "id": 8031, + "name": "Peris", + "county": "Ilfov" + }, + { + "id": 8032, + "name": "Balteni", + "county": "Ilfov" + }, + { + "id": 8033, + "name": "Burias", + "county": "Ilfov" + }, + { + "id": 8034, + "name": "Petrachioaia", + "county": "Ilfov" + }, + { + "id": 8035, + "name": "Maineasca", + "county": "Ilfov" + }, + { + "id": 8036, + "name": "Surlari", + "county": "Ilfov" + }, + { + "id": 8037, + "name": "Vanatori", + "county": "Ilfov" + }, + { + "id": 8038, + "name": "Plataresti", + "county": "Calarasi" + }, + { + "id": 8039, + "name": "Cucuieti", + "county": "Calarasi" + }, + { + "id": 8040, + "name": "Dorobantu", + "county": "Calarasi" + }, + { + "id": 8041, + "name": "Podu Pitarului", + "county": "Calarasi" + }, + { + "id": 8042, + "name": "Prundu", + "county": "Giurgiu" + }, + { + "id": 8043, + "name": "Puieni", + "county": "Giurgiu" + }, + { + "id": 8044, + "name": "Putineiu", + "county": "Giurgiu" + }, + { + "id": 8045, + "name": "Hodivoaia", + "county": "Giurgiu" + }, + { + "id": 8046, + "name": "Vieru", + "county": "Giurgiu" + }, + { + "id": 8047, + "name": "Radovanu", + "county": "Calarasi" + }, + { + "id": 8048, + "name": "Valea Popii", + "county": "Calarasi" + }, + { + "id": 8049, + "name": "Rasuceni", + "county": "Giurgiu" + }, + { + "id": 8050, + "name": "Carapancea", + "county": "Giurgiu" + }, + { + "id": 8051, + "name": "Cucuruzu", + "county": "Giurgiu" + }, + { + "id": 8052, + "name": "Satu Nou", + "county": "Giurgiu" + }, + { + "id": 8053, + "name": "Roata de Jos", + "county": "Giurgiu" + }, + { + "id": 8054, + "name": "Cartojani", + "county": "Giurgiu" + }, + { + "id": 8055, + "name": "Roata Mica", + "county": "Giurgiu" + }, + { + "id": 8056, + "name": "Sadina", + "county": "Giurgiu" + }, + { + "id": 8057, + "name": "Sarulesti", + "county": "Calarasi" + }, + { + "id": 8058, + "name": "Magureni", + "county": "Calarasi" + }, + { + "id": 8059, + "name": "Polcesti", + "county": "Calarasi" + }, + { + "id": 8060, + "name": "Sandulita", + "county": "Calarasi" + }, + { + "id": 8061, + "name": "Sarulesti-Gara", + "county": "Calarasi" + }, + { + "id": 8062, + "name": "Satucu", + "county": "Calarasi" + }, + { + "id": 8063, + "name": "Solacolu", + "county": "Calarasi" + }, + { + "id": 8064, + "name": "Schitu", + "county": "Giurgiu" + }, + { + "id": 8065, + "name": "Bila", + "county": "Giurgiu" + }, + { + "id": 8066, + "name": "Camineasca", + "county": "Giurgiu" + }, + { + "id": 8067, + "name": "Vlasin", + "county": "Giurgiu" + }, + { + "id": 8068, + "name": "Sinesti", + "county": "Ialomita" + }, + { + "id": 8069, + "name": "Boteni", + "county": "Ialomita" + }, + { + "id": 8070, + "name": "Catrunesti", + "county": "Ialomita" + }, + { + "id": 8071, + "name": "Hagiesti", + "county": "Ialomita" + }, + { + "id": 8072, + "name": "Lilieci", + "county": "Ialomita" + }, + { + "id": 8073, + "name": "Livedea", + "county": "Ialomita" + }, + { + "id": 8074, + "name": "Singureni", + "county": "Giurgiu" + }, + { + "id": 8075, + "name": "Cranguri", + "county": "Giurgiu" + }, + { + "id": 8076, + "name": "Stejaru", + "county": "Giurgiu" + }, + { + "id": 8077, + "name": "Slobozia Moara", + "county": "Dambovita" + }, + { + "id": 8078, + "name": "Snagov", + "county": "Ilfov" + }, + { + "id": 8079, + "name": "Cioflinceni", + "county": "Ilfov" + }, + { + "id": 8080, + "name": "Ghermanesti", + "county": "Ilfov" + }, + { + "id": 8081, + "name": "Tancabesti", + "county": "Ilfov" + }, + { + "id": 8082, + "name": "Vladiceasca", + "county": "Ilfov" + }, + { + "id": 8083, + "name": "Sohatu", + "county": "Calarasi" + }, + { + "id": 8084, + "name": "Progresu", + "county": "Calarasi" + }, + { + "id": 8085, + "name": "Spantov", + "county": "Calarasi" + }, + { + "id": 8086, + "name": "Cetatea Veche", + "county": "Calarasi" + }, + { + "id": 8087, + "name": "Stancea", + "county": "Calarasi" + }, + { + "id": 8088, + "name": "Stanesti", + "county": "Giurgiu" + }, + { + "id": 8089, + "name": "Balanu", + "county": "Giurgiu" + }, + { + "id": 8090, + "name": "Ghizdaru", + "county": "Giurgiu" + }, + { + "id": 8091, + "name": "Oncesti", + "county": "Giurgiu" + }, + { + "id": 8092, + "name": "Stoenesti", + "county": "Giurgiu" + }, + { + "id": 8093, + "name": "Ianculesti", + "county": "Giurgiu" + }, + { + "id": 8094, + "name": "Mirau", + "county": "Giurgiu" + }, + { + "id": 8095, + "name": "Soldanu", + "county": "Calarasi" + }, + { + "id": 8096, + "name": "Negoesti", + "county": "Calarasi" + }, + { + "id": 8097, + "name": "Stefanestii de Jos", + "county": "Ilfov" + }, + { + "id": 8098, + "name": "Cretuleasca", + "county": "Ilfov" + }, + { + "id": 8099, + "name": "Stefanestii de Sus", + "county": "Ilfov" + }, + { + "id": 8100, + "name": "Tamadau Mare", + "county": "Calarasi" + }, + { + "id": 8101, + "name": "Calareti", + "county": "Calarasi" + }, + { + "id": 8102, + "name": "Darvari", + "county": "Calarasi" + }, + { + "id": 8103, + "name": "Plumbuita", + "county": "Calarasi" + }, + { + "id": 8104, + "name": "Sacele", + "county": "Calarasi" + }, + { + "id": 8105, + "name": "Seinoiu", + "county": "Calarasi" + }, + { + "id": 8106, + "name": "Tamadau Mic", + "county": "Calarasi" + }, + { + "id": 8107, + "name": "Tartasesti", + "county": "Dambovita" + }, + { + "id": 8108, + "name": "Baldana", + "county": "Dambovita" + }, + { + "id": 8109, + "name": "Gulia", + "county": "Dambovita" + }, + { + "id": 8110, + "name": "Tunari", + "county": "Ilfov" + }, + { + "id": 8111, + "name": "Dimieni", + "county": "Ilfov" + }, + { + "id": 8112, + "name": "Ulmeni", + "county": "Calarasi" + }, + { + "id": 8113, + "name": "Ulmi", + "county": "Giurgiu" + }, + { + "id": 8114, + "name": "Cascioarele", + "county": "Giurgiu" + }, + { + "id": 8115, + "name": "Draganeasca", + "county": "Giurgiu" + }, + { + "id": 8116, + "name": "Ghionea", + "county": "Giurgiu" + }, + { + "id": 8117, + "name": "Icoana", + "county": "Giurgiu" + }, + { + "id": 8118, + "name": "Mosteni", + "county": "Giurgiu" + }, + { + "id": 8119, + "name": "Poenari", + "county": "Giurgiu" + }, + { + "id": 8120, + "name": "Trestieni", + "county": "Giurgiu" + }, + { + "id": 8121, + "name": "Valea Argovei", + "county": "Calarasi" + }, + { + "id": 8122, + "name": "Lunca", + "county": "Calarasi" + }, + { + "id": 8123, + "name": "Ostrovu", + "county": "Calarasi" + }, + { + "id": 8124, + "name": "Silistea", + "county": "Calarasi" + }, + { + "id": 8125, + "name": "Vladiceasca", + "county": "Calarasi" + }, + { + "id": 8126, + "name": "Valea Dragului", + "county": "Giurgiu" + }, + { + "id": 8127, + "name": "Valea Macrisului", + "county": "Ialomita" + }, + { + "id": 8128, + "name": "Grindasi", + "county": "Ialomita" + }, + { + "id": 8129, + "name": "Vasilati", + "county": "Calarasi" + }, + { + "id": 8130, + "name": "Galbinasi", + "county": "Calarasi" + }, + { + "id": 8131, + "name": "Nuci", + "county": "Calarasi" + }, + { + "id": 8132, + "name": "Popesti", + "county": "Calarasi" + }, + { + "id": 8133, + "name": "Varasti", + "county": "Giurgiu" + }, + { + "id": 8134, + "name": "Dobreni", + "county": "Giurgiu" + }, + { + "id": 8135, + "name": "Vedea", + "county": "Giurgiu" + }, + { + "id": 8136, + "name": "Malu", + "county": "Giurgiu" + }, + { + "id": 8137, + "name": "Vidra", + "county": "Ilfov" + }, + { + "id": 8138, + "name": "Cretesti", + "county": "Ilfov" + }, + { + "id": 8139, + "name": "Sintesti", + "county": "Ilfov" + }, + { + "id": 8140, + "name": "Vanatorii Mici", + "county": "Giurgiu" + }, + { + "id": 8141, + "name": "Corbeanca", + "county": "Giurgiu" + }, + { + "id": 8142, + "name": "Cupele", + "county": "Giurgiu" + }, + { + "id": 8143, + "name": "Izvoru", + "county": "Giurgiu" + }, + { + "id": 8144, + "name": "Poiana lui Stanga", + "county": "Giurgiu" + }, + { + "id": 8145, + "name": "Valcele", + "county": "Giurgiu" + }, + { + "id": 8146, + "name": "Vanatorii Mari", + "county": "Giurgiu" + }, + { + "id": 8147, + "name": "Zadariciu", + "county": "Giurgiu" + }, + { + "id": 8148, + "name": "Baia Mare", + "county": "Maramures" + }, + { + "id": 8149, + "name": "Blidari", + "county": "Maramures" + }, + { + "id": 8150, + "name": "Firiza", + "county": "Maramures" + }, + { + "id": 8151, + "name": "Valea Neagra", + "county": "Maramures" + }, + { + "id": 8152, + "name": "Grosi", + "county": "Maramures" + }, + { + "id": 8153, + "name": "Ocolis", + "county": "Maramures" + }, + { + "id": 8154, + "name": "Satu Nou de Jos", + "county": "Maramures" + }, + { + "id": 8155, + "name": "Recea", + "county": "Maramures" + }, + { + "id": 8156, + "name": "Bozanta Mica", + "county": "Maramures" + }, + { + "id": 8157, + "name": "Lapusel", + "county": "Maramures" + }, + { + "id": 8158, + "name": "Mocira", + "county": "Maramures" + }, + { + "id": 8159, + "name": "Sasar", + "county": "Maramures" + }, + { + "id": 8160, + "name": "Tautii-Magheraus", + "county": "Maramures" + }, + { + "id": 8161, + "name": "Baita", + "county": "Maramures" + }, + { + "id": 8162, + "name": "Bozanta Mare", + "county": "Maramures" + }, + { + "id": 8163, + "name": "Busag", + "county": "Maramures" + }, + { + "id": 8164, + "name": "Merisor", + "county": "Maramures" + }, + { + "id": 8165, + "name": "Nistru", + "county": "Maramures" + }, + { + "id": 8166, + "name": "Ulmoasa", + "county": "Maramures" + }, + { + "id": 8167, + "name": "Sighetu Marmatiei", + "county": "Maramures" + }, + { + "id": 8168, + "name": "Iapa", + "county": "Maramures" + }, + { + "id": 8169, + "name": "Lazu Baciului", + "county": "Maramures" + }, + { + "id": 8170, + "name": "Sugau", + "county": "Maramures" + }, + { + "id": 8171, + "name": "Valea Cufundoasa", + "county": "Maramures" + }, + { + "id": 8172, + "name": "Valea Hotarului", + "county": "Maramures" + }, + { + "id": 8173, + "name": "Sarasau", + "county": "Maramures" + }, + { + "id": 8174, + "name": "Vadu Izei", + "county": "Maramures" + }, + { + "id": 8175, + "name": "Valea Stejarului", + "county": "Maramures" + }, + { + "id": 8176, + "name": "Baia Sprie", + "county": "Maramures" + }, + { + "id": 8177, + "name": "Chiuzbaia", + "county": "Maramures" + }, + { + "id": 8178, + "name": "Tautii de Sus", + "county": "Maramures" + }, + { + "id": 8179, + "name": "Satu Nou de Sus", + "county": "Maramures" + }, + { + "id": 8180, + "name": "Borsa", + "county": "Maramures" + }, + { + "id": 8181, + "name": "Baile Borsa", + "county": "Maramures" + }, + { + "id": 8182, + "name": "Cavnic", + "county": "Maramures" + }, + { + "id": 8183, + "name": "Targu Lapus", + "county": "Maramures" + }, + { + "id": 8184, + "name": "Boiereni", + "county": "Maramures" + }, + { + "id": 8185, + "name": "Borcut", + "county": "Maramures" + }, + { + "id": 8186, + "name": "Cufoaia", + "county": "Maramures" + }, + { + "id": 8187, + "name": "Damacuseni", + "county": "Maramures" + }, + { + "id": 8188, + "name": "Dobricu Lapusului", + "county": "Maramures" + }, + { + "id": 8189, + "name": "Dumbrava", + "county": "Maramures" + }, + { + "id": 8190, + "name": "Fantanele", + "county": "Maramures" + }, + { + "id": 8191, + "name": "Groape", + "county": "Maramures" + }, + { + "id": 8192, + "name": "Inau", + "county": "Maramures" + }, + { + "id": 8193, + "name": "Razoare", + "county": "Maramures" + }, + { + "id": 8194, + "name": "Rogoz", + "county": "Maramures" + }, + { + "id": 8195, + "name": "Rohia", + "county": "Maramures" + }, + { + "id": 8196, + "name": "Stoiceni", + "county": "Maramures" + }, + { + "id": 8197, + "name": "Viseu de Sus", + "county": "Maramures" + }, + { + "id": 8198, + "name": "Viseu de Mijloc", + "county": "Maramures" + }, + { + "id": 8199, + "name": "Ardusat", + "county": "Maramures" + }, + { + "id": 8200, + "name": "Ariesu de Camp", + "county": "Maramures" + }, + { + "id": 8201, + "name": "Coltirea", + "county": "Maramures" + }, + { + "id": 8202, + "name": "Arinis", + "county": "Maramures" + }, + { + "id": 8203, + "name": "Rodina", + "county": "Maramures" + }, + { + "id": 8204, + "name": "Tamasesti", + "county": "Maramures" + }, + { + "id": 8205, + "name": "Asuaju de Sus", + "county": "Maramures" + }, + { + "id": 8206, + "name": "Asuaju de Jos", + "county": "Maramures" + }, + { + "id": 8207, + "name": "Baita de Sub Codru", + "county": "Maramures" + }, + { + "id": 8208, + "name": "Odesti", + "county": "Maramures" + }, + { + "id": 8209, + "name": "Urmenis", + "county": "Maramures" + }, + { + "id": 8210, + "name": "Baiut", + "county": "Maramures" + }, + { + "id": 8211, + "name": "Poiana Botizii", + "county": "Maramures" + }, + { + "id": 8212, + "name": "Strambu-Baiut", + "county": "Maramures" + }, + { + "id": 8213, + "name": "Basesti", + "county": "Maramures" + }, + { + "id": 8214, + "name": "Saliste", + "county": "Maramures" + }, + { + "id": 8215, + "name": "Stremt", + "county": "Maramures" + }, + { + "id": 8216, + "name": "Bicaz", + "county": "Maramures" + }, + { + "id": 8217, + "name": "Ciuta", + "county": "Maramures" + }, + { + "id": 8218, + "name": "Corni", + "county": "Maramures" + }, + { + "id": 8219, + "name": "Bistra", + "county": "Maramures" + }, + { + "id": 8220, + "name": "Crasna Viseului", + "county": "Maramures" + }, + { + "id": 8221, + "name": "Valea Viseului", + "county": "Maramures" + }, + { + "id": 8222, + "name": "Barsana", + "county": "Maramures" + }, + { + "id": 8223, + "name": "Nanesti", + "county": "Maramures" + }, + { + "id": 8224, + "name": "Oncesti", + "county": "Maramures" + }, + { + "id": 8225, + "name": "Bocicoiu Mare", + "county": "Maramures" + }, + { + "id": 8226, + "name": "Craciunesti", + "county": "Maramures" + }, + { + "id": 8227, + "name": "Lunca la Tisa", + "county": "Maramures" + }, + { + "id": 8228, + "name": "Tisa", + "county": "Maramures" + }, + { + "id": 8229, + "name": "Bogdan Voda", + "county": "Maramures" + }, + { + "id": 8230, + "name": "Bocicoel", + "county": "Maramures" + }, + { + "id": 8231, + "name": "Boiu Mare", + "county": "Maramures" + }, + { + "id": 8232, + "name": "Francenii Boiului", + "county": "Maramures" + }, + { + "id": 8233, + "name": "Prislop", + "county": "Maramures" + }, + { + "id": 8234, + "name": "Romanesti", + "county": "Maramures" + }, + { + "id": 8235, + "name": "Botiza", + "county": "Maramures" + }, + { + "id": 8236, + "name": "Poienile Izei", + "county": "Maramures" + }, + { + "id": 8237, + "name": "Budesti", + "county": "Maramures" + }, + { + "id": 8238, + "name": "Sarbi", + "county": "Maramures" + }, + { + "id": 8239, + "name": "Calinesti", + "county": "Maramures" + }, + { + "id": 8240, + "name": "Cornesti", + "county": "Maramures" + }, + { + "id": 8241, + "name": "Valeni", + "county": "Maramures" + }, + { + "id": 8242, + "name": "Cernesti", + "county": "Maramures" + }, + { + "id": 8243, + "name": "Brebeni", + "county": "Maramures" + }, + { + "id": 8244, + "name": "Ciocotis", + "county": "Maramures" + }, + { + "id": 8245, + "name": "Fanate", + "county": "Maramures" + }, + { + "id": 8246, + "name": "Izvoarele", + "county": "Maramures" + }, + { + "id": 8247, + "name": "Magureni", + "county": "Maramures" + }, + { + "id": 8248, + "name": "Trestia", + "county": "Maramures" + }, + { + "id": 8249, + "name": "Cicarlau", + "county": "Maramures" + }, + { + "id": 8250, + "name": "Bargau", + "county": "Maramures" + }, + { + "id": 8251, + "name": "Handalu Ilbei", + "county": "Maramures" + }, + { + "id": 8252, + "name": "Ilba", + "county": "Maramures" + }, + { + "id": 8253, + "name": "Campulung la Tisa", + "county": "Maramures" + }, + { + "id": 8254, + "name": "Copalnic-Manastur", + "county": "Maramures" + }, + { + "id": 8255, + "name": "Berinta", + "county": "Maramures" + }, + { + "id": 8256, + "name": "Carpinis", + "county": "Maramures" + }, + { + "id": 8257, + "name": "Copalnic", + "county": "Maramures" + }, + { + "id": 8258, + "name": "Copalnic-Deal", + "county": "Maramures" + }, + { + "id": 8259, + "name": "Curtuiusu Mic", + "county": "Maramures" + }, + { + "id": 8260, + "name": "Fauresti", + "county": "Maramures" + }, + { + "id": 8261, + "name": "Laschia", + "county": "Maramures" + }, + { + "id": 8262, + "name": "Preluca Noua", + "county": "Maramures" + }, + { + "id": 8263, + "name": "Preluca Veche", + "county": "Maramures" + }, + { + "id": 8264, + "name": "Rusor", + "county": "Maramures" + }, + { + "id": 8265, + "name": "Vad", + "county": "Maramures" + }, + { + "id": 8266, + "name": "Coroieni", + "county": "Maramures" + }, + { + "id": 8267, + "name": "Baba", + "county": "Maramures" + }, + { + "id": 8268, + "name": "Dealu Mare", + "county": "Maramures" + }, + { + "id": 8269, + "name": "Draghia", + "county": "Maramures" + }, + { + "id": 8270, + "name": "Valenii Lapusului", + "county": "Maramures" + }, + { + "id": 8271, + "name": "Cupseni", + "county": "Maramures" + }, + { + "id": 8272, + "name": "Costeni", + "county": "Maramures" + }, + { + "id": 8273, + "name": "Libotin", + "county": "Maramures" + }, + { + "id": 8274, + "name": "Ungureni", + "county": "Maramures" + }, + { + "id": 8275, + "name": "Desesti", + "county": "Maramures" + }, + { + "id": 8276, + "name": "Harnicesti", + "county": "Maramures" + }, + { + "id": 8277, + "name": "Mara", + "county": "Maramures" + }, + { + "id": 8278, + "name": "Dragomiresti", + "county": "Maramures" + }, + { + "id": 8279, + "name": "Dumbravita", + "county": "Maramures" + }, + { + "id": 8280, + "name": "Carbunari", + "county": "Maramures" + }, + { + "id": 8281, + "name": "Chechis", + "county": "Maramures" + }, + { + "id": 8282, + "name": "Rus", + "county": "Maramures" + }, + { + "id": 8283, + "name": "Sindresti", + "county": "Maramures" + }, + { + "id": 8284, + "name": "Unguras", + "county": "Maramures" + }, + { + "id": 8285, + "name": "Farcasa", + "county": "Maramures" + }, + { + "id": 8286, + "name": "Buzesti", + "county": "Maramures" + }, + { + "id": 8287, + "name": "Sarbi", + "county": "Maramures" + }, + { + "id": 8288, + "name": "Tamaia", + "county": "Maramures" + }, + { + "id": 8289, + "name": "Giulesti", + "county": "Maramures" + }, + { + "id": 8290, + "name": "Berbesti", + "county": "Maramures" + }, + { + "id": 8291, + "name": "Feresti", + "county": "Maramures" + }, + { + "id": 8292, + "name": "Manastirea", + "county": "Maramures" + }, + { + "id": 8293, + "name": "Ieud", + "county": "Maramures" + }, + { + "id": 8294, + "name": "Lapus", + "county": "Maramures" + }, + { + "id": 8295, + "name": "Leordina", + "county": "Maramures" + }, + { + "id": 8296, + "name": "Miresu Mare", + "county": "Maramures" + }, + { + "id": 8297, + "name": "Danestii Chioarului", + "county": "Maramures" + }, + { + "id": 8298, + "name": "Iadara", + "county": "Maramures" + }, + { + "id": 8299, + "name": "Lucacesti", + "county": "Maramures" + }, + { + "id": 8300, + "name": "Remeti pe Somes", + "county": "Maramures" + }, + { + "id": 8301, + "name": "Stejera", + "county": "Maramures" + }, + { + "id": 8302, + "name": "Tulghies", + "county": "Maramures" + }, + { + "id": 8303, + "name": "Moisei", + "county": "Maramures" + }, + { + "id": 8304, + "name": "Oarta de Jos", + "county": "Maramures" + }, + { + "id": 8305, + "name": "Oarta de Sus", + "county": "Maramures" + }, + { + "id": 8306, + "name": "Ortita", + "county": "Maramures" + }, + { + "id": 8307, + "name": "Ocna Sugatag", + "county": "Maramures" + }, + { + "id": 8308, + "name": "Breb", + "county": "Maramures" + }, + { + "id": 8309, + "name": "Hoteni", + "county": "Maramures" + }, + { + "id": 8310, + "name": "Sat-Sugatag", + "county": "Maramures" + }, + { + "id": 8311, + "name": "Petrova", + "county": "Maramures" + }, + { + "id": 8312, + "name": "Poienile de Sub Munte", + "county": "Maramures" + }, + { + "id": 8313, + "name": "Remetea Chioarului", + "county": "Maramures" + }, + { + "id": 8314, + "name": "Berchez", + "county": "Maramures" + }, + { + "id": 8315, + "name": "Berchezoaia", + "county": "Maramures" + }, + { + "id": 8316, + "name": "Posta", + "county": "Maramures" + }, + { + "id": 8317, + "name": "Remecioara", + "county": "Maramures" + }, + { + "id": 8318, + "name": "Remeti", + "county": "Maramures" + }, + { + "id": 8319, + "name": "Piatra", + "county": "Maramures" + }, + { + "id": 8320, + "name": "Teceu Mic", + "county": "Maramures" + }, + { + "id": 8321, + "name": "Repedea", + "county": "Maramures" + }, + { + "id": 8322, + "name": "Rona de Jos", + "county": "Maramures" + }, + { + "id": 8323, + "name": "Rona de Sus", + "county": "Maramures" + }, + { + "id": 8324, + "name": "Costiui", + "county": "Maramures" + }, + { + "id": 8325, + "name": "Rozavlea", + "county": "Maramures" + }, + { + "id": 8326, + "name": "Sieu", + "county": "Maramures" + }, + { + "id": 8327, + "name": "Ruscova", + "county": "Maramures" + }, + { + "id": 8328, + "name": "Satulung", + "county": "Maramures" + }, + { + "id": 8329, + "name": "Ariesu de Padure", + "county": "Maramures" + }, + { + "id": 8330, + "name": "Fersig", + "county": "Maramures" + }, + { + "id": 8331, + "name": "Finteusu Mic", + "county": "Maramures" + }, + { + "id": 8332, + "name": "Hideaga", + "county": "Maramures" + }, + { + "id": 8333, + "name": "Mogosesti", + "county": "Maramures" + }, + { + "id": 8334, + "name": "Pribilesti", + "county": "Maramures" + }, + { + "id": 8335, + "name": "Sacalaseni", + "county": "Maramures" + }, + { + "id": 8336, + "name": "Catalina", + "county": "Maramures" + }, + { + "id": 8337, + "name": "Coas", + "county": "Maramures" + }, + { + "id": 8338, + "name": "Coltau", + "county": "Maramures" + }, + { + "id": 8339, + "name": "Coruia", + "county": "Maramures" + }, + { + "id": 8340, + "name": "Culcea", + "county": "Maramures" + }, + { + "id": 8341, + "name": "Intrerauri", + "county": "Maramures" + }, + { + "id": 8342, + "name": "Sacel", + "county": "Maramures" + }, + { + "id": 8343, + "name": "Salistea de Sus", + "county": "Maramures" + }, + { + "id": 8344, + "name": "Salsig", + "county": "Maramures" + }, + { + "id": 8345, + "name": "Gardani", + "county": "Maramures" + }, + { + "id": 8346, + "name": "Sapanta", + "county": "Maramures" + }, + { + "id": 8347, + "name": "Seini", + "county": "Maramures" + }, + { + "id": 8348, + "name": "Sabisa", + "county": "Maramures" + }, + { + "id": 8349, + "name": "Viile Apei", + "county": "Maramures" + }, + { + "id": 8350, + "name": "Stramtura", + "county": "Maramures" + }, + { + "id": 8351, + "name": "Glod", + "county": "Maramures" + }, + { + "id": 8352, + "name": "Slatioara", + "county": "Maramures" + }, + { + "id": 8353, + "name": "Suciu de Sus", + "county": "Maramures" + }, + { + "id": 8354, + "name": "Grosii Tiblesului", + "county": "Maramures" + }, + { + "id": 8355, + "name": "Larga", + "county": "Maramures" + }, + { + "id": 8356, + "name": "Suciu de Jos", + "county": "Maramures" + }, + { + "id": 8357, + "name": "Sisesti", + "county": "Maramures" + }, + { + "id": 8358, + "name": "Bontaieni", + "county": "Maramures" + }, + { + "id": 8359, + "name": "Cetatele", + "county": "Maramures" + }, + { + "id": 8360, + "name": "Danesti", + "county": "Maramures" + }, + { + "id": 8361, + "name": "Negreia", + "county": "Maramures" + }, + { + "id": 8362, + "name": "Plopis", + "county": "Maramures" + }, + { + "id": 8363, + "name": "Surdesti", + "county": "Maramures" + }, + { + "id": 8364, + "name": "Somcuta Mare", + "county": "Maramures" + }, + { + "id": 8365, + "name": "Buciumi", + "county": "Maramures" + }, + { + "id": 8366, + "name": "Buteasa", + "county": "Maramures" + }, + { + "id": 8367, + "name": "Ciolt", + "county": "Maramures" + }, + { + "id": 8368, + "name": "Codru Butesii", + "county": "Maramures" + }, + { + "id": 8369, + "name": "Finteusu Mare", + "county": "Maramures" + }, + { + "id": 8370, + "name": "Hovrila", + "county": "Maramures" + }, + { + "id": 8371, + "name": "Valenii Somcutei", + "county": "Maramures" + }, + { + "id": 8372, + "name": "Ulmeni", + "county": "Maramures" + }, + { + "id": 8373, + "name": "Arduzel", + "county": "Maramures" + }, + { + "id": 8374, + "name": "Chelinta", + "county": "Maramures" + }, + { + "id": 8375, + "name": "Manau", + "county": "Maramures" + }, + { + "id": 8376, + "name": "Somes-Uileac", + "county": "Maramures" + }, + { + "id": 8377, + "name": "Tohat", + "county": "Maramures" + }, + { + "id": 8378, + "name": "Ticau", + "county": "Maramures" + }, + { + "id": 8379, + "name": "Vicea", + "county": "Maramures" + }, + { + "id": 8380, + "name": "Valea Chioarului", + "county": "Maramures" + }, + { + "id": 8381, + "name": "Curtuiusu Mare", + "county": "Maramures" + }, + { + "id": 8382, + "name": "Durusa", + "county": "Maramures" + }, + { + "id": 8383, + "name": "Fericea", + "county": "Maramures" + }, + { + "id": 8384, + "name": "Mesteacan", + "county": "Maramures" + }, + { + "id": 8385, + "name": "Varai", + "county": "Maramures" + }, + { + "id": 8386, + "name": "Vima Mica", + "county": "Maramures" + }, + { + "id": 8387, + "name": "Aspra", + "county": "Maramures" + }, + { + "id": 8388, + "name": "Dealu Corbului", + "county": "Maramures" + }, + { + "id": 8389, + "name": "Jugastreni", + "county": "Maramures" + }, + { + "id": 8390, + "name": "Peteritea", + "county": "Maramures" + }, + { + "id": 8391, + "name": "Salnita", + "county": "Maramures" + }, + { + "id": 8392, + "name": "Vima Mare", + "county": "Maramures" + }, + { + "id": 8393, + "name": "Viseu de Jos", + "county": "Maramures" + }, + { + "id": 8394, + "name": "Drobeta-Turnu Severin", + "county": "Mehedinti" + }, + { + "id": 8395, + "name": "Gura Vaii", + "county": "Mehedinti" + }, + { + "id": 8396, + "name": "Dudasu Schelei", + "county": "Mehedinti" + }, + { + "id": 8397, + "name": "Schela Cladovei", + "county": "Mehedinti" + }, + { + "id": 8398, + "name": "Simian", + "county": "Mehedinti" + }, + { + "id": 8399, + "name": "Cerneti", + "county": "Mehedinti" + }, + { + "id": 8400, + "name": "Dedovita Noua", + "county": "Mehedinti" + }, + { + "id": 8401, + "name": "Dedovita Veche", + "county": "Mehedinti" + }, + { + "id": 8402, + "name": "Dudasu", + "county": "Mehedinti" + }, + { + "id": 8403, + "name": "Erghevita", + "county": "Mehedinti" + }, + { + "id": 8404, + "name": "Poroina", + "county": "Mehedinti" + }, + { + "id": 8405, + "name": "Valea Copcii", + "county": "Mehedinti" + }, + { + "id": 8406, + "name": "Baia de Arama", + "county": "Mehedinti" + }, + { + "id": 8407, + "name": "Bratilovu", + "county": "Mehedinti" + }, + { + "id": 8408, + "name": "Brebina", + "county": "Mehedinti" + }, + { + "id": 8409, + "name": "Dealu Mare", + "county": "Mehedinti" + }, + { + "id": 8410, + "name": "Marasesti", + "county": "Mehedinti" + }, + { + "id": 8411, + "name": "Negoesti", + "county": "Mehedinti" + }, + { + "id": 8412, + "name": "Pistrita", + "county": "Mehedinti" + }, + { + "id": 8413, + "name": "Stanesti", + "county": "Mehedinti" + }, + { + "id": 8414, + "name": "Titerlesti", + "county": "Mehedinti" + }, + { + "id": 8415, + "name": "Obarsia-Closani", + "county": "Mehedinti" + }, + { + "id": 8416, + "name": "Godeanu", + "county": "Mehedinti" + }, + { + "id": 8417, + "name": "Orsova", + "county": "Mehedinti" + }, + { + "id": 8418, + "name": "Strehaia", + "county": "Mehedinti" + }, + { + "id": 8419, + "name": "Ciochiuta", + "county": "Mehedinti" + }, + { + "id": 8420, + "name": "Comanda", + "county": "Mehedinti" + }, + { + "id": 8421, + "name": "Hurducesti", + "county": "Mehedinti" + }, + { + "id": 8422, + "name": "Lunca Banului", + "county": "Mehedinti" + }, + { + "id": 8423, + "name": "Slatinicu Mare", + "county": "Mehedinti" + }, + { + "id": 8424, + "name": "Slatinicu Mic", + "county": "Mehedinti" + }, + { + "id": 8425, + "name": "Menti", + "county": "Mehedinti" + }, + { + "id": 8426, + "name": "Motruleni", + "county": "Mehedinti" + }, + { + "id": 8427, + "name": "Stancesti", + "county": "Mehedinti" + }, + { + "id": 8428, + "name": "Vanju Mare", + "county": "Mehedinti" + }, + { + "id": 8429, + "name": "Bucura", + "county": "Mehedinti" + }, + { + "id": 8430, + "name": "Nicolae Balcescu", + "county": "Mehedinti" + }, + { + "id": 8431, + "name": "Orevita Mare", + "county": "Mehedinti" + }, + { + "id": 8432, + "name": "Traian", + "county": "Mehedinti" + }, + { + "id": 8433, + "name": "Bala", + "county": "Mehedinti" + }, + { + "id": 8434, + "name": "Bala de Sus", + "county": "Mehedinti" + }, + { + "id": 8435, + "name": "Bratesul", + "county": "Mehedinti" + }, + { + "id": 8436, + "name": "Brativoesti", + "county": "Mehedinti" + }, + { + "id": 8437, + "name": "Campu Mare", + "county": "Mehedinti" + }, + { + "id": 8438, + "name": "Carsu", + "county": "Mehedinti" + }, + { + "id": 8439, + "name": "Comanesti", + "county": "Mehedinti" + }, + { + "id": 8440, + "name": "Crainici", + "county": "Mehedinti" + }, + { + "id": 8441, + "name": "Dalma", + "county": "Mehedinti" + }, + { + "id": 8442, + "name": "Iupca", + "county": "Mehedinti" + }, + { + "id": 8443, + "name": "Molani", + "county": "Mehedinti" + }, + { + "id": 8444, + "name": "Rudina", + "county": "Mehedinti" + }, + { + "id": 8445, + "name": "Runcusoru", + "county": "Mehedinti" + }, + { + "id": 8446, + "name": "Sardanesti", + "county": "Mehedinti" + }, + { + "id": 8447, + "name": "Vidimiresti", + "county": "Mehedinti" + }, + { + "id": 8448, + "name": "Balta", + "county": "Mehedinti" + }, + { + "id": 8449, + "name": "Coada Cornetului", + "county": "Mehedinti" + }, + { + "id": 8450, + "name": "Costesti", + "county": "Mehedinti" + }, + { + "id": 8451, + "name": "Gornovita", + "county": "Mehedinti" + }, + { + "id": 8452, + "name": "Nevatu", + "county": "Mehedinti" + }, + { + "id": 8453, + "name": "Prejna", + "county": "Mehedinti" + }, + { + "id": 8454, + "name": "Sfodea", + "county": "Mehedinti" + }, + { + "id": 8455, + "name": "Balacita", + "county": "Mehedinti" + }, + { + "id": 8456, + "name": "Dobra", + "county": "Mehedinti" + }, + { + "id": 8457, + "name": "Gvardinita", + "county": "Mehedinti" + }, + { + "id": 8458, + "name": "Bacles", + "county": "Mehedinti" + }, + { + "id": 8459, + "name": "Adunatii Teiului", + "county": "Mehedinti" + }, + { + "id": 8460, + "name": "Bragleasa", + "county": "Mehedinti" + }, + { + "id": 8461, + "name": "Corzu", + "county": "Mehedinti" + }, + { + "id": 8462, + "name": "Giura", + "county": "Mehedinti" + }, + { + "id": 8463, + "name": "Petra", + "county": "Mehedinti" + }, + { + "id": 8464, + "name": "Podu Grosului", + "county": "Mehedinti" + }, + { + "id": 8465, + "name": "Selistiuta", + "county": "Mehedinti" + }, + { + "id": 8466, + "name": "Smadovita", + "county": "Mehedinti" + }, + { + "id": 8467, + "name": "Vladica", + "county": "Mehedinti" + }, + { + "id": 8468, + "name": "Balvanesti", + "county": "Mehedinti" + }, + { + "id": 8469, + "name": "Balvanestii de Jos", + "county": "Mehedinti" + }, + { + "id": 8470, + "name": "Calinestii de Jos", + "county": "Mehedinti" + }, + { + "id": 8471, + "name": "Calinestii de Sus", + "county": "Mehedinti" + }, + { + "id": 8472, + "name": "Parlagele", + "county": "Mehedinti" + }, + { + "id": 8473, + "name": "Breznita-Motru", + "county": "Mehedinti" + }, + { + "id": 8474, + "name": "Cosovat", + "county": "Mehedinti" + }, + { + "id": 8475, + "name": "Deleni", + "county": "Mehedinti" + }, + { + "id": 8476, + "name": "Fauroaia", + "county": "Mehedinti" + }, + { + "id": 8477, + "name": "Plai", + "county": "Mehedinti" + }, + { + "id": 8478, + "name": "Talapanu", + "county": "Mehedinti" + }, + { + "id": 8479, + "name": "Valea Teiului", + "county": "Mehedinti" + }, + { + "id": 8480, + "name": "Breznita-Ocol", + "county": "Mehedinti" + }, + { + "id": 8481, + "name": "Jidostita", + "county": "Mehedinti" + }, + { + "id": 8482, + "name": "Magheru", + "county": "Mehedinti" + }, + { + "id": 8483, + "name": "Susita", + "county": "Mehedinti" + }, + { + "id": 8484, + "name": "Brosteni", + "county": "Mehedinti" + }, + { + "id": 8485, + "name": "Capatanesti", + "county": "Mehedinti" + }, + { + "id": 8486, + "name": "Luncsoara", + "county": "Mehedinti" + }, + { + "id": 8487, + "name": "Lupsa de Jos", + "county": "Mehedinti" + }, + { + "id": 8488, + "name": "Lupsa de Sus", + "county": "Mehedinti" + }, + { + "id": 8489, + "name": "Meris", + "county": "Mehedinti" + }, + { + "id": 8490, + "name": "Burila Mare", + "county": "Mehedinti" + }, + { + "id": 8491, + "name": "Crivina", + "county": "Mehedinti" + }, + { + "id": 8492, + "name": "Izvoru Frumos", + "county": "Mehedinti" + }, + { + "id": 8493, + "name": "Tiganasi", + "county": "Mehedinti" + }, + { + "id": 8494, + "name": "Vrancea", + "county": "Mehedinti" + }, + { + "id": 8495, + "name": "Butoiesti", + "county": "Mehedinti" + }, + { + "id": 8496, + "name": "Arginesti", + "county": "Mehedinti" + }, + { + "id": 8497, + "name": "Buicesti", + "county": "Mehedinti" + }, + { + "id": 8498, + "name": "Gura Motrului", + "county": "Mehedinti" + }, + { + "id": 8499, + "name": "Jugastru", + "county": "Mehedinti" + }, + { + "id": 8500, + "name": "Pluta", + "county": "Mehedinti" + }, + { + "id": 8501, + "name": "Radutesti", + "county": "Mehedinti" + }, + { + "id": 8502, + "name": "Tantaru", + "county": "Mehedinti" + }, + { + "id": 8503, + "name": "Cazanesti", + "county": "Mehedinti" + }, + { + "id": 8504, + "name": "Ercea", + "county": "Mehedinti" + }, + { + "id": 8505, + "name": "Garbovatu de Sus", + "county": "Mehedinti" + }, + { + "id": 8506, + "name": "Govodarva", + "county": "Mehedinti" + }, + { + "id": 8507, + "name": "Ilovu", + "county": "Mehedinti" + }, + { + "id": 8508, + "name": "Jignita", + "county": "Mehedinti" + }, + { + "id": 8509, + "name": "Paltinisu", + "county": "Mehedinti" + }, + { + "id": 8510, + "name": "Poiana", + "county": "Mehedinti" + }, + { + "id": 8511, + "name": "Rosia", + "county": "Mehedinti" + }, + { + "id": 8512, + "name": "Severinesti", + "county": "Mehedinti" + }, + { + "id": 8513, + "name": "Suharu", + "county": "Mehedinti" + }, + { + "id": 8514, + "name": "Valea Cosustei", + "county": "Mehedinti" + }, + { + "id": 8515, + "name": "Ciresu", + "county": "Mehedinti" + }, + { + "id": 8516, + "name": "Bunoaica", + "county": "Mehedinti" + }, + { + "id": 8517, + "name": "Jupanesti", + "county": "Mehedinti" + }, + { + "id": 8518, + "name": "Negrusa", + "county": "Mehedinti" + }, + { + "id": 8519, + "name": "Corcova", + "county": "Mehedinti" + }, + { + "id": 8520, + "name": "Breta", + "county": "Mehedinti" + }, + { + "id": 8521, + "name": "Cernaia", + "county": "Mehedinti" + }, + { + "id": 8522, + "name": "Cordun", + "county": "Mehedinti" + }, + { + "id": 8523, + "name": "Croica", + "county": "Mehedinti" + }, + { + "id": 8524, + "name": "Garbovatu de Jos", + "county": "Mehedinti" + }, + { + "id": 8525, + "name": "Imoasa", + "county": "Mehedinti" + }, + { + "id": 8526, + "name": "Jirov", + "county": "Mehedinti" + }, + { + "id": 8527, + "name": "Maru Rosu", + "county": "Mehedinti" + }, + { + "id": 8528, + "name": "Parvulesti", + "county": "Mehedinti" + }, + { + "id": 8529, + "name": "Puscasu", + "county": "Mehedinti" + }, + { + "id": 8530, + "name": "Stejaru", + "county": "Mehedinti" + }, + { + "id": 8531, + "name": "Vladasesti", + "county": "Mehedinti" + }, + { + "id": 8532, + "name": "Corlatel", + "county": "Mehedinti" + }, + { + "id": 8533, + "name": "Valea Anilor", + "county": "Mehedinti" + }, + { + "id": 8534, + "name": "Cujmir", + "county": "Mehedinti" + }, + { + "id": 8535, + "name": "Aurora", + "county": "Mehedinti" + }, + { + "id": 8536, + "name": "Cujmiru Mic", + "county": "Mehedinti" + }, + { + "id": 8537, + "name": "Devesel", + "county": "Mehedinti" + }, + { + "id": 8538, + "name": "Batoti", + "county": "Mehedinti" + }, + { + "id": 8539, + "name": "Bistretu", + "county": "Mehedinti" + }, + { + "id": 8540, + "name": "Dunarea Mica", + "county": "Mehedinti" + }, + { + "id": 8541, + "name": "Scapau", + "county": "Mehedinti" + }, + { + "id": 8542, + "name": "Tismana", + "county": "Mehedinti" + }, + { + "id": 8543, + "name": "Darvari", + "county": "Mehedinti" + }, + { + "id": 8544, + "name": "Gemeni", + "county": "Mehedinti" + }, + { + "id": 8545, + "name": "Dumbrava de Jos", + "county": "Mehedinti" + }, + { + "id": 8546, + "name": "Albulesti", + "county": "Mehedinti" + }, + { + "id": 8547, + "name": "Dumbrava de Mijloc", + "county": "Mehedinti" + }, + { + "id": 8548, + "name": "Dumbrava de Sus", + "county": "Mehedinti" + }, + { + "id": 8549, + "name": "Golineasa", + "county": "Mehedinti" + }, + { + "id": 8550, + "name": "Higiu", + "county": "Mehedinti" + }, + { + "id": 8551, + "name": "Rocsoreni", + "county": "Mehedinti" + }, + { + "id": 8552, + "name": "Valea Marcului", + "county": "Mehedinti" + }, + { + "id": 8553, + "name": "Varodia", + "county": "Mehedinti" + }, + { + "id": 8554, + "name": "Floresti", + "county": "Mehedinti" + }, + { + "id": 8555, + "name": "Copacioasa", + "county": "Mehedinti" + }, + { + "id": 8556, + "name": "Gardoaia", + "county": "Mehedinti" + }, + { + "id": 8557, + "name": "Livezi", + "county": "Mehedinti" + }, + { + "id": 8558, + "name": "Mosneni", + "county": "Mehedinti" + }, + { + "id": 8559, + "name": "Pesteana", + "county": "Mehedinti" + }, + { + "id": 8560, + "name": "Pestenuta", + "county": "Mehedinti" + }, + { + "id": 8561, + "name": "Stroesti", + "county": "Mehedinti" + }, + { + "id": 8562, + "name": "Zegujani", + "county": "Mehedinti" + }, + { + "id": 8563, + "name": "Garla Mare", + "county": "Mehedinti" + }, + { + "id": 8564, + "name": "Vrata", + "county": "Mehedinti" + }, + { + "id": 8565, + "name": "Godeanu", + "county": "Mehedinti" + }, + { + "id": 8566, + "name": "Marga", + "county": "Mehedinti" + }, + { + "id": 8567, + "name": "Paunesti", + "county": "Mehedinti" + }, + { + "id": 8568, + "name": "Siroca", + "county": "Mehedinti" + }, + { + "id": 8569, + "name": "Gogosu", + "county": "Mehedinti" + }, + { + "id": 8570, + "name": "Balta Verde", + "county": "Mehedinti" + }, + { + "id": 8571, + "name": "Burila Mica", + "county": "Mehedinti" + }, + { + "id": 8572, + "name": "Ostrovu Mare", + "county": "Mehedinti" + }, + { + "id": 8573, + "name": "Greci", + "county": "Mehedinti" + }, + { + "id": 8574, + "name": "Baltanele", + "county": "Mehedinti" + }, + { + "id": 8575, + "name": "Blidaru", + "county": "Mehedinti" + }, + { + "id": 8576, + "name": "Salatruc", + "county": "Mehedinti" + }, + { + "id": 8577, + "name": "Valea Petrii", + "county": "Mehedinti" + }, + { + "id": 8578, + "name": "Visina", + "county": "Mehedinti" + }, + { + "id": 8579, + "name": "Grozesti", + "county": "Mehedinti" + }, + { + "id": 8580, + "name": "Carceni", + "county": "Mehedinti" + }, + { + "id": 8581, + "name": "Pasarani", + "county": "Mehedinti" + }, + { + "id": 8582, + "name": "Susita", + "county": "Mehedinti" + }, + { + "id": 8583, + "name": "Gruia", + "county": "Mehedinti" + }, + { + "id": 8584, + "name": "Izvoarele", + "county": "Mehedinti" + }, + { + "id": 8585, + "name": "Poiana Gruii", + "county": "Mehedinti" + }, + { + "id": 8586, + "name": "Hinova", + "county": "Mehedinti" + }, + { + "id": 8587, + "name": "Bistrita", + "county": "Mehedinti" + }, + { + "id": 8588, + "name": "Carjei", + "county": "Mehedinti" + }, + { + "id": 8589, + "name": "Ostrovu Corbului", + "county": "Mehedinti" + }, + { + "id": 8590, + "name": "Husnicioara", + "county": "Mehedinti" + }, + { + "id": 8591, + "name": "Alunisul", + "county": "Mehedinti" + }, + { + "id": 8592, + "name": "Baditesti", + "county": "Mehedinti" + }, + { + "id": 8593, + "name": "Borogea", + "county": "Mehedinti" + }, + { + "id": 8594, + "name": "Celnata", + "county": "Mehedinti" + }, + { + "id": 8595, + "name": "Dumbravita", + "county": "Mehedinti" + }, + { + "id": 8596, + "name": "Marmanu", + "county": "Mehedinti" + }, + { + "id": 8597, + "name": "Opranesti", + "county": "Mehedinti" + }, + { + "id": 8598, + "name": "Peri", + "county": "Mehedinti" + }, + { + "id": 8599, + "name": "Priboiesti", + "county": "Mehedinti" + }, + { + "id": 8600, + "name": "Selisteni", + "county": "Mehedinti" + }, + { + "id": 8601, + "name": "Eselnita", + "county": "Mehedinti" + }, + { + "id": 8602, + "name": "Ilovat", + "county": "Mehedinti" + }, + { + "id": 8603, + "name": "Budanesti", + "county": "Mehedinti" + }, + { + "id": 8604, + "name": "Cracu Lung", + "county": "Mehedinti" + }, + { + "id": 8605, + "name": "Dalbocita", + "county": "Mehedinti" + }, + { + "id": 8606, + "name": "Firizu", + "county": "Mehedinti" + }, + { + "id": 8607, + "name": "Racova", + "county": "Mehedinti" + }, + { + "id": 8608, + "name": "Ilovita", + "county": "Mehedinti" + }, + { + "id": 8609, + "name": "Bahna", + "county": "Mehedinti" + }, + { + "id": 8610, + "name": "Moisesti", + "county": "Mehedinti" + }, + { + "id": 8611, + "name": "Isverna", + "county": "Mehedinti" + }, + { + "id": 8612, + "name": "Busesti", + "county": "Mehedinti" + }, + { + "id": 8613, + "name": "Cerna-Varf", + "county": "Mehedinti" + }, + { + "id": 8614, + "name": "Draghesti", + "county": "Mehedinti" + }, + { + "id": 8615, + "name": "Giurgiani", + "county": "Mehedinti" + }, + { + "id": 8616, + "name": "Nadanova", + "county": "Mehedinti" + }, + { + "id": 8617, + "name": "Selistea", + "county": "Mehedinti" + }, + { + "id": 8618, + "name": "Turtaba", + "county": "Mehedinti" + }, + { + "id": 8619, + "name": "Izvoru Barzii", + "county": "Mehedinti" + }, + { + "id": 8620, + "name": "Balotesti", + "county": "Mehedinti" + }, + { + "id": 8621, + "name": "Halanga", + "county": "Mehedinti" + }, + { + "id": 8622, + "name": "Putinei", + "county": "Mehedinti" + }, + { + "id": 8623, + "name": "Rascolesti", + "county": "Mehedinti" + }, + { + "id": 8624, + "name": "Schinteiesti", + "county": "Mehedinti" + }, + { + "id": 8625, + "name": "Schitu Topolnitei", + "county": "Mehedinti" + }, + { + "id": 8626, + "name": "Jiana", + "county": "Mehedinti" + }, + { + "id": 8627, + "name": "Cioroboreni", + "county": "Mehedinti" + }, + { + "id": 8628, + "name": "Danceu", + "county": "Mehedinti" + }, + { + "id": 8629, + "name": "Jiana Mare", + "county": "Mehedinti" + }, + { + "id": 8630, + "name": "Jiana Veche", + "county": "Mehedinti" + }, + { + "id": 8631, + "name": "Livezile", + "county": "Mehedinti" + }, + { + "id": 8632, + "name": "Izvoralu de Jos", + "county": "Mehedinti" + }, + { + "id": 8633, + "name": "Izvoru Anestilor", + "county": "Mehedinti" + }, + { + "id": 8634, + "name": "Petris", + "county": "Mehedinti" + }, + { + "id": 8635, + "name": "Stefan Odobleja", + "county": "Mehedinti" + }, + { + "id": 8636, + "name": "Malovat", + "county": "Mehedinti" + }, + { + "id": 8637, + "name": "Bobaita", + "county": "Mehedinti" + }, + { + "id": 8638, + "name": "Colibasi", + "county": "Mehedinti" + }, + { + "id": 8639, + "name": "Lazu", + "county": "Mehedinti" + }, + { + "id": 8640, + "name": "Negresti", + "county": "Mehedinti" + }, + { + "id": 8641, + "name": "Barda", + "county": "Mehedinti" + }, + { + "id": 8642, + "name": "23 August", + "county": "Mehedinti" + }, + { + "id": 8643, + "name": "Obarsia de Camp", + "county": "Mehedinti" + }, + { + "id": 8644, + "name": "Izimsa", + "county": "Mehedinti" + }, + { + "id": 8645, + "name": "Oprisor", + "county": "Mehedinti" + }, + { + "id": 8646, + "name": "Prisaceaua", + "county": "Mehedinti" + }, + { + "id": 8647, + "name": "Padina Mare", + "county": "Mehedinti" + }, + { + "id": 8648, + "name": "Biban", + "county": "Mehedinti" + }, + { + "id": 8649, + "name": "Iablanita", + "county": "Mehedinti" + }, + { + "id": 8650, + "name": "Olteanca", + "county": "Mehedinti" + }, + { + "id": 8651, + "name": "Padina Mica", + "county": "Mehedinti" + }, + { + "id": 8652, + "name": "Slasoma", + "county": "Mehedinti" + }, + { + "id": 8653, + "name": "Patulele", + "county": "Mehedinti" + }, + { + "id": 8654, + "name": "Viasu", + "county": "Mehedinti" + }, + { + "id": 8655, + "name": "Baia Noua", + "county": "Mehedinti" + }, + { + "id": 8656, + "name": "Dubova", + "county": "Mehedinti" + }, + { + "id": 8657, + "name": "Eibenthal", + "county": "Mehedinti" + }, + { + "id": 8658, + "name": "Podeni", + "county": "Mehedinti" + }, + { + "id": 8659, + "name": "Gornenti", + "county": "Mehedinti" + }, + { + "id": 8660, + "name": "Malarisca", + "county": "Mehedinti" + }, + { + "id": 8661, + "name": "Ponoarele", + "county": "Mehedinti" + }, + { + "id": 8662, + "name": "Baluta", + "county": "Mehedinti" + }, + { + "id": 8663, + "name": "Baraiacu", + "county": "Mehedinti" + }, + { + "id": 8664, + "name": "Branzeni", + "county": "Mehedinti" + }, + { + "id": 8665, + "name": "Buicani", + "county": "Mehedinti" + }, + { + "id": 8666, + "name": "Ceptureni", + "county": "Mehedinti" + }, + { + "id": 8667, + "name": "Cracu Muntelui", + "county": "Mehedinti" + }, + { + "id": 8668, + "name": "Delureni", + "county": "Mehedinti" + }, + { + "id": 8669, + "name": "Gardaneasa", + "county": "Mehedinti" + }, + { + "id": 8670, + "name": "Gheorghesti", + "county": "Mehedinti" + }, + { + "id": 8671, + "name": "Ludu", + "county": "Mehedinti" + }, + { + "id": 8672, + "name": "Proitesti", + "county": "Mehedinti" + }, + { + "id": 8673, + "name": "Raiculesti", + "county": "Mehedinti" + }, + { + "id": 8674, + "name": "Sipotu", + "county": "Mehedinti" + }, + { + "id": 8675, + "name": "Valea Ursului", + "county": "Mehedinti" + }, + { + "id": 8676, + "name": "Poroina Mare", + "county": "Mehedinti" + }, + { + "id": 8677, + "name": "Fantanile Negre", + "county": "Mehedinti" + }, + { + "id": 8678, + "name": "Stignita", + "county": "Mehedinti" + }, + { + "id": 8679, + "name": "Sipotu", + "county": "Mehedinti" + }, + { + "id": 8680, + "name": "Pristol", + "county": "Mehedinti" + }, + { + "id": 8681, + "name": "Cozia", + "county": "Mehedinti" + }, + { + "id": 8682, + "name": "Prunisor", + "county": "Mehedinti" + }, + { + "id": 8683, + "name": "Arvatesti", + "county": "Mehedinti" + }, + { + "id": 8684, + "name": "Balota", + "county": "Mehedinti" + }, + { + "id": 8685, + "name": "Baltanele", + "county": "Mehedinti" + }, + { + "id": 8686, + "name": "Cervenita", + "county": "Mehedinti" + }, + { + "id": 8687, + "name": "Dragotesti", + "county": "Mehedinti" + }, + { + "id": 8688, + "name": "Fantana Domneasca", + "county": "Mehedinti" + }, + { + "id": 8689, + "name": "Ghelmegioaia", + "county": "Mehedinti" + }, + { + "id": 8690, + "name": "Garnita", + "county": "Mehedinti" + }, + { + "id": 8691, + "name": "Gutu", + "county": "Mehedinti" + }, + { + "id": 8692, + "name": "Igiroasa", + "county": "Mehedinti" + }, + { + "id": 8693, + "name": "Lumnic", + "county": "Mehedinti" + }, + { + "id": 8694, + "name": "Mijarca", + "county": "Mehedinti" + }, + { + "id": 8695, + "name": "Prunaru", + "county": "Mehedinti" + }, + { + "id": 8696, + "name": "Zegaia", + "county": "Mehedinti" + }, + { + "id": 8697, + "name": "Punghina", + "county": "Mehedinti" + }, + { + "id": 8698, + "name": "Cearangu", + "county": "Mehedinti" + }, + { + "id": 8699, + "name": "Drincea", + "county": "Mehedinti" + }, + { + "id": 8700, + "name": "Magurele", + "county": "Mehedinti" + }, + { + "id": 8701, + "name": "Recea", + "county": "Mehedinti" + }, + { + "id": 8702, + "name": "Satu Nou", + "county": "Mehedinti" + }, + { + "id": 8703, + "name": "Rogova", + "county": "Mehedinti" + }, + { + "id": 8704, + "name": "Poroinita", + "county": "Mehedinti" + }, + { + "id": 8705, + "name": "Salcia", + "county": "Mehedinti" + }, + { + "id": 8706, + "name": "Stangaceaua", + "county": "Mehedinti" + }, + { + "id": 8707, + "name": "Barlogeni", + "county": "Mehedinti" + }, + { + "id": 8708, + "name": "Breznicioara", + "county": "Mehedinti" + }, + { + "id": 8709, + "name": "Ceranganul", + "county": "Mehedinti" + }, + { + "id": 8710, + "name": "Fata Motrului", + "county": "Mehedinti" + }, + { + "id": 8711, + "name": "Posta Veche", + "county": "Mehedinti" + }, + { + "id": 8712, + "name": "Satu Mare", + "county": "Mehedinti" + }, + { + "id": 8713, + "name": "Tarsa", + "county": "Mehedinti" + }, + { + "id": 8714, + "name": "Svinita", + "county": "Mehedinti" + }, + { + "id": 8715, + "name": "Sisesti", + "county": "Mehedinti" + }, + { + "id": 8716, + "name": "Caramidaru", + "county": "Mehedinti" + }, + { + "id": 8717, + "name": "Ciovarnasani", + "county": "Mehedinti" + }, + { + "id": 8718, + "name": "Cocorova", + "county": "Mehedinti" + }, + { + "id": 8719, + "name": "Craguesti", + "county": "Mehedinti" + }, + { + "id": 8720, + "name": "Noaptesa", + "county": "Mehedinti" + }, + { + "id": 8721, + "name": "Sovarna", + "county": "Mehedinti" + }, + { + "id": 8722, + "name": "Ohaba", + "county": "Mehedinti" + }, + { + "id": 8723, + "name": "Studina", + "county": "Mehedinti" + }, + { + "id": 8724, + "name": "Tamna", + "county": "Mehedinti" + }, + { + "id": 8725, + "name": "Boceni", + "county": "Mehedinti" + }, + { + "id": 8726, + "name": "Colaret", + "county": "Mehedinti" + }, + { + "id": 8727, + "name": "Cremenea", + "county": "Mehedinti" + }, + { + "id": 8728, + "name": "Fata Cremenii", + "county": "Mehedinti" + }, + { + "id": 8729, + "name": "Izvoralu", + "county": "Mehedinti" + }, + { + "id": 8730, + "name": "Manu", + "county": "Mehedinti" + }, + { + "id": 8731, + "name": "Pavat", + "county": "Mehedinti" + }, + { + "id": 8732, + "name": "Plopi", + "county": "Mehedinti" + }, + { + "id": 8733, + "name": "Valea Ursului", + "county": "Mehedinti" + }, + { + "id": 8734, + "name": "Vanatori", + "county": "Mehedinti" + }, + { + "id": 8735, + "name": "Branistea", + "county": "Mehedinti" + }, + { + "id": 8736, + "name": "Goanta", + "county": "Mehedinti" + }, + { + "id": 8737, + "name": "Rosiori", + "county": "Mehedinti" + }, + { + "id": 8738, + "name": "Vanjulet", + "county": "Mehedinti" + }, + { + "id": 8739, + "name": "Hotarani", + "county": "Mehedinti" + }, + { + "id": 8740, + "name": "Vladaia", + "county": "Mehedinti" + }, + { + "id": 8741, + "name": "Almajel", + "county": "Mehedinti" + }, + { + "id": 8742, + "name": "Scorila", + "county": "Mehedinti" + }, + { + "id": 8743, + "name": "Stircovita", + "county": "Mehedinti" + }, + { + "id": 8744, + "name": "Voloiac", + "county": "Mehedinti" + }, + { + "id": 8745, + "name": "Cotoroaia", + "county": "Mehedinti" + }, + { + "id": 8746, + "name": "Lac", + "county": "Mehedinti" + }, + { + "id": 8747, + "name": "Ruptura", + "county": "Mehedinti" + }, + { + "id": 8748, + "name": "Sperlesti", + "county": "Mehedinti" + }, + { + "id": 8749, + "name": "Titirigi", + "county": "Mehedinti" + }, + { + "id": 8750, + "name": "Valea Buna", + "county": "Mehedinti" + }, + { + "id": 8751, + "name": "Voloicel", + "county": "Mehedinti" + }, + { + "id": 8752, + "name": "Targu Mures", + "county": "Mures" + }, + { + "id": 8753, + "name": "Mureseni", + "county": "Mures" + }, + { + "id": 8754, + "name": "Remetea", + "county": "Mures" + }, + { + "id": 8755, + "name": "Cristesti", + "county": "Mures" + }, + { + "id": 8756, + "name": "Valureni", + "county": "Mures" + }, + { + "id": 8757, + "name": "Sancraiu de Mures", + "county": "Mures" + }, + { + "id": 8758, + "name": "Nazna", + "county": "Mures" + }, + { + "id": 8759, + "name": "Sangeorgiu de Mures", + "county": "Mures" + }, + { + "id": 8760, + "name": "Cotus", + "county": "Mures" + }, + { + "id": 8761, + "name": "Tofalau", + "county": "Mures" + }, + { + "id": 8762, + "name": "Santana de Mures", + "county": "Mures" + }, + { + "id": 8763, + "name": "Bardesti", + "county": "Mures" + }, + { + "id": 8764, + "name": "Chinari", + "county": "Mures" + }, + { + "id": 8765, + "name": "Curteni", + "county": "Mures" + }, + { + "id": 8766, + "name": "Sighisoara", + "county": "Mures" + }, + { + "id": 8767, + "name": "Angofa", + "county": "Mures" + }, + { + "id": 8768, + "name": "Aurel Vlaicu", + "county": "Mures" + }, + { + "id": 8769, + "name": "Rora", + "county": "Mures" + }, + { + "id": 8770, + "name": "Soromiclea", + "county": "Mures" + }, + { + "id": 8771, + "name": "Venchi", + "county": "Mures" + }, + { + "id": 8772, + "name": "Viilor", + "county": "Mures" + }, + { + "id": 8773, + "name": "Hetiur", + "county": "Mures" + }, + { + "id": 8774, + "name": "Albesti", + "county": "Mures" + }, + { + "id": 8775, + "name": "Barlibasoaia", + "county": "Mures" + }, + { + "id": 8776, + "name": "Boiu", + "county": "Mures" + }, + { + "id": 8777, + "name": "Jacu", + "county": "Mures" + }, + { + "id": 8778, + "name": "Sapartoc", + "county": "Mures" + }, + { + "id": 8779, + "name": "Topa", + "county": "Mures" + }, + { + "id": 8780, + "name": "Valea Albestiului", + "county": "Mures" + }, + { + "id": 8781, + "name": "Valea Daii", + "county": "Mures" + }, + { + "id": 8782, + "name": "Valea Sapartocului", + "county": "Mures" + }, + { + "id": 8783, + "name": "Ludus", + "county": "Mures" + }, + { + "id": 8784, + "name": "Avramesti", + "county": "Mures" + }, + { + "id": 8785, + "name": "Cioarga", + "county": "Mures" + }, + { + "id": 8786, + "name": "Ciurgau", + "county": "Mures" + }, + { + "id": 8787, + "name": "Fundatura", + "county": "Mures" + }, + { + "id": 8788, + "name": "Gheja", + "county": "Mures" + }, + { + "id": 8789, + "name": "Rosiori", + "county": "Mures" + }, + { + "id": 8790, + "name": "Reghin", + "county": "Mures" + }, + { + "id": 8791, + "name": "Apalina", + "county": "Mures" + }, + { + "id": 8792, + "name": "Iernuteni", + "county": "Mures" + }, + { + "id": 8793, + "name": "Sovata", + "county": "Mures" + }, + { + "id": 8794, + "name": "Capeti", + "county": "Mures" + }, + { + "id": 8795, + "name": "Iliesi", + "county": "Mures" + }, + { + "id": 8796, + "name": "Sacadat", + "county": "Mures" + }, + { + "id": 8797, + "name": "Sarateni", + "county": "Mures" + }, + { + "id": 8798, + "name": "Tarnaveni", + "county": "Mures" + }, + { + "id": 8799, + "name": "Botorca", + "county": "Mures" + }, + { + "id": 8800, + "name": "Bobohalma", + "county": "Mures" + }, + { + "id": 8801, + "name": "Acatari", + "county": "Mures" + }, + { + "id": 8802, + "name": "Corbesti", + "county": "Mures" + }, + { + "id": 8803, + "name": "Gaiesti", + "county": "Mures" + }, + { + "id": 8804, + "name": "Gruisor", + "county": "Mures" + }, + { + "id": 8805, + "name": "Murgesti", + "county": "Mures" + }, + { + "id": 8806, + "name": "Roteni", + "county": "Mures" + }, + { + "id": 8807, + "name": "Stejeris", + "county": "Mures" + }, + { + "id": 8808, + "name": "Suveica", + "county": "Mures" + }, + { + "id": 8809, + "name": "Valenii", + "county": "Mures" + }, + { + "id": 8810, + "name": "Adamus", + "county": "Mures" + }, + { + "id": 8811, + "name": "Chincius", + "county": "Mures" + }, + { + "id": 8812, + "name": "Cornesti", + "county": "Mures" + }, + { + "id": 8813, + "name": "Craiesti", + "county": "Mures" + }, + { + "id": 8814, + "name": "Dambau", + "county": "Mures" + }, + { + "id": 8815, + "name": "Herepea", + "county": "Mures" + }, + { + "id": 8816, + "name": "Alunis", + "county": "Mures" + }, + { + "id": 8817, + "name": "Fitcau", + "county": "Mures" + }, + { + "id": 8818, + "name": "Lunca Muresului", + "county": "Mures" + }, + { + "id": 8819, + "name": "Apold", + "county": "Mures" + }, + { + "id": 8820, + "name": "Daia", + "county": "Mures" + }, + { + "id": 8821, + "name": "Saes", + "county": "Mures" + }, + { + "id": 8822, + "name": "Vulcan", + "county": "Mures" + }, + { + "id": 8823, + "name": "Atintis", + "county": "Mures" + }, + { + "id": 8824, + "name": "Botez", + "county": "Mures" + }, + { + "id": 8825, + "name": "Cecalaca", + "county": "Mures" + }, + { + "id": 8826, + "name": "Istihaza", + "county": "Mures" + }, + { + "id": 8827, + "name": "Maldaoci", + "county": "Mures" + }, + { + "id": 8828, + "name": "Saniacob", + "county": "Mures" + }, + { + "id": 8829, + "name": "Bahnea", + "county": "Mures" + }, + { + "id": 8830, + "name": "Bernadea", + "county": "Mures" + }, + { + "id": 8831, + "name": "Cund", + "county": "Mures" + }, + { + "id": 8832, + "name": "Daia", + "county": "Mures" + }, + { + "id": 8833, + "name": "Gogan", + "county": "Mures" + }, + { + "id": 8834, + "name": "Idiciu", + "county": "Mures" + }, + { + "id": 8835, + "name": "Lepindea", + "county": "Mures" + }, + { + "id": 8836, + "name": "Band", + "county": "Mures" + }, + { + "id": 8837, + "name": "Draculea Bandului", + "county": "Mures" + }, + { + "id": 8838, + "name": "Fanate", + "county": "Mures" + }, + { + "id": 8839, + "name": "Fanatele Madarasului", + "county": "Mures" + }, + { + "id": 8840, + "name": "Istan-Tau", + "county": "Mures" + }, + { + "id": 8841, + "name": "Madaras", + "county": "Mures" + }, + { + "id": 8842, + "name": "Marasesti", + "county": "Mures" + }, + { + "id": 8843, + "name": "Negrenii de Campie", + "county": "Mures" + }, + { + "id": 8844, + "name": "Oroiu", + "county": "Mures" + }, + { + "id": 8845, + "name": "Petea", + "county": "Mures" + }, + { + "id": 8846, + "name": "Tiptelnic", + "county": "Mures" + }, + { + "id": 8847, + "name": "Valea Mare", + "county": "Mures" + }, + { + "id": 8848, + "name": "Valea Rece", + "county": "Mures" + }, + { + "id": 8849, + "name": "Batos", + "county": "Mures" + }, + { + "id": 8850, + "name": "Dedrad", + "county": "Mures" + }, + { + "id": 8851, + "name": "Goreni", + "county": "Mures" + }, + { + "id": 8852, + "name": "Uila", + "county": "Mures" + }, + { + "id": 8853, + "name": "Bagaciu", + "county": "Mures" + }, + { + "id": 8854, + "name": "Delenii", + "county": "Mures" + }, + { + "id": 8855, + "name": "Bala", + "county": "Mures" + }, + { + "id": 8856, + "name": "Ercea", + "county": "Mures" + }, + { + "id": 8857, + "name": "Balauseri", + "county": "Mures" + }, + { + "id": 8858, + "name": "Agristeu", + "county": "Mures" + }, + { + "id": 8859, + "name": "Chendu", + "county": "Mures" + }, + { + "id": 8860, + "name": "Dumitreni", + "county": "Mures" + }, + { + "id": 8861, + "name": "Filitelnic", + "county": "Mures" + }, + { + "id": 8862, + "name": "Senereus", + "county": "Mures" + }, + { + "id": 8863, + "name": "Beica de Jos", + "county": "Mures" + }, + { + "id": 8864, + "name": "Beica de Sus", + "county": "Mures" + }, + { + "id": 8865, + "name": "Cacuciu", + "county": "Mures" + }, + { + "id": 8866, + "name": "Nadasa", + "county": "Mures" + }, + { + "id": 8867, + "name": "Sanmihai de Padure", + "county": "Mures" + }, + { + "id": 8868, + "name": "Serbeni", + "county": "Mures" + }, + { + "id": 8869, + "name": "Bichis", + "county": "Mures" + }, + { + "id": 8870, + "name": "Gambut", + "county": "Mures" + }, + { + "id": 8871, + "name": "Nandra", + "county": "Mures" + }, + { + "id": 8872, + "name": "Ozd", + "county": "Mures" + }, + { + "id": 8873, + "name": "Bogata", + "county": "Mures" + }, + { + "id": 8874, + "name": "Ranta", + "county": "Mures" + }, + { + "id": 8875, + "name": "Breaza", + "county": "Mures" + }, + { + "id": 8876, + "name": "Filpisu Mare", + "county": "Mures" + }, + { + "id": 8877, + "name": "Filpisu Mic", + "county": "Mures" + }, + { + "id": 8878, + "name": "Brancovenesti", + "county": "Mures" + }, + { + "id": 8879, + "name": "Idicel", + "county": "Mures" + }, + { + "id": 8880, + "name": "Idicel-Padure", + "county": "Mures" + }, + { + "id": 8881, + "name": "Sacalu de Padure", + "county": "Mures" + }, + { + "id": 8882, + "name": "Valenii de Mures", + "county": "Mures" + }, + { + "id": 8883, + "name": "Ceuasu de Campie", + "county": "Mures" + }, + { + "id": 8884, + "name": "Bozed", + "county": "Mures" + }, + { + "id": 8885, + "name": "Campenita", + "county": "Mures" + }, + { + "id": 8886, + "name": "Culpiu", + "county": "Mures" + }, + { + "id": 8887, + "name": "Herghelia", + "county": "Mures" + }, + { + "id": 8888, + "name": "Porumbeni", + "county": "Mures" + }, + { + "id": 8889, + "name": "Sabed", + "county": "Mures" + }, + { + "id": 8890, + "name": "Voiniceni", + "county": "Mures" + }, + { + "id": 8891, + "name": "Chetani", + "county": "Mures" + }, + { + "id": 8892, + "name": "Coasta Grindului", + "county": "Mures" + }, + { + "id": 8893, + "name": "Cordos", + "county": "Mures" + }, + { + "id": 8894, + "name": "Giurgis", + "county": "Mures" + }, + { + "id": 8895, + "name": "Grindeni", + "county": "Mures" + }, + { + "id": 8896, + "name": "Hadareni", + "county": "Mures" + }, + { + "id": 8897, + "name": "Lint", + "county": "Mures" + }, + { + "id": 8898, + "name": "Chiheru de Jos", + "county": "Mures" + }, + { + "id": 8899, + "name": "Chiheru de Sus", + "county": "Mures" + }, + { + "id": 8900, + "name": "Urisiu de Jos", + "county": "Mures" + }, + { + "id": 8901, + "name": "Urisiu de Sus", + "county": "Mures" + }, + { + "id": 8902, + "name": "Coroisanmartin", + "county": "Mures" + }, + { + "id": 8903, + "name": "Coroi", + "county": "Mures" + }, + { + "id": 8904, + "name": "Odrihei", + "county": "Mures" + }, + { + "id": 8905, + "name": "Soimus", + "county": "Mures" + }, + { + "id": 8906, + "name": "Cozma", + "county": "Mures" + }, + { + "id": 8907, + "name": "Fanatele Socolului", + "county": "Mures" + }, + { + "id": 8908, + "name": "Socolu de Campie", + "county": "Mures" + }, + { + "id": 8909, + "name": "Valea Sasului", + "county": "Mures" + }, + { + "id": 8910, + "name": "Valea Ungurului", + "county": "Mures" + }, + { + "id": 8911, + "name": "Craciunesti", + "county": "Mures" + }, + { + "id": 8912, + "name": "Budiu Mic", + "county": "Mures" + }, + { + "id": 8913, + "name": "Cinta", + "county": "Mures" + }, + { + "id": 8914, + "name": "Cornesti", + "county": "Mures" + }, + { + "id": 8915, + "name": "Tirimioara", + "county": "Mures" + }, + { + "id": 8916, + "name": "Craiesti", + "county": "Mures" + }, + { + "id": 8917, + "name": "Lefaia", + "county": "Mures" + }, + { + "id": 8918, + "name": "Milasel", + "county": "Mures" + }, + { + "id": 8919, + "name": "Nima Milaselului", + "county": "Mures" + }, + { + "id": 8920, + "name": "Cucerdea", + "county": "Mures" + }, + { + "id": 8921, + "name": "Bord", + "county": "Mures" + }, + { + "id": 8922, + "name": "Seulia de Mures", + "county": "Mures" + }, + { + "id": 8923, + "name": "Cuci", + "county": "Mures" + }, + { + "id": 8924, + "name": "Dataseni", + "county": "Mures" + }, + { + "id": 8925, + "name": "Dupa Deal", + "county": "Mures" + }, + { + "id": 8926, + "name": "Orosia", + "county": "Mures" + }, + { + "id": 8927, + "name": "Petrilaca", + "county": "Mures" + }, + { + "id": 8928, + "name": "Danes", + "county": "Mures" + }, + { + "id": 8929, + "name": "Cris", + "county": "Mures" + }, + { + "id": 8930, + "name": "Seleus", + "county": "Mures" + }, + { + "id": 8931, + "name": "Stejarenii", + "county": "Mures" + }, + { + "id": 8932, + "name": "Deda", + "county": "Mures" + }, + { + "id": 8933, + "name": "Bistra Muresului", + "county": "Mures" + }, + { + "id": 8934, + "name": "Filea", + "county": "Mures" + }, + { + "id": 8935, + "name": "Pietris", + "county": "Mures" + }, + { + "id": 8936, + "name": "Eremitu", + "county": "Mures" + }, + { + "id": 8937, + "name": "Calugareni", + "county": "Mures" + }, + { + "id": 8938, + "name": "Campu Cetatii", + "county": "Mures" + }, + { + "id": 8939, + "name": "Damieni", + "county": "Mures" + }, + { + "id": 8940, + "name": "Matrici", + "county": "Mures" + }, + { + "id": 8941, + "name": "Ernei", + "county": "Mures" + }, + { + "id": 8942, + "name": "Caluseri", + "county": "Mures" + }, + { + "id": 8943, + "name": "Dumbravioara", + "county": "Mures" + }, + { + "id": 8944, + "name": "Icland", + "county": "Mures" + }, + { + "id": 8945, + "name": "Sacareni", + "county": "Mures" + }, + { + "id": 8946, + "name": "Sangeru de Padure", + "county": "Mures" + }, + { + "id": 8947, + "name": "Faragau", + "county": "Mures" + }, + { + "id": 8948, + "name": "Fanate", + "county": "Mures" + }, + { + "id": 8949, + "name": "Hodaia", + "county": "Mures" + }, + { + "id": 8950, + "name": "Onuca", + "county": "Mures" + }, + { + "id": 8951, + "name": "Poarta", + "county": "Mures" + }, + { + "id": 8952, + "name": "Tonciu", + "county": "Mures" + }, + { + "id": 8953, + "name": "Fantanele", + "county": "Mures" + }, + { + "id": 8954, + "name": "Bordosiu", + "county": "Mures" + }, + { + "id": 8955, + "name": "Calimanesti", + "county": "Mures" + }, + { + "id": 8956, + "name": "Cibu", + "county": "Mures" + }, + { + "id": 8957, + "name": "Roua", + "county": "Mures" + }, + { + "id": 8958, + "name": "Viforoasa", + "county": "Mures" + }, + { + "id": 8959, + "name": "Galesti", + "county": "Mures" + }, + { + "id": 8960, + "name": "Adrianu Mare", + "county": "Mures" + }, + { + "id": 8961, + "name": "Adrianu Mic", + "county": "Mures" + }, + { + "id": 8962, + "name": "Bedeni", + "county": "Mures" + }, + { + "id": 8963, + "name": "Maiad", + "county": "Mures" + }, + { + "id": 8964, + "name": "Troita", + "county": "Mures" + }, + { + "id": 8965, + "name": "Ganesti", + "county": "Mures" + }, + { + "id": 8966, + "name": "Custelnic", + "county": "Mures" + }, + { + "id": 8967, + "name": "Paucisoara", + "county": "Mures" + }, + { + "id": 8968, + "name": "Sub Padure", + "county": "Mures" + }, + { + "id": 8969, + "name": "Gheorghe Doja", + "county": "Mures" + }, + { + "id": 8970, + "name": "Ilieni", + "county": "Mures" + }, + { + "id": 8971, + "name": "Leordeni", + "county": "Mures" + }, + { + "id": 8972, + "name": "Satu Nou", + "county": "Mures" + }, + { + "id": 8973, + "name": "Tirimia", + "county": "Mures" + }, + { + "id": 8974, + "name": "Ghindari", + "county": "Mures" + }, + { + "id": 8975, + "name": "Abud", + "county": "Mures" + }, + { + "id": 8976, + "name": "Ceie", + "county": "Mures" + }, + { + "id": 8977, + "name": "Chibed", + "county": "Mures" + }, + { + "id": 8978, + "name": "Solocma", + "county": "Mures" + }, + { + "id": 8979, + "name": "Trei Sate", + "county": "Mures" + }, + { + "id": 8980, + "name": "Glodeni", + "county": "Mures" + }, + { + "id": 8981, + "name": "Merisor", + "county": "Mures" + }, + { + "id": 8982, + "name": "Moisa", + "county": "Mures" + }, + { + "id": 8983, + "name": "Pacureni", + "county": "Mures" + }, + { + "id": 8984, + "name": "Paingeni", + "county": "Mures" + }, + { + "id": 8985, + "name": "Gornesti", + "county": "Mures" + }, + { + "id": 8986, + "name": "Iara de Mures", + "county": "Mures" + }, + { + "id": 8987, + "name": "Ilioara", + "county": "Mures" + }, + { + "id": 8988, + "name": "Mura Mare", + "county": "Mures" + }, + { + "id": 8989, + "name": "Mura Mica", + "county": "Mures" + }, + { + "id": 8990, + "name": "Padureni", + "county": "Mures" + }, + { + "id": 8991, + "name": "Peris", + "county": "Mures" + }, + { + "id": 8992, + "name": "Petrilaca de Mures", + "county": "Mures" + }, + { + "id": 8993, + "name": "Teleac", + "county": "Mures" + }, + { + "id": 8994, + "name": "Grebenisu de Campie", + "county": "Mures" + }, + { + "id": 8995, + "name": "Leorinta", + "county": "Mures" + }, + { + "id": 8996, + "name": "Valea Sanpetrului", + "county": "Mures" + }, + { + "id": 8997, + "name": "Gurghiu", + "county": "Mures" + }, + { + "id": 8998, + "name": "Adrian", + "county": "Mures" + }, + { + "id": 8999, + "name": "Casva", + "county": "Mures" + }, + { + "id": 9000, + "name": "Comori", + "county": "Mures" + }, + { + "id": 9001, + "name": "Fundoaia", + "county": "Mures" + }, + { + "id": 9002, + "name": "Glajarie", + "county": "Mures" + }, + { + "id": 9003, + "name": "Larga", + "county": "Mures" + }, + { + "id": 9004, + "name": "Orsova", + "county": "Mures" + }, + { + "id": 9005, + "name": "Orsova-Padure", + "county": "Mures" + }, + { + "id": 9006, + "name": "Pauloaia", + "county": "Mures" + }, + { + "id": 9007, + "name": "Hodac", + "county": "Mures" + }, + { + "id": 9008, + "name": "Arsita", + "county": "Mures" + }, + { + "id": 9009, + "name": "Bicasu", + "county": "Mures" + }, + { + "id": 9010, + "name": "Dubistea de Padure", + "county": "Mures" + }, + { + "id": 9011, + "name": "Mirigioaia", + "county": "Mures" + }, + { + "id": 9012, + "name": "Toaca", + "county": "Mures" + }, + { + "id": 9013, + "name": "Uricea", + "county": "Mures" + }, + { + "id": 9014, + "name": "Hodosa", + "county": "Mures" + }, + { + "id": 9015, + "name": "Ihod", + "county": "Mures" + }, + { + "id": 9016, + "name": "Isla", + "county": "Mures" + }, + { + "id": 9017, + "name": "Sambrias", + "county": "Mures" + }, + { + "id": 9018, + "name": "Ibanesti", + "county": "Mures" + }, + { + "id": 9019, + "name": "Blidireasa", + "county": "Mures" + }, + { + "id": 9020, + "name": "Bradetelu", + "county": "Mures" + }, + { + "id": 9021, + "name": "Dulcea", + "county": "Mures" + }, + { + "id": 9022, + "name": "Ibanesti-Padure", + "county": "Mures" + }, + { + "id": 9023, + "name": "Lapusna", + "county": "Mures" + }, + { + "id": 9024, + "name": "Parau Mare", + "county": "Mures" + }, + { + "id": 9025, + "name": "Tireu", + "county": "Mures" + }, + { + "id": 9026, + "name": "Tisieu", + "county": "Mures" + }, + { + "id": 9027, + "name": "Zimti", + "county": "Mures" + }, + { + "id": 9028, + "name": "Iclanzel", + "county": "Mures" + }, + { + "id": 9029, + "name": "Capusu de Campie", + "county": "Mures" + }, + { + "id": 9030, + "name": "Chisalita", + "county": "Mures" + }, + { + "id": 9031, + "name": "Dupa Deal", + "county": "Mures" + }, + { + "id": 9032, + "name": "Fanate", + "county": "Mures" + }, + { + "id": 9033, + "name": "Fanatele Capusului", + "county": "Mures" + }, + { + "id": 9034, + "name": "Ghidasteu", + "county": "Mures" + }, + { + "id": 9035, + "name": "Iclandu Mare", + "county": "Mures" + }, + { + "id": 9036, + "name": "Madaraseni", + "county": "Mures" + }, + { + "id": 9037, + "name": "Tablaseni", + "county": "Mures" + }, + { + "id": 9038, + "name": "Valea Iclandului", + "county": "Mures" + }, + { + "id": 9039, + "name": "Ideciu de Jos", + "county": "Mures" + }, + { + "id": 9040, + "name": "Deleni", + "county": "Mures" + }, + { + "id": 9041, + "name": "Ideciu de Sus", + "county": "Mures" + }, + { + "id": 9042, + "name": "Iernut", + "county": "Mures" + }, + { + "id": 9043, + "name": "Cipau", + "county": "Mures" + }, + { + "id": 9044, + "name": "Deag", + "county": "Mures" + }, + { + "id": 9045, + "name": "Lechinta", + "county": "Mures" + }, + { + "id": 9046, + "name": "Oarba de Mures", + "county": "Mures" + }, + { + "id": 9047, + "name": "Porumbac", + "county": "Mures" + }, + { + "id": 9048, + "name": "Racamet", + "county": "Mures" + }, + { + "id": 9049, + "name": "Salcud", + "county": "Mures" + }, + { + "id": 9050, + "name": "Sfantu Gheorghe", + "county": "Mures" + }, + { + "id": 9051, + "name": "Livezeni", + "county": "Mures" + }, + { + "id": 9052, + "name": "Bozeni", + "county": "Mures" + }, + { + "id": 9053, + "name": "Corunca", + "county": "Mures" + }, + { + "id": 9054, + "name": "Ivanesti", + "county": "Mures" + }, + { + "id": 9055, + "name": "Poienita", + "county": "Mures" + }, + { + "id": 9056, + "name": "Sanisor", + "county": "Mures" + }, + { + "id": 9057, + "name": "Lunca", + "county": "Mures" + }, + { + "id": 9058, + "name": "Baita", + "county": "Mures" + }, + { + "id": 9059, + "name": "Frunzeni", + "county": "Mures" + }, + { + "id": 9060, + "name": "Logig", + "county": "Mures" + }, + { + "id": 9061, + "name": "Santu", + "county": "Mures" + }, + { + "id": 9062, + "name": "Lunca Bradului", + "county": "Mures" + }, + { + "id": 9063, + "name": "Neagra", + "county": "Mures" + }, + { + "id": 9064, + "name": "Salard", + "county": "Mures" + }, + { + "id": 9065, + "name": "Magherani", + "county": "Mures" + }, + { + "id": 9066, + "name": "Bereni", + "county": "Mures" + }, + { + "id": 9067, + "name": "Bara", + "county": "Mures" + }, + { + "id": 9068, + "name": "Candu", + "county": "Mures" + }, + { + "id": 9069, + "name": "Drojdii", + "county": "Mures" + }, + { + "id": 9070, + "name": "Eremieni", + "county": "Mures" + }, + { + "id": 9071, + "name": "Maia", + "county": "Mures" + }, + { + "id": 9072, + "name": "Marculeni", + "county": "Mures" + }, + { + "id": 9073, + "name": "Silea Nirajului", + "county": "Mures" + }, + { + "id": 9074, + "name": "Torba", + "county": "Mures" + }, + { + "id": 9075, + "name": "Mica", + "county": "Mures" + }, + { + "id": 9076, + "name": "Abus", + "county": "Mures" + }, + { + "id": 9077, + "name": "Capalna de Sus", + "county": "Mures" + }, + { + "id": 9078, + "name": "Ceuas", + "county": "Mures" + }, + { + "id": 9079, + "name": "Deaj", + "county": "Mures" + }, + { + "id": 9080, + "name": "Haranglab", + "county": "Mures" + }, + { + "id": 9081, + "name": "Somostelnic", + "county": "Mures" + }, + { + "id": 9082, + "name": "Miercurea Nirajului", + "county": "Mures" + }, + { + "id": 9083, + "name": "Beu", + "county": "Mures" + }, + { + "id": 9084, + "name": "Dumitrestii", + "county": "Mures" + }, + { + "id": 9085, + "name": "Laureni", + "county": "Mures" + }, + { + "id": 9086, + "name": "Mosuni", + "county": "Mures" + }, + { + "id": 9087, + "name": "Sardu Nirajului", + "county": "Mures" + }, + { + "id": 9088, + "name": "Tampa", + "county": "Mures" + }, + { + "id": 9089, + "name": "Veta", + "county": "Mures" + }, + { + "id": 9090, + "name": "Mihesu de Campie", + "county": "Mures" + }, + { + "id": 9091, + "name": "Bujor", + "county": "Mures" + }, + { + "id": 9092, + "name": "Cirhagau", + "county": "Mures" + }, + { + "id": 9093, + "name": "Groapa Radaii", + "county": "Mures" + }, + { + "id": 9094, + "name": "Mogoaia", + "county": "Mures" + }, + { + "id": 9095, + "name": "Razoare", + "county": "Mures" + }, + { + "id": 9096, + "name": "Saulita", + "county": "Mures" + }, + { + "id": 9097, + "name": "Stefanca", + "county": "Mures" + }, + { + "id": 9098, + "name": "Nades", + "county": "Mures" + }, + { + "id": 9099, + "name": "Magherus", + "county": "Mures" + }, + { + "id": 9100, + "name": "Pipea", + "county": "Mures" + }, + { + "id": 9101, + "name": "Tigmandru", + "county": "Mures" + }, + { + "id": 9102, + "name": "Neaua", + "county": "Mures" + }, + { + "id": 9103, + "name": "Ghinesti", + "county": "Mures" + }, + { + "id": 9104, + "name": "Rigmani", + "county": "Mures" + }, + { + "id": 9105, + "name": "Sansimion", + "county": "Mures" + }, + { + "id": 9106, + "name": "Vadas", + "county": "Mures" + }, + { + "id": 9107, + "name": "Ogra", + "county": "Mures" + }, + { + "id": 9108, + "name": "Dileu Vechi", + "county": "Mures" + }, + { + "id": 9109, + "name": "Giulus", + "county": "Mures" + }, + { + "id": 9110, + "name": "Lascud", + "county": "Mures" + }, + { + "id": 9111, + "name": "Vaideiu", + "county": "Mures" + }, + { + "id": 9112, + "name": "Papiu Ilarian", + "county": "Mures" + }, + { + "id": 9113, + "name": "Dobra", + "county": "Mures" + }, + { + "id": 9114, + "name": "Merisoru", + "county": "Mures" + }, + { + "id": 9115, + "name": "Sandru", + "county": "Mures" + }, + { + "id": 9116, + "name": "Ursoaia", + "county": "Mures" + }, + { + "id": 9117, + "name": "Panet", + "county": "Mures" + }, + { + "id": 9118, + "name": "Berghia", + "county": "Mures" + }, + { + "id": 9119, + "name": "Cuiesd", + "county": "Mures" + }, + { + "id": 9120, + "name": "Hartau", + "county": "Mures" + }, + { + "id": 9121, + "name": "Santioana de Mures", + "county": "Mures" + }, + { + "id": 9122, + "name": "Pasareni", + "county": "Mures" + }, + { + "id": 9123, + "name": "Bolintineni", + "county": "Mures" + }, + { + "id": 9124, + "name": "Galateni", + "county": "Mures" + }, + { + "id": 9125, + "name": "Petelea", + "county": "Mures" + }, + { + "id": 9126, + "name": "Habic", + "county": "Mures" + }, + { + "id": 9127, + "name": "Pogaceaua", + "county": "Mures" + }, + { + "id": 9128, + "name": "Bologaia", + "county": "Mures" + }, + { + "id": 9129, + "name": "Ciulea", + "county": "Mures" + }, + { + "id": 9130, + "name": "Deleni", + "county": "Mures" + }, + { + "id": 9131, + "name": "Fantana Babii", + "county": "Mures" + }, + { + "id": 9132, + "name": "Parau Crucii", + "county": "Mures" + }, + { + "id": 9133, + "name": "Scurta", + "county": "Mures" + }, + { + "id": 9134, + "name": "Sicele", + "county": "Mures" + }, + { + "id": 9135, + "name": "Valea Sanpetrului", + "county": "Mures" + }, + { + "id": 9136, + "name": "Valeni", + "county": "Mures" + }, + { + "id": 9137, + "name": "Rastolita", + "county": "Mures" + }, + { + "id": 9138, + "name": "Andreneasa", + "county": "Mures" + }, + { + "id": 9139, + "name": "Borzia", + "county": "Mures" + }, + { + "id": 9140, + "name": "Galaoaia", + "county": "Mures" + }, + { + "id": 9141, + "name": "Iod", + "county": "Mures" + }, + { + "id": 9142, + "name": "Raciu", + "county": "Mures" + }, + { + "id": 9143, + "name": "Caciulata", + "county": "Mures" + }, + { + "id": 9144, + "name": "Coasta Mare", + "county": "Mures" + }, + { + "id": 9145, + "name": "Cotorinau", + "county": "Mures" + }, + { + "id": 9146, + "name": "Curete", + "county": "Mures" + }, + { + "id": 9147, + "name": "Hagau", + "county": "Mures" + }, + { + "id": 9148, + "name": "Lenis", + "county": "Mures" + }, + { + "id": 9149, + "name": "Nima Raciului", + "county": "Mures" + }, + { + "id": 9150, + "name": "Obarsie", + "county": "Mures" + }, + { + "id": 9151, + "name": "Parau Crucii", + "county": "Mures" + }, + { + "id": 9152, + "name": "Sanmartinu de Campie", + "county": "Mures" + }, + { + "id": 9153, + "name": "Ulies", + "county": "Mures" + }, + { + "id": 9154, + "name": "Valea Seaca", + "county": "Mures" + }, + { + "id": 9155, + "name": "Valea Sanmartinului", + "county": "Mures" + }, + { + "id": 9156, + "name": "Valea Uliesului", + "county": "Mures" + }, + { + "id": 9157, + "name": "Rusii-Munti", + "county": "Mures" + }, + { + "id": 9158, + "name": "Maioresti", + "county": "Mures" + }, + { + "id": 9159, + "name": "Morareni", + "county": "Mures" + }, + { + "id": 9160, + "name": "Sebes", + "county": "Mures" + }, + { + "id": 9161, + "name": "Saschiz", + "county": "Mures" + }, + { + "id": 9162, + "name": "Cloasterf", + "county": "Mures" + }, + { + "id": 9163, + "name": "Mihai Viteazu", + "county": "Mures" + }, + { + "id": 9164, + "name": "Sarmasu", + "county": "Mures" + }, + { + "id": 9165, + "name": "Balda", + "county": "Mures" + }, + { + "id": 9166, + "name": "Larga", + "county": "Mures" + }, + { + "id": 9167, + "name": "Morut", + "county": "Mures" + }, + { + "id": 9168, + "name": "Sarmasel", + "county": "Mures" + }, + { + "id": 9169, + "name": "Sarmasel-Gara", + "county": "Mures" + }, + { + "id": 9170, + "name": "Titiana", + "county": "Mures" + }, + { + "id": 9171, + "name": "Visinelu", + "county": "Mures" + }, + { + "id": 9172, + "name": "Sangeorgiu de Padure", + "county": "Mures" + }, + { + "id": 9173, + "name": "Bezid", + "county": "Mures" + }, + { + "id": 9174, + "name": "Bezidu Nou", + "county": "Mures" + }, + { + "id": 9175, + "name": "Lotu", + "county": "Mures" + }, + { + "id": 9176, + "name": "Sanger", + "county": "Mures" + }, + { + "id": 9177, + "name": "Barza", + "county": "Mures" + }, + { + "id": 9178, + "name": "Cipaieni", + "county": "Mures" + }, + { + "id": 9179, + "name": "Dalu", + "county": "Mures" + }, + { + "id": 9180, + "name": "Pripoare", + "county": "Mures" + }, + { + "id": 9181, + "name": "Valisoara", + "county": "Mures" + }, + { + "id": 9182, + "name": "Zapodea", + "county": "Mures" + }, + { + "id": 9183, + "name": "Sanpaul", + "county": "Mures" + }, + { + "id": 9184, + "name": "Chirileu", + "county": "Mures" + }, + { + "id": 9185, + "name": "Dileu Nou", + "county": "Mures" + }, + { + "id": 9186, + "name": "Sanmarghita", + "county": "Mures" + }, + { + "id": 9187, + "name": "Valea Izvoarelor", + "county": "Mures" + }, + { + "id": 9188, + "name": "Sanpetru de Campie", + "county": "Mures" + }, + { + "id": 9189, + "name": "Barlibas", + "county": "Mures" + }, + { + "id": 9190, + "name": "Dambu", + "county": "Mures" + }, + { + "id": 9191, + "name": "Satu Nou", + "county": "Mures" + }, + { + "id": 9192, + "name": "Sangeorgiu de Campie", + "county": "Mures" + }, + { + "id": 9193, + "name": "Tusinu", + "county": "Mures" + }, + { + "id": 9194, + "name": "Solovastru", + "county": "Mures" + }, + { + "id": 9195, + "name": "Jabenita", + "county": "Mures" + }, + { + "id": 9196, + "name": "Stanceni", + "county": "Mures" + }, + { + "id": 9197, + "name": "Ciobotani", + "county": "Mures" + }, + { + "id": 9198, + "name": "Mestera", + "county": "Mures" + }, + { + "id": 9199, + "name": "Suplac", + "county": "Mures" + }, + { + "id": 9200, + "name": "Idrifaia", + "county": "Mures" + }, + { + "id": 9201, + "name": "Laslau Mare", + "county": "Mures" + }, + { + "id": 9202, + "name": "Laslau Mic", + "county": "Mures" + }, + { + "id": 9203, + "name": "Vaidacuta", + "county": "Mures" + }, + { + "id": 9204, + "name": "Suseni", + "county": "Mures" + }, + { + "id": 9205, + "name": "Luieriu", + "county": "Mures" + }, + { + "id": 9206, + "name": "Saulia", + "county": "Mures" + }, + { + "id": 9207, + "name": "Leorinta-Saulia", + "county": "Mures" + }, + { + "id": 9208, + "name": "Macicasesti", + "county": "Mures" + }, + { + "id": 9209, + "name": "Padurea", + "county": "Mures" + }, + { + "id": 9210, + "name": "Sincai", + "county": "Mures" + }, + { + "id": 9211, + "name": "Lechincioara", + "county": "Mures" + }, + { + "id": 9212, + "name": "Pusta", + "county": "Mures" + }, + { + "id": 9213, + "name": "Sincai-Fanate", + "county": "Mures" + }, + { + "id": 9214, + "name": "Taureni", + "county": "Mures" + }, + { + "id": 9215, + "name": "Fanate", + "county": "Mures" + }, + { + "id": 9216, + "name": "Moara de Jos", + "county": "Mures" + }, + { + "id": 9217, + "name": "Ungheni", + "county": "Mures" + }, + { + "id": 9218, + "name": "Cerghid", + "county": "Mures" + }, + { + "id": 9219, + "name": "Cerghizel", + "county": "Mures" + }, + { + "id": 9220, + "name": "Moresti", + "county": "Mures" + }, + { + "id": 9221, + "name": "Recea", + "county": "Mures" + }, + { + "id": 9222, + "name": "Sausa", + "county": "Mures" + }, + { + "id": 9223, + "name": "Vidrasau", + "county": "Mures" + }, + { + "id": 9224, + "name": "Valea Larga", + "county": "Mures" + }, + { + "id": 9225, + "name": "Gradini", + "county": "Mures" + }, + { + "id": 9226, + "name": "Malaesti", + "county": "Mures" + }, + { + "id": 9227, + "name": "Poduri", + "county": "Mures" + }, + { + "id": 9228, + "name": "Valea Fratiei", + "county": "Mures" + }, + { + "id": 9229, + "name": "Valea Glodului", + "county": "Mures" + }, + { + "id": 9230, + "name": "Valea Padurii", + "county": "Mures" + }, + { + "id": 9231, + "name": "Valea Surii", + "county": "Mures" + }, + { + "id": 9232, + "name": "Valea Uriesului", + "county": "Mures" + }, + { + "id": 9233, + "name": "Vargata", + "county": "Mures" + }, + { + "id": 9234, + "name": "Grausorul", + "county": "Mures" + }, + { + "id": 9235, + "name": "Mitresti", + "county": "Mures" + }, + { + "id": 9236, + "name": "Vadu", + "county": "Mures" + }, + { + "id": 9237, + "name": "Valea", + "county": "Mures" + }, + { + "id": 9238, + "name": "Vatava", + "county": "Mures" + }, + { + "id": 9239, + "name": "Dumbrava", + "county": "Mures" + }, + { + "id": 9240, + "name": "Rapa de Jos", + "county": "Mures" + }, + { + "id": 9241, + "name": "Vetca", + "county": "Mures" + }, + { + "id": 9242, + "name": "Jacodu", + "county": "Mures" + }, + { + "id": 9243, + "name": "Salasuri", + "county": "Mures" + }, + { + "id": 9244, + "name": "Viisoara", + "county": "Mures" + }, + { + "id": 9245, + "name": "Ormenis", + "county": "Mures" + }, + { + "id": 9246, + "name": "Santioana", + "county": "Mures" + }, + { + "id": 9247, + "name": "Vanatori", + "county": "Mures" + }, + { + "id": 9248, + "name": "Archita", + "county": "Mures" + }, + { + "id": 9249, + "name": "Feleag", + "county": "Mures" + }, + { + "id": 9250, + "name": "Mureni", + "county": "Mures" + }, + { + "id": 9251, + "name": "Soard", + "county": "Mures" + }, + { + "id": 9252, + "name": "Voivodeni", + "county": "Mures" + }, + { + "id": 9253, + "name": "Toldal", + "county": "Mures" + }, + { + "id": 9254, + "name": "Zagar", + "county": "Mures" + }, + { + "id": 9255, + "name": "Seleus", + "county": "Mures" + }, + { + "id": 9256, + "name": "Zau de Campie", + "county": "Mures" + }, + { + "id": 9257, + "name": "Barbosi", + "county": "Mures" + }, + { + "id": 9258, + "name": "Botei", + "county": "Mures" + }, + { + "id": 9259, + "name": "Bujor-Hodaie", + "county": "Mures" + }, + { + "id": 9260, + "name": "Ciretea", + "county": "Mures" + }, + { + "id": 9261, + "name": "Gaura Sangerului", + "county": "Mures" + }, + { + "id": 9262, + "name": "Malea", + "county": "Mures" + }, + { + "id": 9263, + "name": "Stefaneaca", + "county": "Mures" + }, + { + "id": 9264, + "name": "Tau", + "county": "Mures" + }, + { + "id": 9265, + "name": "Sanvasii", + "county": "Mures" + }, + { + "id": 9266, + "name": "Ciba", + "county": "Mures" + }, + { + "id": 9267, + "name": "Foi", + "county": "Mures" + }, + { + "id": 9268, + "name": "Nicolesti", + "county": "Mures" + }, + { + "id": 9269, + "name": "Seuca", + "county": "Mures" + }, + { + "id": 9270, + "name": "Piatra-Neamt", + "county": "Neamt" + }, + { + "id": 9271, + "name": "Ciritei", + "county": "Neamt" + }, + { + "id": 9272, + "name": "Doamna", + "county": "Neamt" + }, + { + "id": 9273, + "name": "Valeni", + "county": "Neamt" + }, + { + "id": 9274, + "name": "Dumbrava Rosie", + "county": "Neamt" + }, + { + "id": 9275, + "name": "Brasauti", + "county": "Neamt" + }, + { + "id": 9276, + "name": "Cut", + "county": "Neamt" + }, + { + "id": 9277, + "name": "Izvoare", + "county": "Neamt" + }, + { + "id": 9278, + "name": "Savinesti", + "county": "Neamt" + }, + { + "id": 9279, + "name": "Dumbrava Deal", + "county": "Neamt" + }, + { + "id": 9280, + "name": "Roman", + "county": "Neamt" + }, + { + "id": 9281, + "name": "Cordun", + "county": "Neamt" + }, + { + "id": 9282, + "name": "Pildesti", + "county": "Neamt" + }, + { + "id": 9283, + "name": "Simionesti", + "county": "Neamt" + }, + { + "id": 9284, + "name": "Horia", + "county": "Neamt" + }, + { + "id": 9285, + "name": "Cotu Vames", + "county": "Neamt" + }, + { + "id": 9286, + "name": "Bicaz", + "county": "Neamt" + }, + { + "id": 9287, + "name": "Capsa", + "county": "Neamt" + }, + { + "id": 9288, + "name": "Dodeni", + "county": "Neamt" + }, + { + "id": 9289, + "name": "Izvoru Muntelui", + "county": "Neamt" + }, + { + "id": 9290, + "name": "Izvorul Alb", + "county": "Neamt" + }, + { + "id": 9291, + "name": "Potoci", + "county": "Neamt" + }, + { + "id": 9292, + "name": "Secu", + "county": "Neamt" + }, + { + "id": 9293, + "name": "Targu Neamt", + "county": "Neamt" + }, + { + "id": 9294, + "name": "Blebea", + "county": "Neamt" + }, + { + "id": 9295, + "name": "Humulesti", + "county": "Neamt" + }, + { + "id": 9296, + "name": "Humulestii Noi", + "county": "Neamt" + }, + { + "id": 9297, + "name": "Agapia", + "county": "Neamt" + }, + { + "id": 9298, + "name": "Filioara", + "county": "Neamt" + }, + { + "id": 9299, + "name": "Sacalusesti", + "county": "Neamt" + }, + { + "id": 9300, + "name": "Varatec", + "county": "Neamt" + }, + { + "id": 9301, + "name": "Bahna", + "county": "Neamt" + }, + { + "id": 9302, + "name": "Aramesti", + "county": "Neamt" + }, + { + "id": 9303, + "name": "Bahnisoara", + "county": "Neamt" + }, + { + "id": 9304, + "name": "Brosteni", + "county": "Neamt" + }, + { + "id": 9305, + "name": "Izvoare", + "county": "Neamt" + }, + { + "id": 9306, + "name": "Liliac", + "county": "Neamt" + }, + { + "id": 9307, + "name": "Tutcanii din Deal", + "county": "Neamt" + }, + { + "id": 9308, + "name": "Tutcanii din Vale", + "county": "Neamt" + }, + { + "id": 9309, + "name": "Baltatesti", + "county": "Neamt" + }, + { + "id": 9310, + "name": "Ghindaoani", + "county": "Neamt" + }, + { + "id": 9311, + "name": "Valea Arini", + "county": "Neamt" + }, + { + "id": 9312, + "name": "Valea Seaca", + "county": "Neamt" + }, + { + "id": 9313, + "name": "Bicaz-Chei", + "county": "Neamt" + }, + { + "id": 9314, + "name": "Barnadu", + "county": "Neamt" + }, + { + "id": 9315, + "name": "Gherman", + "county": "Neamt" + }, + { + "id": 9316, + "name": "Ivanes", + "county": "Neamt" + }, + { + "id": 9317, + "name": "Bicazu Ardelean", + "county": "Neamt" + }, + { + "id": 9318, + "name": "Telec", + "county": "Neamt" + }, + { + "id": 9319, + "name": "Ticos", + "county": "Neamt" + }, + { + "id": 9320, + "name": "Bira", + "county": "Neamt" + }, + { + "id": 9321, + "name": "Boghicea", + "county": "Neamt" + }, + { + "id": 9322, + "name": "Causeni", + "county": "Neamt" + }, + { + "id": 9323, + "name": "Negresti", + "county": "Neamt" + }, + { + "id": 9324, + "name": "Nistria", + "county": "Neamt" + }, + { + "id": 9325, + "name": "Rediu", + "county": "Neamt" + }, + { + "id": 9326, + "name": "Slobozia", + "county": "Neamt" + }, + { + "id": 9327, + "name": "Bargauani", + "county": "Neamt" + }, + { + "id": 9328, + "name": "Bahna Mare", + "county": "Neamt" + }, + { + "id": 9329, + "name": "Baratca", + "county": "Neamt" + }, + { + "id": 9330, + "name": "Balanesti", + "county": "Neamt" + }, + { + "id": 9331, + "name": "Breaza", + "county": "Neamt" + }, + { + "id": 9332, + "name": "Certieni", + "county": "Neamt" + }, + { + "id": 9333, + "name": "Chilia", + "county": "Neamt" + }, + { + "id": 9334, + "name": "Darloaia", + "county": "Neamt" + }, + { + "id": 9335, + "name": "Ghelaiesti", + "county": "Neamt" + }, + { + "id": 9336, + "name": "Hartop", + "county": "Neamt" + }, + { + "id": 9337, + "name": "Homiceni", + "county": "Neamt" + }, + { + "id": 9338, + "name": "Talpa", + "county": "Neamt" + }, + { + "id": 9339, + "name": "Vladiceni", + "county": "Neamt" + }, + { + "id": 9340, + "name": "Bodesti", + "county": "Neamt" + }, + { + "id": 9341, + "name": "Bodestii de Jos", + "county": "Neamt" + }, + { + "id": 9342, + "name": "Corni", + "county": "Neamt" + }, + { + "id": 9343, + "name": "Oslobeni", + "county": "Neamt" + }, + { + "id": 9344, + "name": "Borca", + "county": "Neamt" + }, + { + "id": 9345, + "name": "Lunca", + "county": "Neamt" + }, + { + "id": 9346, + "name": "Madei", + "county": "Neamt" + }, + { + "id": 9347, + "name": "Paraul Carjei", + "county": "Neamt" + }, + { + "id": 9348, + "name": "Paraul Pantei", + "county": "Neamt" + }, + { + "id": 9349, + "name": "Sabasa", + "county": "Neamt" + }, + { + "id": 9350, + "name": "Soci", + "county": "Neamt" + }, + { + "id": 9351, + "name": "Borlesti", + "county": "Neamt" + }, + { + "id": 9352, + "name": "Nechit", + "county": "Neamt" + }, + { + "id": 9353, + "name": "Mastacan", + "county": "Neamt" + }, + { + "id": 9354, + "name": "Ruseni", + "county": "Neamt" + }, + { + "id": 9355, + "name": "Sovoaia", + "county": "Neamt" + }, + { + "id": 9356, + "name": "Botesti", + "county": "Neamt" + }, + { + "id": 9357, + "name": "Barticesti", + "county": "Neamt" + }, + { + "id": 9358, + "name": "David", + "county": "Neamt" + }, + { + "id": 9359, + "name": "Moreni", + "county": "Neamt" + }, + { + "id": 9360, + "name": "Munteni", + "county": "Neamt" + }, + { + "id": 9361, + "name": "Nisiporesti", + "county": "Neamt" + }, + { + "id": 9362, + "name": "Valeni", + "county": "Neamt" + }, + { + "id": 9363, + "name": "Bozieni", + "county": "Neamt" + }, + { + "id": 9364, + "name": "Baneasa", + "county": "Neamt" + }, + { + "id": 9365, + "name": "Craiesti", + "county": "Neamt" + }, + { + "id": 9366, + "name": "Cuci", + "county": "Neamt" + }, + { + "id": 9367, + "name": "Iucsa", + "county": "Neamt" + }, + { + "id": 9368, + "name": "Brusturi", + "county": "Neamt" + }, + { + "id": 9369, + "name": "Draganesti", + "county": "Neamt" + }, + { + "id": 9370, + "name": "Grosi", + "county": "Neamt" + }, + { + "id": 9371, + "name": "Ortasti", + "county": "Neamt" + }, + { + "id": 9372, + "name": "Poiana", + "county": "Neamt" + }, + { + "id": 9373, + "name": "Rasca", + "county": "Neamt" + }, + { + "id": 9374, + "name": "Soimaresti", + "county": "Neamt" + }, + { + "id": 9375, + "name": "Tarzia", + "county": "Neamt" + }, + { + "id": 9376, + "name": "Ceahlau", + "county": "Neamt" + }, + { + "id": 9377, + "name": "Bistricioara", + "county": "Neamt" + }, + { + "id": 9378, + "name": "Paraul Mare", + "county": "Neamt" + }, + { + "id": 9379, + "name": "Candesti", + "county": "Neamt" + }, + { + "id": 9380, + "name": "Barcanesti", + "county": "Neamt" + }, + { + "id": 9381, + "name": "Dragova", + "county": "Neamt" + }, + { + "id": 9382, + "name": "Padureni", + "county": "Neamt" + }, + { + "id": 9383, + "name": "Tardenii Mici", + "county": "Neamt" + }, + { + "id": 9384, + "name": "Vadurele", + "county": "Neamt" + }, + { + "id": 9385, + "name": "Costisa", + "county": "Neamt" + }, + { + "id": 9386, + "name": "Dornesti", + "county": "Neamt" + }, + { + "id": 9387, + "name": "Frunzeni", + "county": "Neamt" + }, + { + "id": 9388, + "name": "Manoaia", + "county": "Neamt" + }, + { + "id": 9389, + "name": "Cracaoani", + "county": "Neamt" + }, + { + "id": 9390, + "name": "Cracaul Negru", + "county": "Neamt" + }, + { + "id": 9391, + "name": "Magazia", + "county": "Neamt" + }, + { + "id": 9392, + "name": "Mitocu Balan", + "county": "Neamt" + }, + { + "id": 9393, + "name": "Poiana Cracaoani", + "county": "Neamt" + }, + { + "id": 9394, + "name": "Damuc", + "county": "Neamt" + }, + { + "id": 9395, + "name": "Huisurez", + "county": "Neamt" + }, + { + "id": 9396, + "name": "Trei Fantani", + "county": "Neamt" + }, + { + "id": 9397, + "name": "Dobreni", + "county": "Neamt" + }, + { + "id": 9398, + "name": "Casaria", + "county": "Neamt" + }, + { + "id": 9399, + "name": "Negresti", + "county": "Neamt" + }, + { + "id": 9400, + "name": "Poiana", + "county": "Neamt" + }, + { + "id": 9401, + "name": "Sarata", + "county": "Neamt" + }, + { + "id": 9402, + "name": "Doljesti", + "county": "Neamt" + }, + { + "id": 9403, + "name": "Buhonca", + "county": "Neamt" + }, + { + "id": 9404, + "name": "Buruienesti", + "county": "Neamt" + }, + { + "id": 9405, + "name": "Rotunda", + "county": "Neamt" + }, + { + "id": 9406, + "name": "Dragomiresti", + "county": "Neamt" + }, + { + "id": 9407, + "name": "Bornis", + "county": "Neamt" + }, + { + "id": 9408, + "name": "Hlapesti", + "county": "Neamt" + }, + { + "id": 9409, + "name": "Mastacan", + "county": "Neamt" + }, + { + "id": 9410, + "name": "Unghi", + "county": "Neamt" + }, + { + "id": 9411, + "name": "Vad", + "county": "Neamt" + }, + { + "id": 9412, + "name": "Dulcesti", + "county": "Neamt" + }, + { + "id": 9413, + "name": "Bozienii de Sus", + "county": "Neamt" + }, + { + "id": 9414, + "name": "Britcani", + "county": "Neamt" + }, + { + "id": 9415, + "name": "Carlig", + "county": "Neamt" + }, + { + "id": 9416, + "name": "Corhana", + "county": "Neamt" + }, + { + "id": 9417, + "name": "Poiana", + "county": "Neamt" + }, + { + "id": 9418, + "name": "Rosiori", + "county": "Neamt" + }, + { + "id": 9419, + "name": "Ruginoasa", + "county": "Neamt" + }, + { + "id": 9420, + "name": "Farcasa", + "county": "Neamt" + }, + { + "id": 9421, + "name": "Busmei", + "county": "Neamt" + }, + { + "id": 9422, + "name": "Frumosu", + "county": "Neamt" + }, + { + "id": 9423, + "name": "Popesti", + "county": "Neamt" + }, + { + "id": 9424, + "name": "Stejaru", + "county": "Neamt" + }, + { + "id": 9425, + "name": "Faurei", + "county": "Neamt" + }, + { + "id": 9426, + "name": "Budesti", + "county": "Neamt" + }, + { + "id": 9427, + "name": "Climesti", + "county": "Neamt" + }, + { + "id": 9428, + "name": "Micsunesti", + "county": "Neamt" + }, + { + "id": 9429, + "name": "Gheraesti", + "county": "Neamt" + }, + { + "id": 9430, + "name": "Gheraestii Noi", + "county": "Neamt" + }, + { + "id": 9431, + "name": "Tetcani", + "county": "Neamt" + }, + { + "id": 9432, + "name": "Girov", + "county": "Neamt" + }, + { + "id": 9433, + "name": "Balusesti", + "county": "Neamt" + }, + { + "id": 9434, + "name": "Botesti", + "county": "Neamt" + }, + { + "id": 9435, + "name": "Caciulesti", + "county": "Neamt" + }, + { + "id": 9436, + "name": "Danesti", + "county": "Neamt" + }, + { + "id": 9437, + "name": "Dochia", + "county": "Neamt" + }, + { + "id": 9438, + "name": "Doina", + "county": "Neamt" + }, + { + "id": 9439, + "name": "Gura Vaii", + "county": "Neamt" + }, + { + "id": 9440, + "name": "Popesti", + "county": "Neamt" + }, + { + "id": 9441, + "name": "Turturesti", + "county": "Neamt" + }, + { + "id": 9442, + "name": "Versesti", + "county": "Neamt" + }, + { + "id": 9443, + "name": "Garcina", + "county": "Neamt" + }, + { + "id": 9444, + "name": "Almas", + "county": "Neamt" + }, + { + "id": 9445, + "name": "Cuejdiu", + "county": "Neamt" + }, + { + "id": 9446, + "name": "Grinties", + "county": "Neamt" + }, + { + "id": 9447, + "name": "Bradu", + "county": "Neamt" + }, + { + "id": 9448, + "name": "Poiana", + "county": "Neamt" + }, + { + "id": 9449, + "name": "Grumazesti", + "county": "Neamt" + }, + { + "id": 9450, + "name": "Curechistea", + "county": "Neamt" + }, + { + "id": 9451, + "name": "Netezi", + "county": "Neamt" + }, + { + "id": 9452, + "name": "Topolita", + "county": "Neamt" + }, + { + "id": 9453, + "name": "Hangu", + "county": "Neamt" + }, + { + "id": 9454, + "name": "Buhalnita", + "county": "Neamt" + }, + { + "id": 9455, + "name": "Chiriteni", + "county": "Neamt" + }, + { + "id": 9456, + "name": "Grozavesti", + "county": "Neamt" + }, + { + "id": 9457, + "name": "Ruginesti", + "county": "Neamt" + }, + { + "id": 9458, + "name": "Icusesti", + "county": "Neamt" + }, + { + "id": 9459, + "name": "Balusesti", + "county": "Neamt" + }, + { + "id": 9460, + "name": "Batranesti", + "county": "Neamt" + }, + { + "id": 9461, + "name": "Chilii", + "county": "Neamt" + }, + { + "id": 9462, + "name": "Mesteacan", + "county": "Neamt" + }, + { + "id": 9463, + "name": "Rocna", + "county": "Neamt" + }, + { + "id": 9464, + "name": "Spiridonesti", + "county": "Neamt" + }, + { + "id": 9465, + "name": "Tabara", + "county": "Neamt" + }, + { + "id": 9466, + "name": "Ion Creanga", + "county": "Neamt" + }, + { + "id": 9467, + "name": "Averesti", + "county": "Neamt" + }, + { + "id": 9468, + "name": "Izvoru", + "county": "Neamt" + }, + { + "id": 9469, + "name": "Muncelu", + "county": "Neamt" + }, + { + "id": 9470, + "name": "Recea", + "county": "Neamt" + }, + { + "id": 9471, + "name": "Stejaru", + "county": "Neamt" + }, + { + "id": 9472, + "name": "Margineni", + "county": "Neamt" + }, + { + "id": 9473, + "name": "Hartesti", + "county": "Neamt" + }, + { + "id": 9474, + "name": "Hoisesti", + "county": "Neamt" + }, + { + "id": 9475, + "name": "Itrinesti", + "county": "Neamt" + }, + { + "id": 9476, + "name": "Moldoveni", + "county": "Neamt" + }, + { + "id": 9477, + "name": "Hociungi", + "county": "Neamt" + }, + { + "id": 9478, + "name": "Oniceni", + "county": "Neamt" + }, + { + "id": 9479, + "name": "Ciornei", + "county": "Neamt" + }, + { + "id": 9480, + "name": "Gorun", + "county": "Neamt" + }, + { + "id": 9481, + "name": "Linsesti", + "county": "Neamt" + }, + { + "id": 9482, + "name": "Lunca", + "county": "Neamt" + }, + { + "id": 9483, + "name": "Marmureni", + "county": "Neamt" + }, + { + "id": 9484, + "name": "Pietrosu", + "county": "Neamt" + }, + { + "id": 9485, + "name": "Poiana Humei", + "county": "Neamt" + }, + { + "id": 9486, + "name": "Pustieta", + "county": "Neamt" + }, + { + "id": 9487, + "name": "Solca", + "county": "Neamt" + }, + { + "id": 9488, + "name": "Valea Enei", + "county": "Neamt" + }, + { + "id": 9489, + "name": "Pastraveni", + "county": "Neamt" + }, + { + "id": 9490, + "name": "Lunca Moldovei", + "county": "Neamt" + }, + { + "id": 9491, + "name": "Radeni", + "county": "Neamt" + }, + { + "id": 9492, + "name": "Spiesti", + "county": "Neamt" + }, + { + "id": 9493, + "name": "Petricani", + "county": "Neamt" + }, + { + "id": 9494, + "name": "Boistea", + "county": "Neamt" + }, + { + "id": 9495, + "name": "Tarpesti", + "county": "Neamt" + }, + { + "id": 9496, + "name": "Tolici", + "county": "Neamt" + }, + { + "id": 9497, + "name": "Piatra Soimului", + "county": "Neamt" + }, + { + "id": 9498, + "name": "Luminis", + "county": "Neamt" + }, + { + "id": 9499, + "name": "Negulesti", + "county": "Neamt" + }, + { + "id": 9500, + "name": "Poieni", + "county": "Neamt" + }, + { + "id": 9501, + "name": "Pipirig", + "county": "Neamt" + }, + { + "id": 9502, + "name": "Boboiesti", + "county": "Neamt" + }, + { + "id": 9503, + "name": "Dolhesti", + "county": "Neamt" + }, + { + "id": 9504, + "name": "Leghin", + "county": "Neamt" + }, + { + "id": 9505, + "name": "Pataligeni", + "county": "Neamt" + }, + { + "id": 9506, + "name": "Pluton", + "county": "Neamt" + }, + { + "id": 9507, + "name": "Stanca", + "county": "Neamt" + }, + { + "id": 9508, + "name": "Pangarati", + "county": "Neamt" + }, + { + "id": 9509, + "name": "Oantu", + "county": "Neamt" + }, + { + "id": 9510, + "name": "Pangaracior", + "county": "Neamt" + }, + { + "id": 9511, + "name": "Poiana", + "county": "Neamt" + }, + { + "id": 9512, + "name": "Preluca", + "county": "Neamt" + }, + { + "id": 9513, + "name": "Stejaru", + "county": "Neamt" + }, + { + "id": 9514, + "name": "Podoleni", + "county": "Neamt" + }, + { + "id": 9515, + "name": "Negritesti", + "county": "Neamt" + }, + { + "id": 9516, + "name": "Poienari", + "county": "Neamt" + }, + { + "id": 9517, + "name": "Bunghi", + "county": "Neamt" + }, + { + "id": 9518, + "name": "Ciurea", + "county": "Neamt" + }, + { + "id": 9519, + "name": "Holm", + "county": "Neamt" + }, + { + "id": 9520, + "name": "Patricheni", + "county": "Neamt" + }, + { + "id": 9521, + "name": "Pancesti", + "county": "Neamt" + }, + { + "id": 9522, + "name": "Sacaleni", + "county": "Neamt" + }, + { + "id": 9523, + "name": "Talpalai", + "county": "Neamt" + }, + { + "id": 9524, + "name": "Poiana Teiului", + "county": "Neamt" + }, + { + "id": 9525, + "name": "Calugareni", + "county": "Neamt" + }, + { + "id": 9526, + "name": "Dreptu", + "county": "Neamt" + }, + { + "id": 9527, + "name": "Galu", + "county": "Neamt" + }, + { + "id": 9528, + "name": "Petru Voda", + "county": "Neamt" + }, + { + "id": 9529, + "name": "Paraul Fagului", + "county": "Neamt" + }, + { + "id": 9530, + "name": "Poiana Largului", + "county": "Neamt" + }, + { + "id": 9531, + "name": "Roseni", + "county": "Neamt" + }, + { + "id": 9532, + "name": "Ruseni", + "county": "Neamt" + }, + { + "id": 9533, + "name": "Savinesti", + "county": "Neamt" + }, + { + "id": 9534, + "name": "Topoliceni", + "county": "Neamt" + }, + { + "id": 9535, + "name": "Raucesti", + "county": "Neamt" + }, + { + "id": 9536, + "name": "Oglinzi", + "county": "Neamt" + }, + { + "id": 9537, + "name": "Savesti", + "county": "Neamt" + }, + { + "id": 9538, + "name": "Ungheni", + "county": "Neamt" + }, + { + "id": 9539, + "name": "Razboienii de Jos", + "county": "Neamt" + }, + { + "id": 9540, + "name": "Borseni", + "county": "Neamt" + }, + { + "id": 9541, + "name": "Razboieni", + "county": "Neamt" + }, + { + "id": 9542, + "name": "Valea Alba", + "county": "Neamt" + }, + { + "id": 9543, + "name": "Valea Mare", + "county": "Neamt" + }, + { + "id": 9544, + "name": "Rediu", + "county": "Neamt" + }, + { + "id": 9545, + "name": "Betesti", + "county": "Neamt" + }, + { + "id": 9546, + "name": "Poloboc", + "county": "Neamt" + }, + { + "id": 9547, + "name": "Socea", + "county": "Neamt" + }, + { + "id": 9548, + "name": "Romani", + "county": "Neamt" + }, + { + "id": 9549, + "name": "Gosmani", + "county": "Neamt" + }, + { + "id": 9550, + "name": "Silistea", + "county": "Neamt" + }, + { + "id": 9551, + "name": "Roznov", + "county": "Neamt" + }, + { + "id": 9552, + "name": "Chintinici", + "county": "Neamt" + }, + { + "id": 9553, + "name": "Slobozia", + "county": "Neamt" + }, + { + "id": 9554, + "name": "Sagna", + "county": "Neamt" + }, + { + "id": 9555, + "name": "Gadinti", + "county": "Neamt" + }, + { + "id": 9556, + "name": "Lutca", + "county": "Neamt" + }, + { + "id": 9557, + "name": "Vulpasesti", + "county": "Neamt" + }, + { + "id": 9558, + "name": "Sabaoani", + "county": "Neamt" + }, + { + "id": 9559, + "name": "Traian", + "county": "Neamt" + }, + { + "id": 9560, + "name": "Secuieni", + "county": "Neamt" + }, + { + "id": 9561, + "name": "Basta", + "county": "Neamt" + }, + { + "id": 9562, + "name": "Barjoveni", + "county": "Neamt" + }, + { + "id": 9563, + "name": "Bogzesti", + "county": "Neamt" + }, + { + "id": 9564, + "name": "Butnaresti", + "county": "Neamt" + }, + { + "id": 9565, + "name": "Giulesti", + "county": "Neamt" + }, + { + "id": 9566, + "name": "Prajesti", + "county": "Neamt" + }, + { + "id": 9567, + "name": "Secuienii Noi", + "county": "Neamt" + }, + { + "id": 9568, + "name": "Uncesti", + "county": "Neamt" + }, + { + "id": 9569, + "name": "Stanita", + "county": "Neamt" + }, + { + "id": 9570, + "name": "Chicerea", + "county": "Neamt" + }, + { + "id": 9571, + "name": "Ghidion", + "county": "Neamt" + }, + { + "id": 9572, + "name": "Poienile Oancei", + "county": "Neamt" + }, + { + "id": 9573, + "name": "Todireni", + "county": "Neamt" + }, + { + "id": 9574, + "name": "Veja", + "county": "Neamt" + }, + { + "id": 9575, + "name": "Vladnicele", + "county": "Neamt" + }, + { + "id": 9576, + "name": "Stefan cel Mare", + "county": "Neamt" + }, + { + "id": 9577, + "name": "Bordea", + "county": "Neamt" + }, + { + "id": 9578, + "name": "Carligi", + "county": "Neamt" + }, + { + "id": 9579, + "name": "Deleni", + "county": "Neamt" + }, + { + "id": 9580, + "name": "Dusesti", + "county": "Neamt" + }, + { + "id": 9581, + "name": "Ghigoiesti", + "county": "Neamt" + }, + { + "id": 9582, + "name": "Soci", + "county": "Neamt" + }, + { + "id": 9583, + "name": "Tarcau", + "county": "Neamt" + }, + { + "id": 9584, + "name": "Ardeluta", + "county": "Neamt" + }, + { + "id": 9585, + "name": "Brates", + "county": "Neamt" + }, + { + "id": 9586, + "name": "Cazaci", + "county": "Neamt" + }, + { + "id": 9587, + "name": "Schitu Tarcau", + "county": "Neamt" + }, + { + "id": 9588, + "name": "Straja", + "county": "Neamt" + }, + { + "id": 9589, + "name": "Tasca", + "county": "Neamt" + }, + { + "id": 9590, + "name": "Hamzoaia", + "county": "Neamt" + }, + { + "id": 9591, + "name": "Neagra", + "county": "Neamt" + }, + { + "id": 9592, + "name": "Ticos-Floarea", + "county": "Neamt" + }, + { + "id": 9593, + "name": "Tazlau", + "county": "Neamt" + }, + { + "id": 9594, + "name": "Tamaseni", + "county": "Neamt" + }, + { + "id": 9595, + "name": "Adjudeni", + "county": "Neamt" + }, + { + "id": 9596, + "name": "Timisesti", + "county": "Neamt" + }, + { + "id": 9597, + "name": "Dumbrava", + "county": "Neamt" + }, + { + "id": 9598, + "name": "Plaiesu", + "county": "Neamt" + }, + { + "id": 9599, + "name": "Preutesti", + "county": "Neamt" + }, + { + "id": 9600, + "name": "Zvoranesti", + "county": "Neamt" + }, + { + "id": 9601, + "name": "Trifesti", + "county": "Neamt" + }, + { + "id": 9602, + "name": "Miron Costin", + "county": "Neamt" + }, + { + "id": 9603, + "name": "Tupilati", + "county": "Neamt" + }, + { + "id": 9604, + "name": "Aramoaia", + "county": "Neamt" + }, + { + "id": 9605, + "name": "Hanul Ancutei", + "county": "Neamt" + }, + { + "id": 9606, + "name": "Totoiesti", + "county": "Neamt" + }, + { + "id": 9607, + "name": "Tibucani", + "county": "Neamt" + }, + { + "id": 9608, + "name": "Davideni", + "county": "Neamt" + }, + { + "id": 9609, + "name": "Tibucanii de Jos", + "county": "Neamt" + }, + { + "id": 9610, + "name": "Urecheni", + "county": "Neamt" + }, + { + "id": 9611, + "name": "Ingaresti", + "county": "Neamt" + }, + { + "id": 9612, + "name": "Plugari", + "county": "Neamt" + }, + { + "id": 9613, + "name": "Valea Ursului", + "county": "Neamt" + }, + { + "id": 9614, + "name": "Bucium", + "county": "Neamt" + }, + { + "id": 9615, + "name": "Giurgeni", + "county": "Neamt" + }, + { + "id": 9616, + "name": "Muncelu de Jos", + "county": "Neamt" + }, + { + "id": 9617, + "name": "Viisoara", + "county": "Neamt" + }, + { + "id": 9618, + "name": "Agarcia", + "county": "Neamt" + }, + { + "id": 9619, + "name": "Bisericani", + "county": "Neamt" + }, + { + "id": 9620, + "name": "Bistrita", + "county": "Neamt" + }, + { + "id": 9621, + "name": "Scaricica", + "county": "Neamt" + }, + { + "id": 9622, + "name": "Vaduri", + "county": "Neamt" + }, + { + "id": 9623, + "name": "Vadurele", + "county": "Neamt" + }, + { + "id": 9624, + "name": "Vanatori-Neamt", + "county": "Neamt" + }, + { + "id": 9625, + "name": "Lunca", + "county": "Neamt" + }, + { + "id": 9626, + "name": "Manastirea Neamt", + "county": "Neamt" + }, + { + "id": 9627, + "name": "Nemtisor", + "county": "Neamt" + }, + { + "id": 9628, + "name": "Zanesti", + "county": "Neamt" + }, + { + "id": 9629, + "name": "Traian", + "county": "Neamt" + }, + { + "id": 9630, + "name": "Slatina", + "county": "Olt" + }, + { + "id": 9631, + "name": "Cireasov", + "county": "Olt" + }, + { + "id": 9632, + "name": "Slatioara", + "county": "Olt" + }, + { + "id": 9633, + "name": "Salcia", + "county": "Olt" + }, + { + "id": 9634, + "name": "Bals", + "county": "Olt" + }, + { + "id": 9635, + "name": "Corbeni", + "county": "Olt" + }, + { + "id": 9636, + "name": "Romana", + "county": "Olt" + }, + { + "id": 9637, + "name": "Teis", + "county": "Olt" + }, + { + "id": 9638, + "name": "Caracal", + "county": "Olt" + }, + { + "id": 9639, + "name": "Draghiceni", + "county": "Olt" + }, + { + "id": 9640, + "name": "Grozavesti", + "county": "Olt" + }, + { + "id": 9641, + "name": "Liiceni", + "county": "Olt" + }, + { + "id": 9642, + "name": "Corabia", + "county": "Olt" + }, + { + "id": 9643, + "name": "Tudor Vladimirescu", + "county": "Olt" + }, + { + "id": 9644, + "name": "Vartopu", + "county": "Olt" + }, + { + "id": 9645, + "name": "Garcov", + "county": "Olt" + }, + { + "id": 9646, + "name": "Ursa", + "county": "Olt" + }, + { + "id": 9647, + "name": "Draganesti-Olt", + "county": "Olt" + }, + { + "id": 9648, + "name": "Comani", + "county": "Olt" + }, + { + "id": 9649, + "name": "Babiciu", + "county": "Olt" + }, + { + "id": 9650, + "name": "Baleasa", + "county": "Olt" + }, + { + "id": 9651, + "name": "Baldovinesti", + "county": "Olt" + }, + { + "id": 9652, + "name": "Brosteni", + "county": "Olt" + }, + { + "id": 9653, + "name": "Damburile", + "county": "Olt" + }, + { + "id": 9654, + "name": "Gavanesti", + "county": "Olt" + }, + { + "id": 9655, + "name": "Gubandru", + "county": "Olt" + }, + { + "id": 9656, + "name": "Pietris", + "county": "Olt" + }, + { + "id": 9657, + "name": "Barastii de Vede", + "county": "Olt" + }, + { + "id": 9658, + "name": "Barastii de Cepturi", + "county": "Olt" + }, + { + "id": 9659, + "name": "Boroesti", + "county": "Olt" + }, + { + "id": 9660, + "name": "Ciocanesti", + "county": "Olt" + }, + { + "id": 9661, + "name": "Lazaresti", + "county": "Olt" + }, + { + "id": 9662, + "name": "Mereni", + "county": "Olt" + }, + { + "id": 9663, + "name": "Motoesti", + "county": "Olt" + }, + { + "id": 9664, + "name": "Popesti", + "county": "Olt" + }, + { + "id": 9665, + "name": "Barza", + "county": "Olt" + }, + { + "id": 9666, + "name": "Branet", + "county": "Olt" + }, + { + "id": 9667, + "name": "Bobicesti", + "county": "Olt" + }, + { + "id": 9668, + "name": "Bechet", + "county": "Olt" + }, + { + "id": 9669, + "name": "Belgun", + "county": "Olt" + }, + { + "id": 9670, + "name": "Chintesti", + "county": "Olt" + }, + { + "id": 9671, + "name": "Comanesti", + "county": "Olt" + }, + { + "id": 9672, + "name": "Govora", + "county": "Olt" + }, + { + "id": 9673, + "name": "Leotesti", + "county": "Olt" + }, + { + "id": 9674, + "name": "Mirila", + "county": "Olt" + }, + { + "id": 9675, + "name": "Brastavatu", + "county": "Olt" + }, + { + "id": 9676, + "name": "Crusovu", + "county": "Olt" + }, + { + "id": 9677, + "name": "Brebeni", + "county": "Olt" + }, + { + "id": 9678, + "name": "Teiusu", + "county": "Olt" + }, + { + "id": 9679, + "name": "Brancoveni", + "county": "Olt" + }, + { + "id": 9680, + "name": "Margheni", + "county": "Olt" + }, + { + "id": 9681, + "name": "Ociogi", + "county": "Olt" + }, + { + "id": 9682, + "name": "Valeni", + "county": "Olt" + }, + { + "id": 9683, + "name": "Bucinisu", + "county": "Olt" + }, + { + "id": 9684, + "name": "Bucinisu Mic", + "county": "Olt" + }, + { + "id": 9685, + "name": "Cezieni", + "county": "Olt" + }, + { + "id": 9686, + "name": "Bondrea", + "county": "Olt" + }, + { + "id": 9687, + "name": "Corlatesti", + "county": "Olt" + }, + { + "id": 9688, + "name": "Cilieni", + "county": "Olt" + }, + { + "id": 9689, + "name": "Carlogani", + "county": "Olt" + }, + { + "id": 9690, + "name": "Beculesti", + "county": "Olt" + }, + { + "id": 9691, + "name": "Cepari", + "county": "Olt" + }, + { + "id": 9692, + "name": "Scorbura", + "county": "Olt" + }, + { + "id": 9693, + "name": "Stupina", + "county": "Olt" + }, + { + "id": 9694, + "name": "Colonesti", + "county": "Olt" + }, + { + "id": 9695, + "name": "Barasti", + "county": "Olt" + }, + { + "id": 9696, + "name": "Batareni", + "county": "Olt" + }, + { + "id": 9697, + "name": "Chelbesti", + "county": "Olt" + }, + { + "id": 9698, + "name": "Carstani", + "county": "Olt" + }, + { + "id": 9699, + "name": "Guesti", + "county": "Olt" + }, + { + "id": 9700, + "name": "Maruntei", + "county": "Olt" + }, + { + "id": 9701, + "name": "Navargeni", + "county": "Olt" + }, + { + "id": 9702, + "name": "Vlaici", + "county": "Olt" + }, + { + "id": 9703, + "name": "Corbu", + "county": "Olt" + }, + { + "id": 9704, + "name": "Burdulesti", + "county": "Olt" + }, + { + "id": 9705, + "name": "Buzesti", + "county": "Olt" + }, + { + "id": 9706, + "name": "Ciuresti", + "county": "Olt" + }, + { + "id": 9707, + "name": "Milcoveni", + "county": "Olt" + }, + { + "id": 9708, + "name": "Coteana", + "county": "Olt" + }, + { + "id": 9709, + "name": "Crampoia", + "county": "Olt" + }, + { + "id": 9710, + "name": "Buta", + "county": "Olt" + }, + { + "id": 9711, + "name": "Curtisoara", + "county": "Olt" + }, + { + "id": 9712, + "name": "Dobrotinet", + "county": "Olt" + }, + { + "id": 9713, + "name": "Linia din Vale", + "county": "Olt" + }, + { + "id": 9714, + "name": "Pietrisu", + "county": "Olt" + }, + { + "id": 9715, + "name": "Proaspeti", + "county": "Olt" + }, + { + "id": 9716, + "name": "Raitiu", + "county": "Olt" + }, + { + "id": 9717, + "name": "Cungrea", + "county": "Olt" + }, + { + "id": 9718, + "name": "Cepesti", + "county": "Olt" + }, + { + "id": 9719, + "name": "Ibanesti", + "county": "Olt" + }, + { + "id": 9720, + "name": "Miesti", + "county": "Olt" + }, + { + "id": 9721, + "name": "Otestii de Jos", + "county": "Olt" + }, + { + "id": 9722, + "name": "Otestii de Sus", + "county": "Olt" + }, + { + "id": 9723, + "name": "Spataru", + "county": "Olt" + }, + { + "id": 9724, + "name": "Daneasa", + "county": "Olt" + }, + { + "id": 9725, + "name": "Berindei", + "county": "Olt" + }, + { + "id": 9726, + "name": "Cioflanu", + "county": "Olt" + }, + { + "id": 9727, + "name": "Pestra", + "county": "Olt" + }, + { + "id": 9728, + "name": "Zanoaga", + "county": "Olt" + }, + { + "id": 9729, + "name": "Deveselu", + "county": "Olt" + }, + { + "id": 9730, + "name": "Comanca", + "county": "Olt" + }, + { + "id": 9731, + "name": "Dobretu", + "county": "Olt" + }, + { + "id": 9732, + "name": "Curtisoara", + "county": "Olt" + }, + { + "id": 9733, + "name": "Horezu", + "county": "Olt" + }, + { + "id": 9734, + "name": "Dobrosloveni", + "county": "Olt" + }, + { + "id": 9735, + "name": "Frasinetu", + "county": "Olt" + }, + { + "id": 9736, + "name": "Potopinu", + "county": "Olt" + }, + { + "id": 9737, + "name": "Resca", + "county": "Olt" + }, + { + "id": 9738, + "name": "Rescuta", + "county": "Olt" + }, + { + "id": 9739, + "name": "Dobroteasa", + "county": "Olt" + }, + { + "id": 9740, + "name": "Batia", + "county": "Olt" + }, + { + "id": 9741, + "name": "Campu Mare", + "county": "Olt" + }, + { + "id": 9742, + "name": "Vulpesti", + "county": "Olt" + }, + { + "id": 9743, + "name": "Osica de Jos", + "county": "Olt" + }, + { + "id": 9744, + "name": "Bobu", + "county": "Olt" + }, + { + "id": 9745, + "name": "Chilii", + "county": "Olt" + }, + { + "id": 9746, + "name": "Dobrun", + "county": "Olt" + }, + { + "id": 9747, + "name": "Rosienii Mari", + "county": "Olt" + }, + { + "id": 9748, + "name": "Rosienii Mici", + "county": "Olt" + }, + { + "id": 9749, + "name": "Ulmet", + "county": "Olt" + }, + { + "id": 9750, + "name": "Fagetelu", + "county": "Olt" + }, + { + "id": 9751, + "name": "Bagesti", + "county": "Olt" + }, + { + "id": 9752, + "name": "Chilia", + "county": "Olt" + }, + { + "id": 9753, + "name": "Gruiu", + "county": "Olt" + }, + { + "id": 9754, + "name": "Isaci", + "county": "Olt" + }, + { + "id": 9755, + "name": "Pielcani", + "county": "Olt" + }, + { + "id": 9756, + "name": "Falcoiu", + "county": "Olt" + }, + { + "id": 9757, + "name": "Cioroiasu", + "county": "Olt" + }, + { + "id": 9758, + "name": "Cioroiu", + "county": "Olt" + }, + { + "id": 9759, + "name": "Farcasele", + "county": "Olt" + }, + { + "id": 9760, + "name": "Farcasu de Jos", + "county": "Olt" + }, + { + "id": 9761, + "name": "Ghimpati", + "county": "Olt" + }, + { + "id": 9762, + "name": "Hotarani", + "county": "Olt" + }, + { + "id": 9763, + "name": "Ganeasa", + "county": "Olt" + }, + { + "id": 9764, + "name": "Dranovatu", + "county": "Olt" + }, + { + "id": 9765, + "name": "Gradistea", + "county": "Olt" + }, + { + "id": 9766, + "name": "Izvoru", + "county": "Olt" + }, + { + "id": 9767, + "name": "Oltisoru", + "county": "Olt" + }, + { + "id": 9768, + "name": "Giuvarasti", + "county": "Olt" + }, + { + "id": 9769, + "name": "Gostavatu", + "county": "Olt" + }, + { + "id": 9770, + "name": "Slaveni", + "county": "Olt" + }, + { + "id": 9771, + "name": "Gradinari", + "county": "Olt" + }, + { + "id": 9772, + "name": "Petculesti", + "county": "Olt" + }, + { + "id": 9773, + "name": "Runcu Mare", + "county": "Olt" + }, + { + "id": 9774, + "name": "Satu Nou", + "county": "Olt" + }, + { + "id": 9775, + "name": "Grojdibodu", + "county": "Olt" + }, + { + "id": 9776, + "name": "Hotaru", + "county": "Olt" + }, + { + "id": 9777, + "name": "Ianca", + "county": "Olt" + }, + { + "id": 9778, + "name": "Potelu", + "county": "Olt" + }, + { + "id": 9779, + "name": "Iancu Jianu", + "county": "Olt" + }, + { + "id": 9780, + "name": "Dobriceni", + "county": "Olt" + }, + { + "id": 9781, + "name": "Preotesti", + "county": "Olt" + }, + { + "id": 9782, + "name": "Icoana", + "county": "Olt" + }, + { + "id": 9783, + "name": "Floru", + "county": "Olt" + }, + { + "id": 9784, + "name": "Ursoaia", + "county": "Olt" + }, + { + "id": 9785, + "name": "Izbiceni", + "county": "Olt" + }, + { + "id": 9786, + "name": "Izvoarele", + "county": "Olt" + }, + { + "id": 9787, + "name": "Alimanesti", + "county": "Olt" + }, + { + "id": 9788, + "name": "Leleasca", + "county": "Olt" + }, + { + "id": 9789, + "name": "Afumati", + "county": "Olt" + }, + { + "id": 9790, + "name": "Greeresti", + "county": "Olt" + }, + { + "id": 9791, + "name": "Mierlicesti", + "county": "Olt" + }, + { + "id": 9792, + "name": "Tonesti", + "county": "Olt" + }, + { + "id": 9793, + "name": "Tufaru", + "county": "Olt" + }, + { + "id": 9794, + "name": "Ursi", + "county": "Olt" + }, + { + "id": 9795, + "name": "Maruntei", + "county": "Olt" + }, + { + "id": 9796, + "name": "Balanesti", + "county": "Olt" + }, + { + "id": 9797, + "name": "Malu Rosu", + "county": "Olt" + }, + { + "id": 9798, + "name": "Mihaesti", + "county": "Olt" + }, + { + "id": 9799, + "name": "Busca", + "county": "Olt" + }, + { + "id": 9800, + "name": "Ulmi", + "county": "Olt" + }, + { + "id": 9801, + "name": "Ipotesti", + "county": "Olt" + }, + { + "id": 9802, + "name": "Milcovu din Deal", + "county": "Olt" + }, + { + "id": 9803, + "name": "Milcovu din Vale", + "county": "Olt" + }, + { + "id": 9804, + "name": "Stejaru", + "county": "Olt" + }, + { + "id": 9805, + "name": "Morunglav", + "county": "Olt" + }, + { + "id": 9806, + "name": "Barasti", + "county": "Olt" + }, + { + "id": 9807, + "name": "Ghiosani", + "county": "Olt" + }, + { + "id": 9808, + "name": "Morunesti", + "county": "Olt" + }, + { + "id": 9809, + "name": "Poiana Mare", + "county": "Olt" + }, + { + "id": 9810, + "name": "Movileni", + "county": "Olt" + }, + { + "id": 9811, + "name": "Bacea", + "county": "Olt" + }, + { + "id": 9812, + "name": "Nicolae Titulescu", + "county": "Olt" + }, + { + "id": 9813, + "name": "Ghimpeteni", + "county": "Olt" + }, + { + "id": 9814, + "name": "Ghimpetenii Noi", + "county": "Olt" + }, + { + "id": 9815, + "name": "Obarsia", + "county": "Olt" + }, + { + "id": 9816, + "name": "Campu Parului", + "county": "Olt" + }, + { + "id": 9817, + "name": "Coteni", + "county": "Olt" + }, + { + "id": 9818, + "name": "Obarsia Noua", + "county": "Olt" + }, + { + "id": 9819, + "name": "Tabonu", + "county": "Olt" + }, + { + "id": 9820, + "name": "Oboga", + "county": "Olt" + }, + { + "id": 9821, + "name": "Calui", + "county": "Olt" + }, + { + "id": 9822, + "name": "Gura Caluiu", + "county": "Olt" + }, + { + "id": 9823, + "name": "Oporelu", + "county": "Olt" + }, + { + "id": 9824, + "name": "Beria de Jos", + "county": "Olt" + }, + { + "id": 9825, + "name": "Beria de Sus", + "county": "Olt" + }, + { + "id": 9826, + "name": "Radesti", + "county": "Olt" + }, + { + "id": 9827, + "name": "Optasi", + "county": "Olt" + }, + { + "id": 9828, + "name": "Vitanesti", + "county": "Olt" + }, + { + "id": 9829, + "name": "Orlea", + "county": "Olt" + }, + { + "id": 9830, + "name": "Gura Padinii", + "county": "Olt" + }, + { + "id": 9831, + "name": "Orlea Noua", + "county": "Olt" + }, + { + "id": 9832, + "name": "Satu Nou", + "county": "Olt" + }, + { + "id": 9833, + "name": "Vladuleni", + "county": "Olt" + }, + { + "id": 9834, + "name": "Greci", + "county": "Olt" + }, + { + "id": 9835, + "name": "Osica de Sus", + "county": "Olt" + }, + { + "id": 9836, + "name": "Ostrov", + "county": "Olt" + }, + { + "id": 9837, + "name": "Peretu", + "county": "Olt" + }, + { + "id": 9838, + "name": "Tomeni", + "county": "Olt" + }, + { + "id": 9839, + "name": "Perieti", + "county": "Olt" + }, + { + "id": 9840, + "name": "Balteni", + "county": "Olt" + }, + { + "id": 9841, + "name": "Magura", + "county": "Olt" + }, + { + "id": 9842, + "name": "Mierlestii de Sus", + "county": "Olt" + }, + { + "id": 9843, + "name": "Piatra-Olt", + "county": "Olt" + }, + { + "id": 9844, + "name": "Bistrita Noua", + "county": "Olt" + }, + { + "id": 9845, + "name": "Criva de Jos", + "county": "Olt" + }, + { + "id": 9846, + "name": "Criva de Sus", + "county": "Olt" + }, + { + "id": 9847, + "name": "Enosesti", + "county": "Olt" + }, + { + "id": 9848, + "name": "Piatra", + "county": "Olt" + }, + { + "id": 9849, + "name": "Pirscoveni", + "county": "Olt" + }, + { + "id": 9850, + "name": "Butoi", + "county": "Olt" + }, + { + "id": 9851, + "name": "Olari", + "county": "Olt" + }, + { + "id": 9852, + "name": "Soparlita", + "county": "Olt" + }, + { + "id": 9853, + "name": "Plesoiu", + "county": "Olt" + }, + { + "id": 9854, + "name": "Arcesti", + "county": "Olt" + }, + { + "id": 9855, + "name": "Arcesti Cot", + "county": "Olt" + }, + { + "id": 9856, + "name": "Cocorasti", + "county": "Olt" + }, + { + "id": 9857, + "name": "Doba", + "county": "Olt" + }, + { + "id": 9858, + "name": "Schitu din Deal", + "county": "Olt" + }, + { + "id": 9859, + "name": "Schitu din Vale", + "county": "Olt" + }, + { + "id": 9860, + "name": "Poboru", + "county": "Olt" + }, + { + "id": 9861, + "name": "Albesti", + "county": "Olt" + }, + { + "id": 9862, + "name": "Cornatelu", + "county": "Olt" + }, + { + "id": 9863, + "name": "Creti", + "county": "Olt" + }, + { + "id": 9864, + "name": "Seaca", + "county": "Olt" + }, + { + "id": 9865, + "name": "Surpeni", + "county": "Olt" + }, + { + "id": 9866, + "name": "Potcoava", + "county": "Olt" + }, + { + "id": 9867, + "name": "Potcoava Falcoeni", + "county": "Olt" + }, + { + "id": 9868, + "name": "Sinesti", + "county": "Olt" + }, + { + "id": 9869, + "name": "Trufinesti", + "county": "Olt" + }, + { + "id": 9870, + "name": "Valea Merilor", + "county": "Olt" + }, + { + "id": 9871, + "name": "Priseaca", + "county": "Olt" + }, + { + "id": 9872, + "name": "Buicesti", + "county": "Olt" + }, + { + "id": 9873, + "name": "Saltanesti", + "county": "Olt" + }, + { + "id": 9874, + "name": "Radomiresti", + "county": "Olt" + }, + { + "id": 9875, + "name": "Calinesti", + "county": "Olt" + }, + { + "id": 9876, + "name": "Craciunei", + "county": "Olt" + }, + { + "id": 9877, + "name": "Poiana", + "county": "Olt" + }, + { + "id": 9878, + "name": "Redea", + "county": "Olt" + }, + { + "id": 9879, + "name": "Redisoara", + "county": "Olt" + }, + { + "id": 9880, + "name": "Valea Soarelui", + "county": "Olt" + }, + { + "id": 9881, + "name": "Rotunda", + "county": "Olt" + }, + { + "id": 9882, + "name": "Rusanesti", + "county": "Olt" + }, + { + "id": 9883, + "name": "Jieni", + "county": "Olt" + }, + { + "id": 9884, + "name": "Scarisoara", + "county": "Olt" + }, + { + "id": 9885, + "name": "Plaviceni", + "county": "Olt" + }, + { + "id": 9886, + "name": "Rudari", + "county": "Olt" + }, + { + "id": 9887, + "name": "Schitu", + "county": "Olt" + }, + { + "id": 9888, + "name": "Catanele", + "county": "Olt" + }, + { + "id": 9889, + "name": "Greci", + "county": "Olt" + }, + { + "id": 9890, + "name": "Lisa", + "county": "Olt" + }, + { + "id": 9891, + "name": "Mosteni", + "county": "Olt" + }, + { + "id": 9892, + "name": "Scornicesti", + "county": "Olt" + }, + { + "id": 9893, + "name": "Baltati", + "county": "Olt" + }, + { + "id": 9894, + "name": "Bircii", + "county": "Olt" + }, + { + "id": 9895, + "name": "Chiteasca", + "county": "Olt" + }, + { + "id": 9896, + "name": "Constantinesti", + "county": "Olt" + }, + { + "id": 9897, + "name": "Jitaru", + "county": "Olt" + }, + { + "id": 9898, + "name": "Margineni Slobozia", + "county": "Olt" + }, + { + "id": 9899, + "name": "Mihailesti Popesti", + "county": "Olt" + }, + { + "id": 9900, + "name": "Mogosesti", + "county": "Olt" + }, + { + "id": 9901, + "name": "Negreni", + "county": "Olt" + }, + { + "id": 9902, + "name": "Piscani", + "county": "Olt" + }, + { + "id": 9903, + "name": "Rusciori", + "county": "Olt" + }, + { + "id": 9904, + "name": "Suica", + "county": "Olt" + }, + { + "id": 9905, + "name": "Teius", + "county": "Olt" + }, + { + "id": 9906, + "name": "Seaca", + "county": "Olt" + }, + { + "id": 9907, + "name": "Samburesti", + "county": "Olt" + }, + { + "id": 9908, + "name": "Cerbeni", + "county": "Olt" + }, + { + "id": 9909, + "name": "Ionicesti", + "county": "Olt" + }, + { + "id": 9910, + "name": "Launele", + "county": "Olt" + }, + { + "id": 9911, + "name": "Manulesti", + "county": "Olt" + }, + { + "id": 9912, + "name": "Stanuleasa", + "county": "Olt" + }, + { + "id": 9913, + "name": "Tonesti", + "county": "Olt" + }, + { + "id": 9914, + "name": "Alunisu", + "county": "Olt" + }, + { + "id": 9915, + "name": "Cuza Voda", + "county": "Olt" + }, + { + "id": 9916, + "name": "Davidesti", + "county": "Olt" + }, + { + "id": 9917, + "name": "Optasani", + "county": "Olt" + }, + { + "id": 9918, + "name": "Profa", + "county": "Olt" + }, + { + "id": 9919, + "name": "Spineni", + "county": "Olt" + }, + { + "id": 9920, + "name": "Vineti", + "county": "Olt" + }, + { + "id": 9921, + "name": "Sprancenata", + "county": "Olt" + }, + { + "id": 9922, + "name": "Barsestii de Sus", + "county": "Olt" + }, + { + "id": 9923, + "name": "Frunzaru", + "county": "Olt" + }, + { + "id": 9924, + "name": "Uria", + "county": "Olt" + }, + { + "id": 9925, + "name": "Stoenesti", + "county": "Olt" + }, + { + "id": 9926, + "name": "Stoicanesti", + "county": "Olt" + }, + { + "id": 9927, + "name": "Strejesti", + "county": "Olt" + }, + { + "id": 9928, + "name": "Colibasi", + "county": "Olt" + }, + { + "id": 9929, + "name": "Mamura", + "county": "Olt" + }, + { + "id": 9930, + "name": "Strejestii de Sus", + "county": "Olt" + }, + { + "id": 9931, + "name": "Studina", + "county": "Olt" + }, + { + "id": 9932, + "name": "Arvateasca", + "county": "Olt" + }, + { + "id": 9933, + "name": "Gradinile", + "county": "Olt" + }, + { + "id": 9934, + "name": "Plaviceanca", + "county": "Olt" + }, + { + "id": 9935, + "name": "Studinita", + "county": "Olt" + }, + { + "id": 9936, + "name": "Serbanesti", + "county": "Olt" + }, + { + "id": 9937, + "name": "Strugurelu", + "county": "Olt" + }, + { + "id": 9938, + "name": "Serbanestii de Sus", + "county": "Olt" + }, + { + "id": 9939, + "name": "Stefan cel Mare", + "county": "Olt" + }, + { + "id": 9940, + "name": "Ianca Noua", + "county": "Olt" + }, + { + "id": 9941, + "name": "Tatulesti", + "county": "Olt" + }, + { + "id": 9942, + "name": "Barbalai", + "county": "Olt" + }, + { + "id": 9943, + "name": "Lunca", + "county": "Olt" + }, + { + "id": 9944, + "name": "Magura", + "county": "Olt" + }, + { + "id": 9945, + "name": "Mircesti", + "county": "Olt" + }, + { + "id": 9946, + "name": "Momaiu", + "county": "Olt" + }, + { + "id": 9947, + "name": "Teslui", + "county": "Olt" + }, + { + "id": 9948, + "name": "Cherlestii din Deal", + "county": "Olt" + }, + { + "id": 9949, + "name": "Cherlestii Mosteni", + "county": "Olt" + }, + { + "id": 9950, + "name": "Comanita", + "county": "Olt" + }, + { + "id": 9951, + "name": "Corbu", + "county": "Olt" + }, + { + "id": 9952, + "name": "Deleni", + "county": "Olt" + }, + { + "id": 9953, + "name": "Schitu Deleni", + "county": "Olt" + }, + { + "id": 9954, + "name": "Tia Mare", + "county": "Olt" + }, + { + "id": 9955, + "name": "Doanca", + "county": "Olt" + }, + { + "id": 9956, + "name": "Potlogeni", + "county": "Olt" + }, + { + "id": 9957, + "name": "Topana", + "county": "Olt" + }, + { + "id": 9958, + "name": "Cioraca", + "county": "Olt" + }, + { + "id": 9959, + "name": "Candelesti", + "county": "Olt" + }, + { + "id": 9960, + "name": "Cojgarei", + "county": "Olt" + }, + { + "id": 9961, + "name": "Ungureni", + "county": "Olt" + }, + { + "id": 9962, + "name": "Traian", + "county": "Olt" + }, + { + "id": 9963, + "name": "Tufeni", + "county": "Olt" + }, + { + "id": 9964, + "name": "Barza", + "county": "Olt" + }, + { + "id": 9965, + "name": "Stoborasti", + "county": "Olt" + }, + { + "id": 9966, + "name": "Urzica", + "county": "Olt" + }, + { + "id": 9967, + "name": "Stavaru", + "county": "Olt" + }, + { + "id": 9968, + "name": "Valea Mare", + "county": "Olt" + }, + { + "id": 9969, + "name": "Barca", + "county": "Olt" + }, + { + "id": 9970, + "name": "Recea", + "county": "Olt" + }, + { + "id": 9971, + "name": "Turia", + "county": "Olt" + }, + { + "id": 9972, + "name": "Zorleasca", + "county": "Olt" + }, + { + "id": 9973, + "name": "Visina Noua", + "county": "Olt" + }, + { + "id": 9974, + "name": "Vadastra", + "county": "Olt" + }, + { + "id": 9975, + "name": "Vadastrita", + "county": "Olt" + }, + { + "id": 9976, + "name": "Valeni", + "county": "Olt" + }, + { + "id": 9977, + "name": "Mandra", + "county": "Olt" + }, + { + "id": 9978, + "name": "Popesti", + "county": "Olt" + }, + { + "id": 9979, + "name": "Tirisneag", + "county": "Olt" + }, + { + "id": 9980, + "name": "Verguleasa", + "county": "Olt" + }, + { + "id": 9981, + "name": "Cazanesti", + "county": "Olt" + }, + { + "id": 9982, + "name": "Cucueti", + "county": "Olt" + }, + { + "id": 9983, + "name": "Dumitresti", + "county": "Olt" + }, + { + "id": 9984, + "name": "Poganu", + "county": "Olt" + }, + { + "id": 9985, + "name": "Valea Fetei", + "county": "Olt" + }, + { + "id": 9986, + "name": "Vanesti", + "county": "Olt" + }, + { + "id": 9987, + "name": "Visina", + "county": "Olt" + }, + { + "id": 9988, + "name": "Vitomiresti", + "county": "Olt" + }, + { + "id": 9989, + "name": "Bulimanu", + "county": "Olt" + }, + { + "id": 9990, + "name": "Dejesti", + "county": "Olt" + }, + { + "id": 9991, + "name": "Donesti", + "county": "Olt" + }, + { + "id": 9992, + "name": "Stanuleasa", + "county": "Olt" + }, + { + "id": 9993, + "name": "Trepteni", + "county": "Olt" + }, + { + "id": 9994, + "name": "Valcele", + "county": "Olt" + }, + { + "id": 9995, + "name": "Barcanesti", + "county": "Olt" + }, + { + "id": 9996, + "name": "Valcelele de Sus", + "county": "Olt" + }, + { + "id": 9997, + "name": "Vladila", + "county": "Olt" + }, + { + "id": 9998, + "name": "Frasinet Gara", + "county": "Olt" + }, + { + "id": 9999, + "name": "Vladila Noua", + "county": "Olt" + }, + { + "id": 10000, + "name": "Voineasa", + "county": "Olt" + }, + { + "id": 10001, + "name": "Blaj", + "county": "Olt" + }, + { + "id": 10002, + "name": "Margaritesti", + "county": "Olt" + }, + { + "id": 10003, + "name": "Racovita", + "county": "Olt" + }, + { + "id": 10004, + "name": "Rusanestii de Sus", + "county": "Olt" + }, + { + "id": 10005, + "name": "Vulpeni", + "county": "Olt" + }, + { + "id": 10006, + "name": "Cotorbesti", + "county": "Olt" + }, + { + "id": 10007, + "name": "Gropsani", + "county": "Olt" + }, + { + "id": 10008, + "name": "Mardale", + "county": "Olt" + }, + { + "id": 10009, + "name": "Pescaresti", + "county": "Olt" + }, + { + "id": 10010, + "name": "Plopsorelu", + "county": "Olt" + }, + { + "id": 10011, + "name": "Prisaca", + "county": "Olt" + }, + { + "id": 10012, + "name": "Simniceni", + "county": "Olt" + }, + { + "id": 10013, + "name": "Tabaci", + "county": "Olt" + }, + { + "id": 10014, + "name": "Valea Satului", + "county": "Olt" + }, + { + "id": 10015, + "name": "Vulturesti", + "county": "Olt" + }, + { + "id": 10016, + "name": "Dienci", + "county": "Olt" + }, + { + "id": 10017, + "name": "Valea lui Alb", + "county": "Olt" + }, + { + "id": 10018, + "name": "Vlangaresti", + "county": "Olt" + }, + { + "id": 10019, + "name": "Ploiesti", + "county": "Prahova" + }, + { + "id": 10020, + "name": "Barcanesti", + "county": "Prahova" + }, + { + "id": 10021, + "name": "Ghighiu", + "county": "Prahova" + }, + { + "id": 10022, + "name": "Puscasi", + "county": "Prahova" + }, + { + "id": 10023, + "name": "Romanesti", + "county": "Prahova" + }, + { + "id": 10024, + "name": "Tatarani", + "county": "Prahova" + }, + { + "id": 10025, + "name": "Berceni", + "county": "Prahova" + }, + { + "id": 10026, + "name": "Cartierul Dambu", + "county": "Prahova" + }, + { + "id": 10027, + "name": "Catunu", + "county": "Prahova" + }, + { + "id": 10028, + "name": "Corlatesti", + "county": "Prahova" + }, + { + "id": 10029, + "name": "Moara Noua", + "county": "Prahova" + }, + { + "id": 10030, + "name": "Blejoi", + "county": "Prahova" + }, + { + "id": 10031, + "name": "Ploiestiori", + "county": "Prahova" + }, + { + "id": 10032, + "name": "Tantareni", + "county": "Prahova" + }, + { + "id": 10033, + "name": "Brazii de Sus", + "county": "Prahova" + }, + { + "id": 10034, + "name": "Batesti", + "county": "Prahova" + }, + { + "id": 10035, + "name": "Brazii de Jos", + "county": "Prahova" + }, + { + "id": 10036, + "name": "Negoiesti", + "county": "Prahova" + }, + { + "id": 10037, + "name": "Popesti", + "county": "Prahova" + }, + { + "id": 10038, + "name": "Stejaru", + "county": "Prahova" + }, + { + "id": 10039, + "name": "Bucov", + "county": "Prahova" + }, + { + "id": 10040, + "name": "Bighilin", + "county": "Prahova" + }, + { + "id": 10041, + "name": "Chitorani", + "county": "Prahova" + }, + { + "id": 10042, + "name": "Pleasa", + "county": "Prahova" + }, + { + "id": 10043, + "name": "Valea Orlei", + "county": "Prahova" + }, + { + "id": 10044, + "name": "Paulesti", + "county": "Prahova" + }, + { + "id": 10045, + "name": "Cocosesti", + "county": "Prahova" + }, + { + "id": 10046, + "name": "Gageni", + "county": "Prahova" + }, + { + "id": 10047, + "name": "Paulestii Noi", + "county": "Prahova" + }, + { + "id": 10048, + "name": "Strejnicu", + "county": "Prahova" + }, + { + "id": 10049, + "name": "Stancesti", + "county": "Prahova" + }, + { + "id": 10050, + "name": "Targsoru Vechi", + "county": "Prahova" + }, + { + "id": 10051, + "name": "Zahanaua", + "county": "Prahova" + }, + { + "id": 10052, + "name": "Azuga", + "county": "Prahova" + }, + { + "id": 10053, + "name": "Baicoi", + "county": "Prahova" + }, + { + "id": 10054, + "name": "Dambu", + "county": "Prahova" + }, + { + "id": 10055, + "name": "Liliesti", + "county": "Prahova" + }, + { + "id": 10056, + "name": "Schela", + "county": "Prahova" + }, + { + "id": 10057, + "name": "Tufeni", + "county": "Prahova" + }, + { + "id": 10058, + "name": "Tintea", + "county": "Prahova" + }, + { + "id": 10059, + "name": "Boldesti-Scaeni", + "county": "Prahova" + }, + { + "id": 10060, + "name": "Seciu", + "county": "Prahova" + }, + { + "id": 10061, + "name": "Breaza de Jos", + "county": "Prahova" + }, + { + "id": 10062, + "name": "Breaza de Sus", + "county": "Prahova" + }, + { + "id": 10063, + "name": "Frasinet", + "county": "Prahova" + }, + { + "id": 10064, + "name": "Irimesti", + "county": "Prahova" + }, + { + "id": 10065, + "name": "Nistoresti", + "county": "Prahova" + }, + { + "id": 10066, + "name": "Podu Corbului", + "county": "Prahova" + }, + { + "id": 10067, + "name": "Podu Vadului", + "county": "Prahova" + }, + { + "id": 10068, + "name": "Surdesti", + "county": "Prahova" + }, + { + "id": 10069, + "name": "Valea Tarsei", + "county": "Prahova" + }, + { + "id": 10070, + "name": "Busteni", + "county": "Prahova" + }, + { + "id": 10071, + "name": "Poiana Tapului", + "county": "Prahova" + }, + { + "id": 10072, + "name": "Campina", + "county": "Prahova" + }, + { + "id": 10073, + "name": "Poiana Campina", + "county": "Prahova" + }, + { + "id": 10074, + "name": "Bobolia", + "county": "Prahova" + }, + { + "id": 10075, + "name": "Pietrisu", + "county": "Prahova" + }, + { + "id": 10076, + "name": "Ragman", + "county": "Prahova" + }, + { + "id": 10077, + "name": "Comarnic", + "county": "Prahova" + }, + { + "id": 10078, + "name": "Ghiosesti", + "county": "Prahova" + }, + { + "id": 10079, + "name": "Podu Lung", + "county": "Prahova" + }, + { + "id": 10080, + "name": "Poiana", + "county": "Prahova" + }, + { + "id": 10081, + "name": "Posada", + "county": "Prahova" + }, + { + "id": 10082, + "name": "Mizil", + "county": "Prahova" + }, + { + "id": 10083, + "name": "Fefelei", + "county": "Prahova" + }, + { + "id": 10084, + "name": "Plopeni", + "county": "Prahova" + }, + { + "id": 10085, + "name": "Dumbravesti", + "county": "Prahova" + }, + { + "id": 10086, + "name": "Gavanel", + "county": "Prahova" + }, + { + "id": 10087, + "name": "Malaestii de Jos", + "county": "Prahova" + }, + { + "id": 10088, + "name": "Malaestii de Sus", + "county": "Prahova" + }, + { + "id": 10089, + "name": "Plopeni", + "county": "Prahova" + }, + { + "id": 10090, + "name": "Sfarleanca", + "county": "Prahova" + }, + { + "id": 10091, + "name": "Sinaia", + "county": "Prahova" + }, + { + "id": 10092, + "name": "Slanic", + "county": "Prahova" + }, + { + "id": 10093, + "name": "Grosani", + "county": "Prahova" + }, + { + "id": 10094, + "name": "Prajani", + "county": "Prahova" + }, + { + "id": 10095, + "name": "Urlati", + "county": "Prahova" + }, + { + "id": 10096, + "name": "Arionestii Noi", + "county": "Prahova" + }, + { + "id": 10097, + "name": "Arionestii Vechi", + "county": "Prahova" + }, + { + "id": 10098, + "name": "Cherba", + "county": "Prahova" + }, + { + "id": 10099, + "name": "Jercalai", + "county": "Prahova" + }, + { + "id": 10100, + "name": "Maruntis", + "county": "Prahova" + }, + { + "id": 10101, + "name": "Orzoaia de Jos", + "county": "Prahova" + }, + { + "id": 10102, + "name": "Orzoaia de Sus", + "county": "Prahova" + }, + { + "id": 10103, + "name": "Schiau", + "county": "Prahova" + }, + { + "id": 10104, + "name": "Ulmi", + "county": "Prahova" + }, + { + "id": 10105, + "name": "Valea Bobului", + "county": "Prahova" + }, + { + "id": 10106, + "name": "Valea Crangului", + "county": "Prahova" + }, + { + "id": 10107, + "name": "Valea Mieilor", + "county": "Prahova" + }, + { + "id": 10108, + "name": "Valea Nucetului", + "county": "Prahova" + }, + { + "id": 10109, + "name": "Valea Pietrei", + "county": "Prahova" + }, + { + "id": 10110, + "name": "Valea Seman", + "county": "Prahova" + }, + { + "id": 10111, + "name": "Valea Urloii", + "county": "Prahova" + }, + { + "id": 10112, + "name": "Valenii de Munte", + "county": "Prahova" + }, + { + "id": 10113, + "name": "Gura Vitioarei", + "county": "Prahova" + }, + { + "id": 10114, + "name": "Bughea de Jos", + "county": "Prahova" + }, + { + "id": 10115, + "name": "Fagetu", + "county": "Prahova" + }, + { + "id": 10116, + "name": "Fundeni", + "county": "Prahova" + }, + { + "id": 10117, + "name": "Poiana Copaceni", + "county": "Prahova" + }, + { + "id": 10118, + "name": "Adunati", + "county": "Prahova" + }, + { + "id": 10119, + "name": "Ocina de Jos", + "county": "Prahova" + }, + { + "id": 10120, + "name": "Ocina de Sus", + "county": "Prahova" + }, + { + "id": 10121, + "name": "Albesti-Paleologu", + "county": "Prahova" + }, + { + "id": 10122, + "name": "Albesti-Muru", + "county": "Prahova" + }, + { + "id": 10123, + "name": "Cioceni", + "county": "Prahova" + }, + { + "id": 10124, + "name": "Vadu Parului", + "county": "Prahova" + }, + { + "id": 10125, + "name": "Alunis", + "county": "Prahova" + }, + { + "id": 10126, + "name": "Ostrovu", + "county": "Prahova" + }, + { + "id": 10127, + "name": "Apostolache", + "county": "Prahova" + }, + { + "id": 10128, + "name": "Buzota", + "county": "Prahova" + }, + { + "id": 10129, + "name": "Marlogea", + "county": "Prahova" + }, + { + "id": 10130, + "name": "Udresti", + "county": "Prahova" + }, + { + "id": 10131, + "name": "Valea Cricovului", + "county": "Prahova" + }, + { + "id": 10132, + "name": "Aricestii Rahtivani", + "county": "Prahova" + }, + { + "id": 10133, + "name": "Buda", + "county": "Prahova" + }, + { + "id": 10134, + "name": "Nedelea", + "county": "Prahova" + }, + { + "id": 10135, + "name": "Stoenesti", + "county": "Prahova" + }, + { + "id": 10136, + "name": "Targsoru Nou", + "county": "Prahova" + }, + { + "id": 10137, + "name": "Aricestii Zeletin", + "county": "Prahova" + }, + { + "id": 10138, + "name": "Albinari", + "county": "Prahova" + }, + { + "id": 10139, + "name": "Baba Ana", + "county": "Prahova" + }, + { + "id": 10140, + "name": "Ciresanu", + "county": "Prahova" + }, + { + "id": 10141, + "name": "Conduratu", + "county": "Prahova" + }, + { + "id": 10142, + "name": "Crangurile", + "county": "Prahova" + }, + { + "id": 10143, + "name": "Satu Nou", + "county": "Prahova" + }, + { + "id": 10144, + "name": "Balta Doamnei", + "county": "Prahova" + }, + { + "id": 10145, + "name": "Bara", + "county": "Prahova" + }, + { + "id": 10146, + "name": "Curcubeu", + "county": "Prahova" + }, + { + "id": 10147, + "name": "Lacu Turcului", + "county": "Prahova" + }, + { + "id": 10148, + "name": "Baltesti", + "county": "Prahova" + }, + { + "id": 10149, + "name": "Izesti", + "county": "Prahova" + }, + { + "id": 10150, + "name": "Podenii Vechi", + "county": "Prahova" + }, + { + "id": 10151, + "name": "Banesti", + "county": "Prahova" + }, + { + "id": 10152, + "name": "Urleta", + "county": "Prahova" + }, + { + "id": 10153, + "name": "Bertea", + "county": "Prahova" + }, + { + "id": 10154, + "name": "Lutu Rosu", + "county": "Prahova" + }, + { + "id": 10155, + "name": "Boldesti", + "county": "Prahova" + }, + { + "id": 10156, + "name": "Gradistea", + "county": "Prahova" + }, + { + "id": 10157, + "name": "Brebu Manastirei", + "county": "Prahova" + }, + { + "id": 10158, + "name": "Brebu Megiesesc", + "county": "Prahova" + }, + { + "id": 10159, + "name": "Pietriceaua", + "county": "Prahova" + }, + { + "id": 10160, + "name": "Podu Cheii", + "county": "Prahova" + }, + { + "id": 10161, + "name": "Calugareni", + "county": "Prahova" + }, + { + "id": 10162, + "name": "Valea Scheilor", + "county": "Prahova" + }, + { + "id": 10163, + "name": "Carbunesti", + "county": "Prahova" + }, + { + "id": 10164, + "name": "Gogeasca", + "county": "Prahova" + }, + { + "id": 10165, + "name": "Ceptura de Jos", + "county": "Prahova" + }, + { + "id": 10166, + "name": "Ceptura de Sus", + "county": "Prahova" + }, + { + "id": 10167, + "name": "Malu Rosu", + "county": "Prahova" + }, + { + "id": 10168, + "name": "Rotari", + "county": "Prahova" + }, + { + "id": 10169, + "name": "Soimesti", + "county": "Prahova" + }, + { + "id": 10170, + "name": "Cerasu", + "county": "Prahova" + }, + { + "id": 10171, + "name": "Slon", + "county": "Prahova" + }, + { + "id": 10172, + "name": "Valea Borului", + "county": "Prahova" + }, + { + "id": 10173, + "name": "Valea Bradetului", + "county": "Prahova" + }, + { + "id": 10174, + "name": "Valea Lespezii", + "county": "Prahova" + }, + { + "id": 10175, + "name": "Valea Tocii", + "county": "Prahova" + }, + { + "id": 10176, + "name": "Chiojdeanca", + "county": "Prahova" + }, + { + "id": 10177, + "name": "Nucet", + "county": "Prahova" + }, + { + "id": 10178, + "name": "Trenu", + "county": "Prahova" + }, + { + "id": 10179, + "name": "Cioranii de Jos", + "county": "Prahova" + }, + { + "id": 10180, + "name": "Cioranii de Sus", + "county": "Prahova" + }, + { + "id": 10181, + "name": "Cocorastii Mislii", + "county": "Prahova" + }, + { + "id": 10182, + "name": "Goruna", + "county": "Prahova" + }, + { + "id": 10183, + "name": "Tiparesti", + "county": "Prahova" + }, + { + "id": 10184, + "name": "Colceag", + "county": "Prahova" + }, + { + "id": 10185, + "name": "Inotesti", + "county": "Prahova" + }, + { + "id": 10186, + "name": "Parepa-Rusani", + "county": "Prahova" + }, + { + "id": 10187, + "name": "Valcelele", + "county": "Prahova" + }, + { + "id": 10188, + "name": "Cornu de Jos", + "county": "Prahova" + }, + { + "id": 10189, + "name": "Cornu de Sus", + "county": "Prahova" + }, + { + "id": 10190, + "name": "Valea Oprii", + "county": "Prahova" + }, + { + "id": 10191, + "name": "Cosmina de Jos", + "county": "Prahova" + }, + { + "id": 10192, + "name": "Cosmina de Sus", + "county": "Prahova" + }, + { + "id": 10193, + "name": "Draghicesti", + "county": "Prahova" + }, + { + "id": 10194, + "name": "Poiana Trestiei", + "county": "Prahova" + }, + { + "id": 10195, + "name": "Drajna de Sus", + "county": "Prahova" + }, + { + "id": 10196, + "name": "Catunu", + "county": "Prahova" + }, + { + "id": 10197, + "name": "Ciocrac", + "county": "Prahova" + }, + { + "id": 10198, + "name": "Drajna de Jos", + "county": "Prahova" + }, + { + "id": 10199, + "name": "Faget", + "county": "Prahova" + }, + { + "id": 10200, + "name": "Ogretin", + "county": "Prahova" + }, + { + "id": 10201, + "name": "Piatra", + "county": "Prahova" + }, + { + "id": 10202, + "name": "Pitigoi", + "county": "Prahova" + }, + { + "id": 10203, + "name": "Plai", + "county": "Prahova" + }, + { + "id": 10204, + "name": "Podurile", + "county": "Prahova" + }, + { + "id": 10205, + "name": "Poiana Mierlei", + "county": "Prahova" + }, + { + "id": 10206, + "name": "Draganesti", + "county": "Prahova" + }, + { + "id": 10207, + "name": "Baraitaru", + "county": "Prahova" + }, + { + "id": 10208, + "name": "Belciug", + "county": "Prahova" + }, + { + "id": 10209, + "name": "Cornu de Jos", + "county": "Prahova" + }, + { + "id": 10210, + "name": "Hatcarau", + "county": "Prahova" + }, + { + "id": 10211, + "name": "Meri", + "county": "Prahova" + }, + { + "id": 10212, + "name": "Tufani", + "county": "Prahova" + }, + { + "id": 10213, + "name": "Dumbrava", + "county": "Prahova" + }, + { + "id": 10214, + "name": "Ciupelnita", + "county": "Prahova" + }, + { + "id": 10215, + "name": "Cornu de Sus", + "county": "Prahova" + }, + { + "id": 10216, + "name": "Trestienii de Jos", + "county": "Prahova" + }, + { + "id": 10217, + "name": "Trestienii de Sus", + "county": "Prahova" + }, + { + "id": 10218, + "name": "Zanoaga", + "county": "Prahova" + }, + { + "id": 10219, + "name": "Filipestii de Padure", + "county": "Prahova" + }, + { + "id": 10220, + "name": "Ditesti", + "county": "Prahova" + }, + { + "id": 10221, + "name": "Minieri", + "county": "Prahova" + }, + { + "id": 10222, + "name": "Silistea Dealului", + "county": "Prahova" + }, + { + "id": 10223, + "name": "Filipestii de Targ", + "county": "Prahova" + }, + { + "id": 10224, + "name": "Bratasanca", + "county": "Prahova" + }, + { + "id": 10225, + "name": "Ezeni", + "county": "Prahova" + }, + { + "id": 10226, + "name": "Marginenii de Jos", + "county": "Prahova" + }, + { + "id": 10227, + "name": "Ungureni", + "county": "Prahova" + }, + { + "id": 10228, + "name": "Fantanele", + "county": "Prahova" + }, + { + "id": 10229, + "name": "Bozieni", + "county": "Prahova" + }, + { + "id": 10230, + "name": "Ghinoaica", + "county": "Prahova" + }, + { + "id": 10231, + "name": "Ungureni", + "county": "Prahova" + }, + { + "id": 10232, + "name": "Vadu Sapat", + "county": "Prahova" + }, + { + "id": 10233, + "name": "Floresti", + "county": "Prahova" + }, + { + "id": 10234, + "name": "Cap Rosu", + "county": "Prahova" + }, + { + "id": 10235, + "name": "Calinesti", + "county": "Prahova" + }, + { + "id": 10236, + "name": "Catina", + "county": "Prahova" + }, + { + "id": 10237, + "name": "Novacesti", + "county": "Prahova" + }, + { + "id": 10238, + "name": "Fulga de Jos", + "county": "Prahova" + }, + { + "id": 10239, + "name": "Fulga de Sus", + "county": "Prahova" + }, + { + "id": 10240, + "name": "Gherghita", + "county": "Prahova" + }, + { + "id": 10241, + "name": "Fanari", + "county": "Prahova" + }, + { + "id": 10242, + "name": "Independenta", + "county": "Prahova" + }, + { + "id": 10243, + "name": "Malamuc", + "county": "Prahova" + }, + { + "id": 10244, + "name": "Olari", + "county": "Prahova" + }, + { + "id": 10245, + "name": "Olarii Vechi", + "county": "Prahova" + }, + { + "id": 10246, + "name": "Ungureni", + "county": "Prahova" + }, + { + "id": 10247, + "name": "Gorgota", + "county": "Prahova" + }, + { + "id": 10248, + "name": "Crivina", + "county": "Prahova" + }, + { + "id": 10249, + "name": "Fanari", + "county": "Prahova" + }, + { + "id": 10250, + "name": "Poienarii Apostoli", + "county": "Prahova" + }, + { + "id": 10251, + "name": "Potigrafu", + "county": "Prahova" + }, + { + "id": 10252, + "name": "Gornet", + "county": "Prahova" + }, + { + "id": 10253, + "name": "Bogdanesti", + "county": "Prahova" + }, + { + "id": 10254, + "name": "Cuib", + "county": "Prahova" + }, + { + "id": 10255, + "name": "Nucet", + "county": "Prahova" + }, + { + "id": 10256, + "name": "Gornet-Cricov", + "county": "Prahova" + }, + { + "id": 10257, + "name": "Coserele", + "county": "Prahova" + }, + { + "id": 10258, + "name": "Dobrota", + "county": "Prahova" + }, + { + "id": 10259, + "name": "Priseaca", + "county": "Prahova" + }, + { + "id": 10260, + "name": "Tarculesti", + "county": "Prahova" + }, + { + "id": 10261, + "name": "Valea Seaca", + "county": "Prahova" + }, + { + "id": 10262, + "name": "Gura Vadului", + "county": "Prahova" + }, + { + "id": 10263, + "name": "Persunari", + "county": "Prahova" + }, + { + "id": 10264, + "name": "Tohani", + "county": "Prahova" + }, + { + "id": 10265, + "name": "Iordacheanu", + "county": "Prahova" + }, + { + "id": 10266, + "name": "Mocesti", + "county": "Prahova" + }, + { + "id": 10267, + "name": "Plavia", + "county": "Prahova" + }, + { + "id": 10268, + "name": "Straosti", + "county": "Prahova" + }, + { + "id": 10269, + "name": "Valea Cucului", + "county": "Prahova" + }, + { + "id": 10270, + "name": "Varbila", + "county": "Prahova" + }, + { + "id": 10271, + "name": "Izvoarele", + "county": "Prahova" + }, + { + "id": 10272, + "name": "Cernesti", + "county": "Prahova" + }, + { + "id": 10273, + "name": "Chiritesti", + "county": "Prahova" + }, + { + "id": 10274, + "name": "Homoraciu", + "county": "Prahova" + }, + { + "id": 10275, + "name": "Malu Vanat", + "county": "Prahova" + }, + { + "id": 10276, + "name": "Schiulesti", + "county": "Prahova" + }, + { + "id": 10277, + "name": "Jugureni", + "county": "Prahova" + }, + { + "id": 10278, + "name": "Boboci", + "county": "Prahova" + }, + { + "id": 10279, + "name": "Marginea Padurii", + "county": "Prahova" + }, + { + "id": 10280, + "name": "Valea Unghiului", + "county": "Prahova" + }, + { + "id": 10281, + "name": "Lapos", + "county": "Prahova" + }, + { + "id": 10282, + "name": "Glod", + "county": "Prahova" + }, + { + "id": 10283, + "name": "Laposel", + "county": "Prahova" + }, + { + "id": 10284, + "name": "Pietricica", + "county": "Prahova" + }, + { + "id": 10285, + "name": "Lipanesti", + "county": "Prahova" + }, + { + "id": 10286, + "name": "Satu Nou", + "county": "Prahova" + }, + { + "id": 10287, + "name": "Sipotu", + "county": "Prahova" + }, + { + "id": 10288, + "name": "Zamfira", + "county": "Prahova" + }, + { + "id": 10289, + "name": "Magurele", + "county": "Prahova" + }, + { + "id": 10290, + "name": "Coada Malului", + "county": "Prahova" + }, + { + "id": 10291, + "name": "Iazu", + "county": "Prahova" + }, + { + "id": 10292, + "name": "Magureni", + "county": "Prahova" + }, + { + "id": 10293, + "name": "Cocorastii Caplii", + "county": "Prahova" + }, + { + "id": 10294, + "name": "Lunca Prahovei", + "county": "Prahova" + }, + { + "id": 10295, + "name": "Maneciu-Ungureni", + "county": "Prahova" + }, + { + "id": 10296, + "name": "Cheia", + "county": "Prahova" + }, + { + "id": 10297, + "name": "Chiciureni", + "county": "Prahova" + }, + { + "id": 10298, + "name": "Costeni", + "county": "Prahova" + }, + { + "id": 10299, + "name": "Facaieni", + "county": "Prahova" + }, + { + "id": 10300, + "name": "Gheaba", + "county": "Prahova" + }, + { + "id": 10301, + "name": "Manastirea Suzana", + "county": "Prahova" + }, + { + "id": 10302, + "name": "Maneciu-Pamanteni", + "county": "Prahova" + }, + { + "id": 10303, + "name": "Plaietu", + "county": "Prahova" + }, + { + "id": 10304, + "name": "Manesti", + "county": "Prahova" + }, + { + "id": 10305, + "name": "Baltita", + "county": "Prahova" + }, + { + "id": 10306, + "name": "Chesnoiu", + "county": "Prahova" + }, + { + "id": 10307, + "name": "Coada Izvorului", + "county": "Prahova" + }, + { + "id": 10308, + "name": "Cocorastii Colt", + "county": "Prahova" + }, + { + "id": 10309, + "name": "Cocorastii Grind", + "county": "Prahova" + }, + { + "id": 10310, + "name": "Coltu de Jos", + "county": "Prahova" + }, + { + "id": 10311, + "name": "Ghioldum", + "county": "Prahova" + }, + { + "id": 10312, + "name": "Gura Crivatului", + "county": "Prahova" + }, + { + "id": 10313, + "name": "Persunari", + "county": "Prahova" + }, + { + "id": 10314, + "name": "Piatra", + "county": "Prahova" + }, + { + "id": 10315, + "name": "Satu de Sus", + "county": "Prahova" + }, + { + "id": 10316, + "name": "Zalhanaua", + "county": "Prahova" + }, + { + "id": 10317, + "name": "Pacureti", + "county": "Prahova" + }, + { + "id": 10318, + "name": "Barzila", + "county": "Prahova" + }, + { + "id": 10319, + "name": "Curmatura", + "county": "Prahova" + }, + { + "id": 10320, + "name": "Matita", + "county": "Prahova" + }, + { + "id": 10321, + "name": "Slavu", + "county": "Prahova" + }, + { + "id": 10322, + "name": "Plopu", + "county": "Prahova" + }, + { + "id": 10323, + "name": "Galmeia", + "county": "Prahova" + }, + { + "id": 10324, + "name": "Harsa", + "county": "Prahova" + }, + { + "id": 10325, + "name": "Nisipoasa", + "county": "Prahova" + }, + { + "id": 10326, + "name": "Podenii Noi", + "county": "Prahova" + }, + { + "id": 10327, + "name": "Ghiocel", + "county": "Prahova" + }, + { + "id": 10328, + "name": "Mehedinta", + "county": "Prahova" + }, + { + "id": 10329, + "name": "Nevesteasca", + "county": "Prahova" + }, + { + "id": 10330, + "name": "Podu lui Galben", + "county": "Prahova" + }, + { + "id": 10331, + "name": "Popesti", + "county": "Prahova" + }, + { + "id": 10332, + "name": "Rahova", + "county": "Prahova" + }, + { + "id": 10333, + "name": "Salcioara", + "county": "Prahova" + }, + { + "id": 10334, + "name": "Sfacaru", + "county": "Prahova" + }, + { + "id": 10335, + "name": "Valea Dulce", + "county": "Prahova" + }, + { + "id": 10336, + "name": "Poienarii Burchii", + "county": "Prahova" + }, + { + "id": 10337, + "name": "Carbunari", + "county": "Prahova" + }, + { + "id": 10338, + "name": "Ologeni", + "county": "Prahova" + }, + { + "id": 10339, + "name": "Pioresti", + "county": "Prahova" + }, + { + "id": 10340, + "name": "Podu Valeni", + "county": "Prahova" + }, + { + "id": 10341, + "name": "Poienarii Rali", + "county": "Prahova" + }, + { + "id": 10342, + "name": "Poienarii Vechi", + "county": "Prahova" + }, + { + "id": 10343, + "name": "Tatarai", + "county": "Prahova" + }, + { + "id": 10344, + "name": "Posestii-Pamanteni", + "county": "Prahova" + }, + { + "id": 10345, + "name": "Bodesti", + "county": "Prahova" + }, + { + "id": 10346, + "name": "Merdeala", + "county": "Prahova" + }, + { + "id": 10347, + "name": "Nucsoara de Sus", + "county": "Prahova" + }, + { + "id": 10348, + "name": "Nucsoara de Jos", + "county": "Prahova" + }, + { + "id": 10349, + "name": "Posestii Ungureni", + "county": "Prahova" + }, + { + "id": 10350, + "name": "Tarlesti", + "county": "Prahova" + }, + { + "id": 10351, + "name": "Valea Plopului", + "county": "Prahova" + }, + { + "id": 10352, + "name": "Valea Screzii", + "county": "Prahova" + }, + { + "id": 10353, + "name": "Valea Stupinii", + "county": "Prahova" + }, + { + "id": 10354, + "name": "Predeal", + "county": "Prahova" + }, + { + "id": 10355, + "name": "Bobicesti", + "county": "Prahova" + }, + { + "id": 10356, + "name": "Poienile", + "county": "Prahova" + }, + { + "id": 10357, + "name": "Sarari", + "county": "Prahova" + }, + { + "id": 10358, + "name": "Saratel", + "county": "Prahova" + }, + { + "id": 10359, + "name": "Tulburea", + "county": "Prahova" + }, + { + "id": 10360, + "name": "Tulburea Valeni", + "county": "Prahova" + }, + { + "id": 10361, + "name": "Vitioara de Sus", + "county": "Prahova" + }, + { + "id": 10362, + "name": "Zambroaia", + "county": "Prahova" + }, + { + "id": 10363, + "name": "Provita de Jos", + "county": "Prahova" + }, + { + "id": 10364, + "name": "Draganeasa", + "county": "Prahova" + }, + { + "id": 10365, + "name": "Piatra", + "county": "Prahova" + }, + { + "id": 10366, + "name": "Provita de Sus", + "county": "Prahova" + }, + { + "id": 10367, + "name": "Izvoru", + "county": "Prahova" + }, + { + "id": 10368, + "name": "Plaiu", + "county": "Prahova" + }, + { + "id": 10369, + "name": "Valea Bradului", + "county": "Prahova" + }, + { + "id": 10370, + "name": "Puchenii Mari", + "county": "Prahova" + }, + { + "id": 10371, + "name": "Miroslavesti", + "county": "Prahova" + }, + { + "id": 10372, + "name": "Moara", + "county": "Prahova" + }, + { + "id": 10373, + "name": "Odaile", + "county": "Prahova" + }, + { + "id": 10374, + "name": "Pietrosani", + "county": "Prahova" + }, + { + "id": 10375, + "name": "Puchenii Mici", + "county": "Prahova" + }, + { + "id": 10376, + "name": "Puchenii Mosneni", + "county": "Prahova" + }, + { + "id": 10377, + "name": "Rafov", + "county": "Prahova" + }, + { + "id": 10378, + "name": "Antofiloaia", + "county": "Prahova" + }, + { + "id": 10379, + "name": "Buchilasi", + "county": "Prahova" + }, + { + "id": 10380, + "name": "Buda", + "county": "Prahova" + }, + { + "id": 10381, + "name": "Goga", + "county": "Prahova" + }, + { + "id": 10382, + "name": "Malaiesti", + "county": "Prahova" + }, + { + "id": 10383, + "name": "Moara Domneasca", + "county": "Prahova" + }, + { + "id": 10384, + "name": "Palanca", + "county": "Prahova" + }, + { + "id": 10385, + "name": "Sicrita", + "county": "Prahova" + }, + { + "id": 10386, + "name": "Salcia", + "county": "Prahova" + }, + { + "id": 10387, + "name": "Salciile", + "county": "Prahova" + }, + { + "id": 10388, + "name": "Scorteni", + "county": "Prahova" + }, + { + "id": 10389, + "name": "Bordenii Mari", + "county": "Prahova" + }, + { + "id": 10390, + "name": "Bordenii Mici", + "county": "Prahova" + }, + { + "id": 10391, + "name": "Mislea", + "county": "Prahova" + }, + { + "id": 10392, + "name": "Sarca", + "county": "Prahova" + }, + { + "id": 10393, + "name": "Secaria", + "county": "Prahova" + }, + { + "id": 10394, + "name": "Sangeru", + "county": "Prahova" + }, + { + "id": 10395, + "name": "Butuci", + "county": "Prahova" + }, + { + "id": 10396, + "name": "Miresu Mare", + "county": "Prahova" + }, + { + "id": 10397, + "name": "Miresu Mic", + "county": "Prahova" + }, + { + "id": 10398, + "name": "Piatra Mica", + "county": "Prahova" + }, + { + "id": 10399, + "name": "Tisa", + "county": "Prahova" + }, + { + "id": 10400, + "name": "Starchiojd", + "county": "Prahova" + }, + { + "id": 10401, + "name": "Batrani", + "county": "Prahova" + }, + { + "id": 10402, + "name": "Bradet", + "county": "Prahova" + }, + { + "id": 10403, + "name": "Gresia", + "county": "Prahova" + }, + { + "id": 10404, + "name": "Poiana Mare", + "county": "Prahova" + }, + { + "id": 10405, + "name": "Rotarea", + "county": "Prahova" + }, + { + "id": 10406, + "name": "Valea Anei", + "county": "Prahova" + }, + { + "id": 10407, + "name": "Zmeuret", + "county": "Prahova" + }, + { + "id": 10408, + "name": "Surani", + "county": "Prahova" + }, + { + "id": 10409, + "name": "Pacuri", + "county": "Prahova" + }, + { + "id": 10410, + "name": "Sirna", + "county": "Prahova" + }, + { + "id": 10411, + "name": "Bratesti", + "county": "Prahova" + }, + { + "id": 10412, + "name": "Coceana", + "county": "Prahova" + }, + { + "id": 10413, + "name": "Habud", + "county": "Prahova" + }, + { + "id": 10414, + "name": "Tariceni", + "county": "Prahova" + }, + { + "id": 10415, + "name": "Varnita", + "county": "Prahova" + }, + { + "id": 10416, + "name": "Soimari", + "county": "Prahova" + }, + { + "id": 10417, + "name": "Lopatnita", + "county": "Prahova" + }, + { + "id": 10418, + "name": "Magura", + "county": "Prahova" + }, + { + "id": 10419, + "name": "Sotrile", + "county": "Prahova" + }, + { + "id": 10420, + "name": "Lunca Mare", + "county": "Prahova" + }, + { + "id": 10421, + "name": "Plaiu Campinei", + "county": "Prahova" + }, + { + "id": 10422, + "name": "Plaiu Cornului", + "county": "Prahova" + }, + { + "id": 10423, + "name": "Seciuri", + "county": "Prahova" + }, + { + "id": 10424, + "name": "Vistieru", + "county": "Prahova" + }, + { + "id": 10425, + "name": "Stefesti", + "county": "Prahova" + }, + { + "id": 10426, + "name": "Scurtesti", + "county": "Prahova" + }, + { + "id": 10427, + "name": "Tarsoreni", + "county": "Prahova" + }, + { + "id": 10428, + "name": "Talea", + "county": "Prahova" + }, + { + "id": 10429, + "name": "Plaiu", + "county": "Prahova" + }, + { + "id": 10430, + "name": "Tataru", + "county": "Prahova" + }, + { + "id": 10431, + "name": "Podgoria", + "county": "Prahova" + }, + { + "id": 10432, + "name": "Silistea", + "county": "Prahova" + }, + { + "id": 10433, + "name": "Teisani", + "county": "Prahova" + }, + { + "id": 10434, + "name": "Bugnea de Sus", + "county": "Prahova" + }, + { + "id": 10435, + "name": "Olteni", + "county": "Prahova" + }, + { + "id": 10436, + "name": "Stubeiu", + "county": "Prahova" + }, + { + "id": 10437, + "name": "Valea Stalpului", + "county": "Prahova" + }, + { + "id": 10438, + "name": "Telega", + "county": "Prahova" + }, + { + "id": 10439, + "name": "Bosilcesti", + "county": "Prahova" + }, + { + "id": 10440, + "name": "Bustenari", + "county": "Prahova" + }, + { + "id": 10441, + "name": "Doftana", + "county": "Prahova" + }, + { + "id": 10442, + "name": "Melicesti", + "county": "Prahova" + }, + { + "id": 10443, + "name": "Tontesti", + "county": "Prahova" + }, + { + "id": 10444, + "name": "Tinosu", + "county": "Prahova" + }, + { + "id": 10445, + "name": "Predesti", + "county": "Prahova" + }, + { + "id": 10446, + "name": "Pisculesti", + "county": "Prahova" + }, + { + "id": 10447, + "name": "Tomsani", + "county": "Prahova" + }, + { + "id": 10448, + "name": "Loloiasca", + "county": "Prahova" + }, + { + "id": 10449, + "name": "Magula", + "county": "Prahova" + }, + { + "id": 10450, + "name": "Satucu", + "county": "Prahova" + }, + { + "id": 10451, + "name": "Valea Calugareasca", + "county": "Prahova" + }, + { + "id": 10452, + "name": "Arva", + "county": "Prahova" + }, + { + "id": 10453, + "name": "Coslegi", + "county": "Prahova" + }, + { + "id": 10454, + "name": "Darvari", + "county": "Prahova" + }, + { + "id": 10455, + "name": "Pantazi", + "county": "Prahova" + }, + { + "id": 10456, + "name": "Rachieri", + "county": "Prahova" + }, + { + "id": 10457, + "name": "Radila", + "county": "Prahova" + }, + { + "id": 10458, + "name": "Schiau", + "county": "Prahova" + }, + { + "id": 10459, + "name": "Valea Larga", + "county": "Prahova" + }, + { + "id": 10460, + "name": "Valea Mantei", + "county": "Prahova" + }, + { + "id": 10461, + "name": "Valea Nicovani", + "county": "Prahova" + }, + { + "id": 10462, + "name": "Valea Poienii", + "county": "Prahova" + }, + { + "id": 10463, + "name": "Valea Popii", + "county": "Prahova" + }, + { + "id": 10464, + "name": "Valea Ursoii", + "county": "Prahova" + }, + { + "id": 10465, + "name": "Varfurile", + "county": "Prahova" + }, + { + "id": 10466, + "name": "Tesila", + "county": "Prahova" + }, + { + "id": 10467, + "name": "Traisteni", + "county": "Prahova" + }, + { + "id": 10468, + "name": "Varbilau", + "county": "Prahova" + }, + { + "id": 10469, + "name": "Cotofenesti", + "county": "Prahova" + }, + { + "id": 10470, + "name": "Livadea", + "county": "Prahova" + }, + { + "id": 10471, + "name": "Podu Ursului", + "county": "Prahova" + }, + { + "id": 10472, + "name": "Poiana Varbilau", + "county": "Prahova" + }, + { + "id": 10473, + "name": "Valcanesti", + "county": "Prahova" + }, + { + "id": 10474, + "name": "Carjari", + "county": "Prahova" + }, + { + "id": 10475, + "name": "Trestioara", + "county": "Prahova" + }, + { + "id": 10476, + "name": "Gura Beliei", + "county": "Prahova" + }, + { + "id": 10477, + "name": "Satu Mare", + "county": "Satu Mare" + }, + { + "id": 10478, + "name": "Satmarel", + "county": "Satu Mare" + }, + { + "id": 10479, + "name": "Carei", + "county": "Satu Mare" + }, + { + "id": 10480, + "name": "Ianculesti", + "county": "Satu Mare" + }, + { + "id": 10481, + "name": "Capleni", + "county": "Satu Mare" + }, + { + "id": 10482, + "name": "Camin", + "county": "Satu Mare" + }, + { + "id": 10483, + "name": "Negresti-Oas", + "county": "Satu Mare" + }, + { + "id": 10484, + "name": "Luna", + "county": "Satu Mare" + }, + { + "id": 10485, + "name": "Tur", + "county": "Satu Mare" + }, + { + "id": 10486, + "name": "Tasnad", + "county": "Satu Mare" + }, + { + "id": 10487, + "name": "Blaja", + "county": "Satu Mare" + }, + { + "id": 10488, + "name": "Cig", + "county": "Satu Mare" + }, + { + "id": 10489, + "name": "Ratiu", + "county": "Satu Mare" + }, + { + "id": 10490, + "name": "Sarauad", + "county": "Satu Mare" + }, + { + "id": 10491, + "name": "Valea Morii", + "county": "Satu Mare" + }, + { + "id": 10492, + "name": "Acas", + "county": "Satu Mare" + }, + { + "id": 10493, + "name": "Ganas", + "county": "Satu Mare" + }, + { + "id": 10494, + "name": "Mihaieni", + "county": "Satu Mare" + }, + { + "id": 10495, + "name": "Unimat", + "county": "Satu Mare" + }, + { + "id": 10496, + "name": "Andrid", + "county": "Satu Mare" + }, + { + "id": 10497, + "name": "Dindesti", + "county": "Satu Mare" + }, + { + "id": 10498, + "name": "Irina", + "county": "Satu Mare" + }, + { + "id": 10499, + "name": "Apa", + "county": "Satu Mare" + }, + { + "id": 10500, + "name": "Lunca Apei", + "county": "Satu Mare" + }, + { + "id": 10501, + "name": "Someseni", + "county": "Satu Mare" + }, + { + "id": 10502, + "name": "Ardud", + "county": "Satu Mare" + }, + { + "id": 10503, + "name": "Ardud-Vii", + "county": "Satu Mare" + }, + { + "id": 10504, + "name": "Baba Novac", + "county": "Satu Mare" + }, + { + "id": 10505, + "name": "Gerausa", + "county": "Satu Mare" + }, + { + "id": 10506, + "name": "Madaras", + "county": "Satu Mare" + }, + { + "id": 10507, + "name": "Saratura", + "county": "Satu Mare" + }, + { + "id": 10508, + "name": "Batarci", + "county": "Satu Mare" + }, + { + "id": 10509, + "name": "Comlausa", + "county": "Satu Mare" + }, + { + "id": 10510, + "name": "Sirlau", + "county": "Satu Mare" + }, + { + "id": 10511, + "name": "Tamaseni", + "county": "Satu Mare" + }, + { + "id": 10512, + "name": "Beltiug", + "county": "Satu Mare" + }, + { + "id": 10513, + "name": "Bolda", + "county": "Satu Mare" + }, + { + "id": 10514, + "name": "Ghirisa", + "county": "Satu Mare" + }, + { + "id": 10515, + "name": "Giungi", + "county": "Satu Mare" + }, + { + "id": 10516, + "name": "Ratesti", + "county": "Satu Mare" + }, + { + "id": 10517, + "name": "Sandra", + "county": "Satu Mare" + }, + { + "id": 10518, + "name": "Berveni", + "county": "Satu Mare" + }, + { + "id": 10519, + "name": "Lucaceni", + "county": "Satu Mare" + }, + { + "id": 10520, + "name": "Bixad", + "county": "Satu Mare" + }, + { + "id": 10521, + "name": "Boinesti", + "county": "Satu Mare" + }, + { + "id": 10522, + "name": "Trip", + "county": "Satu Mare" + }, + { + "id": 10523, + "name": "Barsau de Sus", + "county": "Satu Mare" + }, + { + "id": 10524, + "name": "Barsau de Jos", + "county": "Satu Mare" + }, + { + "id": 10525, + "name": "Bogdand", + "county": "Satu Mare" + }, + { + "id": 10526, + "name": "Babta", + "county": "Satu Mare" + }, + { + "id": 10527, + "name": "Corund", + "county": "Satu Mare" + }, + { + "id": 10528, + "name": "Ser", + "county": "Satu Mare" + }, + { + "id": 10529, + "name": "Botiz", + "county": "Satu Mare" + }, + { + "id": 10530, + "name": "Agris", + "county": "Satu Mare" + }, + { + "id": 10531, + "name": "Ciuperceni", + "county": "Satu Mare" + }, + { + "id": 10532, + "name": "Calinesti-Oas", + "county": "Satu Mare" + }, + { + "id": 10533, + "name": "Coca", + "county": "Satu Mare" + }, + { + "id": 10534, + "name": "Lechinta", + "county": "Satu Mare" + }, + { + "id": 10535, + "name": "Pasunea Mare", + "county": "Satu Mare" + }, + { + "id": 10536, + "name": "Camarzana", + "county": "Satu Mare" + }, + { + "id": 10537, + "name": "Cauas", + "county": "Satu Mare" + }, + { + "id": 10538, + "name": "Ady Endre", + "county": "Satu Mare" + }, + { + "id": 10539, + "name": "Ghenci", + "county": "Satu Mare" + }, + { + "id": 10540, + "name": "Ghilesti", + "county": "Satu Mare" + }, + { + "id": 10541, + "name": "Hotoan", + "county": "Satu Mare" + }, + { + "id": 10542, + "name": "Radulesti", + "county": "Satu Mare" + }, + { + "id": 10543, + "name": "Cehalut", + "county": "Satu Mare" + }, + { + "id": 10544, + "name": "Cehal", + "county": "Satu Mare" + }, + { + "id": 10545, + "name": "Orbau", + "county": "Satu Mare" + }, + { + "id": 10546, + "name": "Certeze", + "county": "Satu Mare" + }, + { + "id": 10547, + "name": "Huta Certeze", + "county": "Satu Mare" + }, + { + "id": 10548, + "name": "Moiseni", + "county": "Satu Mare" + }, + { + "id": 10549, + "name": "Craidorolt", + "county": "Satu Mare" + }, + { + "id": 10550, + "name": "Criseni", + "county": "Satu Mare" + }, + { + "id": 10551, + "name": "Eriu Sancrai", + "county": "Satu Mare" + }, + { + "id": 10552, + "name": "Satu Mic", + "county": "Satu Mare" + }, + { + "id": 10553, + "name": "Teghea", + "county": "Satu Mare" + }, + { + "id": 10554, + "name": "Crucisor", + "county": "Satu Mare" + }, + { + "id": 10555, + "name": "Iegheriste", + "county": "Satu Mare" + }, + { + "id": 10556, + "name": "Poiana Codrului", + "county": "Satu Mare" + }, + { + "id": 10557, + "name": "Culciu Mare", + "county": "Satu Mare" + }, + { + "id": 10558, + "name": "Apateu", + "county": "Satu Mare" + }, + { + "id": 10559, + "name": "Caraseu", + "county": "Satu Mare" + }, + { + "id": 10560, + "name": "Corod", + "county": "Satu Mare" + }, + { + "id": 10561, + "name": "Culciu Mic", + "county": "Satu Mare" + }, + { + "id": 10562, + "name": "Lipau", + "county": "Satu Mare" + }, + { + "id": 10563, + "name": "Doba", + "county": "Satu Mare" + }, + { + "id": 10564, + "name": "Boghis", + "county": "Satu Mare" + }, + { + "id": 10565, + "name": "Dacia", + "county": "Satu Mare" + }, + { + "id": 10566, + "name": "Paulian", + "county": "Satu Mare" + }, + { + "id": 10567, + "name": "Traian", + "county": "Satu Mare" + }, + { + "id": 10568, + "name": "Dorolt", + "county": "Satu Mare" + }, + { + "id": 10569, + "name": "Atea", + "county": "Satu Mare" + }, + { + "id": 10570, + "name": "Dara", + "county": "Satu Mare" + }, + { + "id": 10571, + "name": "Petea", + "county": "Satu Mare" + }, + { + "id": 10572, + "name": "Foieni", + "county": "Satu Mare" + }, + { + "id": 10573, + "name": "Gherta Mica", + "county": "Satu Mare" + }, + { + "id": 10574, + "name": "Halmeu", + "county": "Satu Mare" + }, + { + "id": 10575, + "name": "Babesti", + "county": "Satu Mare" + }, + { + "id": 10576, + "name": "Cidreag", + "county": "Satu Mare" + }, + { + "id": 10577, + "name": "Dobolt", + "county": "Satu Mare" + }, + { + "id": 10578, + "name": "Halmeu Vii", + "county": "Satu Mare" + }, + { + "id": 10579, + "name": "Mesteacan", + "county": "Satu Mare" + }, + { + "id": 10580, + "name": "Porumbesti", + "county": "Satu Mare" + }, + { + "id": 10581, + "name": "Hodod", + "county": "Satu Mare" + }, + { + "id": 10582, + "name": "Giurtelecu Hododului", + "county": "Satu Mare" + }, + { + "id": 10583, + "name": "Lelei", + "county": "Satu Mare" + }, + { + "id": 10584, + "name": "Nadisu Hododului", + "county": "Satu Mare" + }, + { + "id": 10585, + "name": "Homorodu de Mijloc", + "county": "Satu Mare" + }, + { + "id": 10586, + "name": "Chilia", + "county": "Satu Mare" + }, + { + "id": 10587, + "name": "Homorodu de Jos", + "county": "Satu Mare" + }, + { + "id": 10588, + "name": "Homorodu de Sus", + "county": "Satu Mare" + }, + { + "id": 10589, + "name": "Necopoi", + "county": "Satu Mare" + }, + { + "id": 10590, + "name": "Solduba", + "county": "Satu Mare" + }, + { + "id": 10591, + "name": "Lazuri", + "county": "Satu Mare" + }, + { + "id": 10592, + "name": "Bercu", + "county": "Satu Mare" + }, + { + "id": 10593, + "name": "Nisipeni", + "county": "Satu Mare" + }, + { + "id": 10594, + "name": "Noroieni", + "county": "Satu Mare" + }, + { + "id": 10595, + "name": "Peles", + "county": "Satu Mare" + }, + { + "id": 10596, + "name": "Pelisor", + "county": "Satu Mare" + }, + { + "id": 10597, + "name": "Livada", + "county": "Satu Mare" + }, + { + "id": 10598, + "name": "Adrian", + "county": "Satu Mare" + }, + { + "id": 10599, + "name": "Dumbrava", + "county": "Satu Mare" + }, + { + "id": 10600, + "name": "Livada Mica", + "county": "Satu Mare" + }, + { + "id": 10601, + "name": "Mediesu Aurit", + "county": "Satu Mare" + }, + { + "id": 10602, + "name": "Babasesti", + "county": "Satu Mare" + }, + { + "id": 10603, + "name": "Iojib", + "county": "Satu Mare" + }, + { + "id": 10604, + "name": "Medies Raturi", + "county": "Satu Mare" + }, + { + "id": 10605, + "name": "Medies Vii", + "county": "Satu Mare" + }, + { + "id": 10606, + "name": "Potau", + "county": "Satu Mare" + }, + { + "id": 10607, + "name": "Romanesti", + "county": "Satu Mare" + }, + { + "id": 10608, + "name": "Micula", + "county": "Satu Mare" + }, + { + "id": 10609, + "name": "Bercu Nou", + "county": "Satu Mare" + }, + { + "id": 10610, + "name": "Micula Noua", + "county": "Satu Mare" + }, + { + "id": 10611, + "name": "Moftinu Mic", + "county": "Satu Mare" + }, + { + "id": 10612, + "name": "Domanesti", + "county": "Satu Mare" + }, + { + "id": 10613, + "name": "Ghilvaci", + "county": "Satu Mare" + }, + { + "id": 10614, + "name": "Ghirolt", + "county": "Satu Mare" + }, + { + "id": 10615, + "name": "Istrau", + "county": "Satu Mare" + }, + { + "id": 10616, + "name": "Moftinu Mare", + "county": "Satu Mare" + }, + { + "id": 10617, + "name": "Sanmiclaus", + "county": "Satu Mare" + }, + { + "id": 10618, + "name": "Odoreu", + "county": "Satu Mare" + }, + { + "id": 10619, + "name": "Berindan", + "county": "Satu Mare" + }, + { + "id": 10620, + "name": "Cucu", + "county": "Satu Mare" + }, + { + "id": 10621, + "name": "Eteni", + "county": "Satu Mare" + }, + { + "id": 10622, + "name": "Martinesti", + "county": "Satu Mare" + }, + { + "id": 10623, + "name": "Vanatoresti", + "county": "Satu Mare" + }, + { + "id": 10624, + "name": "Orasu Nou", + "county": "Satu Mare" + }, + { + "id": 10625, + "name": "Orasu Nou-Vii", + "county": "Satu Mare" + }, + { + "id": 10626, + "name": "Prilog", + "county": "Satu Mare" + }, + { + "id": 10627, + "name": "Prilog Vii", + "county": "Satu Mare" + }, + { + "id": 10628, + "name": "Racsa", + "county": "Satu Mare" + }, + { + "id": 10629, + "name": "Racsa Vii", + "county": "Satu Mare" + }, + { + "id": 10630, + "name": "Remetea Oasului", + "county": "Satu Mare" + }, + { + "id": 10631, + "name": "Paulesti", + "county": "Satu Mare" + }, + { + "id": 10632, + "name": "Amati", + "county": "Satu Mare" + }, + { + "id": 10633, + "name": "Ambud", + "county": "Satu Mare" + }, + { + "id": 10634, + "name": "Hrip", + "county": "Satu Mare" + }, + { + "id": 10635, + "name": "Petin", + "county": "Satu Mare" + }, + { + "id": 10636, + "name": "Ruseni", + "county": "Satu Mare" + }, + { + "id": 10637, + "name": "Petresti", + "county": "Satu Mare" + }, + { + "id": 10638, + "name": "Dindestiu Mic", + "county": "Satu Mare" + }, + { + "id": 10639, + "name": "Pir", + "county": "Satu Mare" + }, + { + "id": 10640, + "name": "Piru Nou", + "county": "Satu Mare" + }, + { + "id": 10641, + "name": "Sarvazel", + "county": "Satu Mare" + }, + { + "id": 10642, + "name": "Piscolt", + "county": "Satu Mare" + }, + { + "id": 10643, + "name": "Resighea", + "county": "Satu Mare" + }, + { + "id": 10644, + "name": "Scarisoara Noua", + "county": "Satu Mare" + }, + { + "id": 10645, + "name": "Pomi", + "county": "Satu Mare" + }, + { + "id": 10646, + "name": "Aciua", + "county": "Satu Mare" + }, + { + "id": 10647, + "name": "Bicau", + "county": "Satu Mare" + }, + { + "id": 10648, + "name": "Borlesti", + "county": "Satu Mare" + }, + { + "id": 10649, + "name": "Sanislau", + "county": "Satu Mare" + }, + { + "id": 10650, + "name": "Berea", + "county": "Satu Mare" + }, + { + "id": 10651, + "name": "Ciumesti", + "county": "Satu Mare" + }, + { + "id": 10652, + "name": "Horea", + "county": "Satu Mare" + }, + { + "id": 10653, + "name": "Marna Noua", + "county": "Satu Mare" + }, + { + "id": 10654, + "name": "Viisoara", + "county": "Satu Mare" + }, + { + "id": 10655, + "name": "Santau", + "county": "Satu Mare" + }, + { + "id": 10656, + "name": "Chereusa", + "county": "Satu Mare" + }, + { + "id": 10657, + "name": "Sudurau", + "county": "Satu Mare" + }, + { + "id": 10658, + "name": "Sacaseni", + "county": "Satu Mare" + }, + { + "id": 10659, + "name": "Chegea", + "county": "Satu Mare" + }, + { + "id": 10660, + "name": "Sauca", + "county": "Satu Mare" + }, + { + "id": 10661, + "name": "Becheni", + "county": "Satu Mare" + }, + { + "id": 10662, + "name": "Cean", + "county": "Satu Mare" + }, + { + "id": 10663, + "name": "Chisau", + "county": "Satu Mare" + }, + { + "id": 10664, + "name": "Silvas", + "county": "Satu Mare" + }, + { + "id": 10665, + "name": "Socond", + "county": "Satu Mare" + }, + { + "id": 10666, + "name": "Cuta", + "county": "Satu Mare" + }, + { + "id": 10667, + "name": "Hodisa", + "county": "Satu Mare" + }, + { + "id": 10668, + "name": "Soconzel", + "county": "Satu Mare" + }, + { + "id": 10669, + "name": "Stana", + "county": "Satu Mare" + }, + { + "id": 10670, + "name": "Supuru de Jos", + "county": "Satu Mare" + }, + { + "id": 10671, + "name": "Dobra", + "county": "Satu Mare" + }, + { + "id": 10672, + "name": "Giorocuta", + "county": "Satu Mare" + }, + { + "id": 10673, + "name": "Hurezu Mare", + "county": "Satu Mare" + }, + { + "id": 10674, + "name": "Racova", + "county": "Satu Mare" + }, + { + "id": 10675, + "name": "Secheresa", + "county": "Satu Mare" + }, + { + "id": 10676, + "name": "Supuru de Sus", + "county": "Satu Mare" + }, + { + "id": 10677, + "name": "Tarna Mare", + "county": "Satu Mare" + }, + { + "id": 10678, + "name": "Bocicau", + "county": "Satu Mare" + }, + { + "id": 10679, + "name": "Valea Seaca", + "county": "Satu Mare" + }, + { + "id": 10680, + "name": "Vagas", + "county": "Satu Mare" + }, + { + "id": 10681, + "name": "Terebesti", + "county": "Satu Mare" + }, + { + "id": 10682, + "name": "Aliza", + "county": "Satu Mare" + }, + { + "id": 10683, + "name": "Gelu", + "county": "Satu Mare" + }, + { + "id": 10684, + "name": "Piscari", + "county": "Satu Mare" + }, + { + "id": 10685, + "name": "Tiream", + "county": "Satu Mare" + }, + { + "id": 10686, + "name": "Portita", + "county": "Satu Mare" + }, + { + "id": 10687, + "name": "Vezendiu", + "county": "Satu Mare" + }, + { + "id": 10688, + "name": "Tarsolt", + "county": "Satu Mare" + }, + { + "id": 10689, + "name": "Aliceni", + "county": "Satu Mare" + }, + { + "id": 10690, + "name": "Turt", + "county": "Satu Mare" + }, + { + "id": 10691, + "name": "Gherta Mare", + "county": "Satu Mare" + }, + { + "id": 10692, + "name": "Turt Bai", + "county": "Satu Mare" + }, + { + "id": 10693, + "name": "Turulung", + "county": "Satu Mare" + }, + { + "id": 10694, + "name": "Draguseni", + "county": "Satu Mare" + }, + { + "id": 10695, + "name": "Turulung Vii", + "county": "Satu Mare" + }, + { + "id": 10696, + "name": "Urziceni", + "county": "Satu Mare" + }, + { + "id": 10697, + "name": "Urziceni Padure", + "county": "Satu Mare" + }, + { + "id": 10698, + "name": "Valea Vinului", + "county": "Satu Mare" + }, + { + "id": 10699, + "name": "Marius", + "county": "Satu Mare" + }, + { + "id": 10700, + "name": "Rosiori", + "county": "Satu Mare" + }, + { + "id": 10701, + "name": "Sai", + "county": "Satu Mare" + }, + { + "id": 10702, + "name": "Vama", + "county": "Satu Mare" + }, + { + "id": 10703, + "name": "Vetis", + "county": "Satu Mare" + }, + { + "id": 10704, + "name": "Decebal", + "county": "Satu Mare" + }, + { + "id": 10705, + "name": "Oar", + "county": "Satu Mare" + }, + { + "id": 10706, + "name": "Viile Satu Mare", + "county": "Satu Mare" + }, + { + "id": 10707, + "name": "Cionchesti", + "county": "Satu Mare" + }, + { + "id": 10708, + "name": "Medisa", + "county": "Satu Mare" + }, + { + "id": 10709, + "name": "Tataresti", + "county": "Satu Mare" + }, + { + "id": 10710, + "name": "Tireac", + "county": "Satu Mare" + }, + { + "id": 10711, + "name": "Zalau", + "county": "Salaj" + }, + { + "id": 10712, + "name": "Stana", + "county": "Salaj" + }, + { + "id": 10713, + "name": "Cehu Silvaniei", + "county": "Salaj" + }, + { + "id": 10714, + "name": "Horoatu Cehului", + "county": "Salaj" + }, + { + "id": 10715, + "name": "Motis", + "county": "Salaj" + }, + { + "id": 10716, + "name": "Nadis", + "county": "Salaj" + }, + { + "id": 10717, + "name": "Ulciug", + "county": "Salaj" + }, + { + "id": 10718, + "name": "Jibou", + "county": "Salaj" + }, + { + "id": 10719, + "name": "Cuceu", + "county": "Salaj" + }, + { + "id": 10720, + "name": "Husia", + "county": "Salaj" + }, + { + "id": 10721, + "name": "Rona", + "county": "Salaj" + }, + { + "id": 10722, + "name": "Var", + "county": "Salaj" + }, + { + "id": 10723, + "name": "Simleu Silvaniei", + "county": "Salaj" + }, + { + "id": 10724, + "name": "Bic", + "county": "Salaj" + }, + { + "id": 10725, + "name": "Cehei", + "county": "Salaj" + }, + { + "id": 10726, + "name": "Pusta", + "county": "Salaj" + }, + { + "id": 10727, + "name": "Agrij", + "county": "Salaj" + }, + { + "id": 10728, + "name": "Bozna", + "county": "Salaj" + }, + { + "id": 10729, + "name": "Rastoltu Desert", + "county": "Salaj" + }, + { + "id": 10730, + "name": "Treznea", + "county": "Salaj" + }, + { + "id": 10731, + "name": "Almasu", + "county": "Salaj" + }, + { + "id": 10732, + "name": "Babiu", + "county": "Salaj" + }, + { + "id": 10733, + "name": "Cutis", + "county": "Salaj" + }, + { + "id": 10734, + "name": "Jebucu", + "county": "Salaj" + }, + { + "id": 10735, + "name": "Mesteacanu", + "county": "Salaj" + }, + { + "id": 10736, + "name": "Petrinzel", + "county": "Salaj" + }, + { + "id": 10737, + "name": "Sfaras", + "county": "Salaj" + }, + { + "id": 10738, + "name": "Stana", + "county": "Salaj" + }, + { + "id": 10739, + "name": "Taudu", + "county": "Salaj" + }, + { + "id": 10740, + "name": "Babeni", + "county": "Salaj" + }, + { + "id": 10741, + "name": "Ciocmani", + "county": "Salaj" + }, + { + "id": 10742, + "name": "Clit", + "county": "Salaj" + }, + { + "id": 10743, + "name": "Pirosa", + "county": "Salaj" + }, + { + "id": 10744, + "name": "Poienita", + "county": "Salaj" + }, + { + "id": 10745, + "name": "Balan", + "county": "Salaj" + }, + { + "id": 10746, + "name": "Chechis", + "county": "Salaj" + }, + { + "id": 10747, + "name": "Chendrea", + "county": "Salaj" + }, + { + "id": 10748, + "name": "Galpaia", + "county": "Salaj" + }, + { + "id": 10749, + "name": "Galgau Almasului", + "county": "Salaj" + }, + { + "id": 10750, + "name": "Banisor", + "county": "Salaj" + }, + { + "id": 10751, + "name": "Ban", + "county": "Salaj" + }, + { + "id": 10752, + "name": "Peceiu", + "county": "Salaj" + }, + { + "id": 10753, + "name": "Benesat", + "county": "Salaj" + }, + { + "id": 10754, + "name": "Alunis", + "county": "Salaj" + }, + { + "id": 10755, + "name": "Biusa", + "county": "Salaj" + }, + { + "id": 10756, + "name": "Bobota", + "county": "Salaj" + }, + { + "id": 10757, + "name": "Dersida", + "county": "Salaj" + }, + { + "id": 10758, + "name": "Zalnoc", + "county": "Salaj" + }, + { + "id": 10759, + "name": "Bocsa", + "county": "Salaj" + }, + { + "id": 10760, + "name": "Borla", + "county": "Salaj" + }, + { + "id": 10761, + "name": "Campia", + "county": "Salaj" + }, + { + "id": 10762, + "name": "Salajeni", + "county": "Salaj" + }, + { + "id": 10763, + "name": "Buciumi", + "county": "Salaj" + }, + { + "id": 10764, + "name": "Bodia", + "county": "Salaj" + }, + { + "id": 10765, + "name": "Bogdana", + "county": "Salaj" + }, + { + "id": 10766, + "name": "Huta", + "county": "Salaj" + }, + { + "id": 10767, + "name": "Rastolt", + "county": "Salaj" + }, + { + "id": 10768, + "name": "Sangeorgiu de Meses", + "county": "Salaj" + }, + { + "id": 10769, + "name": "Camar", + "county": "Salaj" + }, + { + "id": 10770, + "name": "Padureni", + "county": "Salaj" + }, + { + "id": 10771, + "name": "Carastelec", + "county": "Salaj" + }, + { + "id": 10772, + "name": "Dumuslau", + "county": "Salaj" + }, + { + "id": 10773, + "name": "Chiesd", + "county": "Salaj" + }, + { + "id": 10774, + "name": "Colonia Sighetu Silvaniei", + "county": "Salaj" + }, + { + "id": 10775, + "name": "Sighetu Silvaniei", + "county": "Salaj" + }, + { + "id": 10776, + "name": "Cizer", + "county": "Salaj" + }, + { + "id": 10777, + "name": "Plesca", + "county": "Salaj" + }, + { + "id": 10778, + "name": "Pria", + "county": "Salaj" + }, + { + "id": 10779, + "name": "Coseiu", + "county": "Salaj" + }, + { + "id": 10780, + "name": "Archid", + "county": "Salaj" + }, + { + "id": 10781, + "name": "Chilioara", + "county": "Salaj" + }, + { + "id": 10782, + "name": "Crasna", + "county": "Salaj" + }, + { + "id": 10783, + "name": "Huseni", + "county": "Salaj" + }, + { + "id": 10784, + "name": "Marin", + "county": "Salaj" + }, + { + "id": 10785, + "name": "Ratin", + "county": "Salaj" + }, + { + "id": 10786, + "name": "Creaca", + "county": "Salaj" + }, + { + "id": 10787, + "name": "Borza", + "county": "Salaj" + }, + { + "id": 10788, + "name": "Brebi", + "county": "Salaj" + }, + { + "id": 10789, + "name": "Brusturi", + "county": "Salaj" + }, + { + "id": 10790, + "name": "Ciglean", + "county": "Salaj" + }, + { + "id": 10791, + "name": "Jac", + "county": "Salaj" + }, + { + "id": 10792, + "name": "Lupoaia", + "county": "Salaj" + }, + { + "id": 10793, + "name": "Prodanesti", + "county": "Salaj" + }, + { + "id": 10794, + "name": "Viile Jacului", + "county": "Salaj" + }, + { + "id": 10795, + "name": "Cristolt", + "county": "Salaj" + }, + { + "id": 10796, + "name": "Muncel", + "county": "Salaj" + }, + { + "id": 10797, + "name": "Poiana Ontii", + "county": "Salaj" + }, + { + "id": 10798, + "name": "Valeni", + "county": "Salaj" + }, + { + "id": 10799, + "name": "Criseni", + "county": "Salaj" + }, + { + "id": 10800, + "name": "Cristur Criseni", + "county": "Salaj" + }, + { + "id": 10801, + "name": "Garceiu", + "county": "Salaj" + }, + { + "id": 10802, + "name": "Cuzaplac", + "county": "Salaj" + }, + { + "id": 10803, + "name": "Cublesu", + "county": "Salaj" + }, + { + "id": 10804, + "name": "Galaseni", + "county": "Salaj" + }, + { + "id": 10805, + "name": "Mierta", + "county": "Salaj" + }, + { + "id": 10806, + "name": "Petrindu", + "county": "Salaj" + }, + { + "id": 10807, + "name": "Ruginoasa", + "county": "Salaj" + }, + { + "id": 10808, + "name": "Stoboru", + "county": "Salaj" + }, + { + "id": 10809, + "name": "Tamasa", + "county": "Salaj" + }, + { + "id": 10810, + "name": "Dobrin", + "county": "Salaj" + }, + { + "id": 10811, + "name": "Deleni", + "county": "Salaj" + }, + { + "id": 10812, + "name": "Doba", + "county": "Salaj" + }, + { + "id": 10813, + "name": "Naimon", + "county": "Salaj" + }, + { + "id": 10814, + "name": "Sancraiu Silvaniei", + "county": "Salaj" + }, + { + "id": 10815, + "name": "Verveghiu", + "county": "Salaj" + }, + { + "id": 10816, + "name": "Dragu", + "county": "Salaj" + }, + { + "id": 10817, + "name": "Adalin", + "county": "Salaj" + }, + { + "id": 10818, + "name": "Fantanele", + "county": "Salaj" + }, + { + "id": 10819, + "name": "Ugrutiu", + "county": "Salaj" + }, + { + "id": 10820, + "name": "Voivodeni", + "county": "Salaj" + }, + { + "id": 10821, + "name": "Fildu de Jos", + "county": "Salaj" + }, + { + "id": 10822, + "name": "Fildu de Mijloc", + "county": "Salaj" + }, + { + "id": 10823, + "name": "Fildu de Sus", + "county": "Salaj" + }, + { + "id": 10824, + "name": "Tetisu", + "county": "Salaj" + }, + { + "id": 10825, + "name": "Galgau", + "county": "Salaj" + }, + { + "id": 10826, + "name": "Barsau Mare", + "county": "Salaj" + }, + { + "id": 10827, + "name": "Capalna", + "county": "Salaj" + }, + { + "id": 10828, + "name": "Chizeni", + "county": "Salaj" + }, + { + "id": 10829, + "name": "Dobrocina", + "county": "Salaj" + }, + { + "id": 10830, + "name": "Fodora", + "county": "Salaj" + }, + { + "id": 10831, + "name": "Francenii de Piatra", + "county": "Salaj" + }, + { + "id": 10832, + "name": "Glod", + "county": "Salaj" + }, + { + "id": 10833, + "name": "Gura Vladesei", + "county": "Salaj" + }, + { + "id": 10834, + "name": "Garbou", + "county": "Salaj" + }, + { + "id": 10835, + "name": "Bezded", + "county": "Salaj" + }, + { + "id": 10836, + "name": "Calacea", + "county": "Salaj" + }, + { + "id": 10837, + "name": "Cernuc", + "county": "Salaj" + }, + { + "id": 10838, + "name": "Fabrica", + "county": "Salaj" + }, + { + "id": 10839, + "name": "Popteleac", + "county": "Salaj" + }, + { + "id": 10840, + "name": "Solomon", + "county": "Salaj" + }, + { + "id": 10841, + "name": "Halmasd", + "county": "Salaj" + }, + { + "id": 10842, + "name": "Aleus", + "county": "Salaj" + }, + { + "id": 10843, + "name": "Cerisa", + "county": "Salaj" + }, + { + "id": 10844, + "name": "Drighiu", + "county": "Salaj" + }, + { + "id": 10845, + "name": "Fufez", + "county": "Salaj" + }, + { + "id": 10846, + "name": "Hereclean", + "county": "Salaj" + }, + { + "id": 10847, + "name": "Badon", + "county": "Salaj" + }, + { + "id": 10848, + "name": "Bocsita", + "county": "Salaj" + }, + { + "id": 10849, + "name": "Diosod", + "county": "Salaj" + }, + { + "id": 10850, + "name": "Guruslau", + "county": "Salaj" + }, + { + "id": 10851, + "name": "Panic", + "county": "Salaj" + }, + { + "id": 10852, + "name": "Hida", + "county": "Salaj" + }, + { + "id": 10853, + "name": "Baica", + "county": "Salaj" + }, + { + "id": 10854, + "name": "Miluani", + "county": "Salaj" + }, + { + "id": 10855, + "name": "Paduris", + "county": "Salaj" + }, + { + "id": 10856, + "name": "Racas", + "county": "Salaj" + }, + { + "id": 10857, + "name": "Sanpetru Almasului", + "county": "Salaj" + }, + { + "id": 10858, + "name": "Stupini", + "county": "Salaj" + }, + { + "id": 10859, + "name": "Trestia", + "county": "Salaj" + }, + { + "id": 10860, + "name": "Horoatu Crasnei", + "county": "Salaj" + }, + { + "id": 10861, + "name": "Hurez", + "county": "Salaj" + }, + { + "id": 10862, + "name": "Starciu", + "county": "Salaj" + }, + { + "id": 10863, + "name": "Seredeiu", + "county": "Salaj" + }, + { + "id": 10864, + "name": "Ileanda", + "county": "Salaj" + }, + { + "id": 10865, + "name": "Bizusa Bai", + "county": "Salaj" + }, + { + "id": 10866, + "name": "Barsauta", + "county": "Salaj" + }, + { + "id": 10867, + "name": "Dabaceni", + "county": "Salaj" + }, + { + "id": 10868, + "name": "Dolheni", + "county": "Salaj" + }, + { + "id": 10869, + "name": "Luminisu", + "county": "Salaj" + }, + { + "id": 10870, + "name": "Maleni", + "county": "Salaj" + }, + { + "id": 10871, + "name": "Negreni", + "county": "Salaj" + }, + { + "id": 10872, + "name": "Perii Vadului", + "county": "Salaj" + }, + { + "id": 10873, + "name": "Podisu", + "county": "Salaj" + }, + { + "id": 10874, + "name": "Rastoci", + "county": "Salaj" + }, + { + "id": 10875, + "name": "Rogna", + "county": "Salaj" + }, + { + "id": 10876, + "name": "Sasa", + "county": "Salaj" + }, + { + "id": 10877, + "name": "Ip", + "county": "Salaj" + }, + { + "id": 10878, + "name": "Cosniciu de Jos", + "county": "Salaj" + }, + { + "id": 10879, + "name": "Cosniciu de Sus", + "county": "Salaj" + }, + { + "id": 10880, + "name": "Zauan", + "county": "Salaj" + }, + { + "id": 10881, + "name": "Zauan Bai", + "county": "Salaj" + }, + { + "id": 10882, + "name": "Letca", + "county": "Salaj" + }, + { + "id": 10883, + "name": "Ciula", + "county": "Salaj" + }, + { + "id": 10884, + "name": "Cozla", + "county": "Salaj" + }, + { + "id": 10885, + "name": "Cuciulat", + "county": "Salaj" + }, + { + "id": 10886, + "name": "Lemniu", + "county": "Salaj" + }, + { + "id": 10887, + "name": "Purcaret", + "county": "Salaj" + }, + { + "id": 10888, + "name": "Soimuseni", + "county": "Salaj" + }, + { + "id": 10889, + "name": "Toplita", + "county": "Salaj" + }, + { + "id": 10890, + "name": "Valisoara", + "county": "Salaj" + }, + { + "id": 10891, + "name": "Lozna", + "county": "Salaj" + }, + { + "id": 10892, + "name": "Cormenis", + "county": "Salaj" + }, + { + "id": 10893, + "name": "Preluci", + "county": "Salaj" + }, + { + "id": 10894, + "name": "Valea Lesului", + "county": "Salaj" + }, + { + "id": 10895, + "name": "Valea Loznei", + "county": "Salaj" + }, + { + "id": 10896, + "name": "Marca", + "county": "Salaj" + }, + { + "id": 10897, + "name": "Lesmir", + "county": "Salaj" + }, + { + "id": 10898, + "name": "Marca Huta", + "county": "Salaj" + }, + { + "id": 10899, + "name": "Port", + "county": "Salaj" + }, + { + "id": 10900, + "name": "Sumal", + "county": "Salaj" + }, + { + "id": 10901, + "name": "Maeriste", + "county": "Salaj" + }, + { + "id": 10902, + "name": "Cristelec", + "county": "Salaj" + }, + { + "id": 10903, + "name": "Doh", + "county": "Salaj" + }, + { + "id": 10904, + "name": "Giurtelecu Simleului", + "county": "Salaj" + }, + { + "id": 10905, + "name": "Maladia", + "county": "Salaj" + }, + { + "id": 10906, + "name": "Uileacu Simleului", + "county": "Salaj" + }, + { + "id": 10907, + "name": "Mesesenii de Jos", + "county": "Salaj" + }, + { + "id": 10908, + "name": "Aghires", + "county": "Salaj" + }, + { + "id": 10909, + "name": "Fetindia", + "county": "Salaj" + }, + { + "id": 10910, + "name": "Mesesenii de Sus", + "county": "Salaj" + }, + { + "id": 10911, + "name": "Mirsid", + "county": "Salaj" + }, + { + "id": 10912, + "name": "Firminis", + "county": "Salaj" + }, + { + "id": 10913, + "name": "Moigrad-Porolissum", + "county": "Salaj" + }, + { + "id": 10914, + "name": "Popeni", + "county": "Salaj" + }, + { + "id": 10915, + "name": "Napradea", + "county": "Salaj" + }, + { + "id": 10916, + "name": "Cheud", + "county": "Salaj" + }, + { + "id": 10917, + "name": "Somes Guruslau", + "county": "Salaj" + }, + { + "id": 10918, + "name": "Tranis", + "county": "Salaj" + }, + { + "id": 10919, + "name": "Vadurele", + "county": "Salaj" + }, + { + "id": 10920, + "name": "Nusfalau", + "county": "Salaj" + }, + { + "id": 10921, + "name": "Bilghez", + "county": "Salaj" + }, + { + "id": 10922, + "name": "Boghis", + "county": "Salaj" + }, + { + "id": 10923, + "name": "Bozies", + "county": "Salaj" + }, + { + "id": 10924, + "name": "Pericei", + "county": "Salaj" + }, + { + "id": 10925, + "name": "Badacin", + "county": "Salaj" + }, + { + "id": 10926, + "name": "Periceiu Mic", + "county": "Salaj" + }, + { + "id": 10927, + "name": "Sici", + "county": "Salaj" + }, + { + "id": 10928, + "name": "Plopis", + "county": "Salaj" + }, + { + "id": 10929, + "name": "Fagetu", + "county": "Salaj" + }, + { + "id": 10930, + "name": "Iaz", + "county": "Salaj" + }, + { + "id": 10931, + "name": "Poiana Blenchii", + "county": "Salaj" + }, + { + "id": 10932, + "name": "Falcusa", + "county": "Salaj" + }, + { + "id": 10933, + "name": "Gostila", + "county": "Salaj" + }, + { + "id": 10934, + "name": "Magura", + "county": "Salaj" + }, + { + "id": 10935, + "name": "Romanasi", + "county": "Salaj" + }, + { + "id": 10936, + "name": "Chichisa", + "county": "Salaj" + }, + { + "id": 10937, + "name": "Ciumarna", + "county": "Salaj" + }, + { + "id": 10938, + "name": "Pausa", + "county": "Salaj" + }, + { + "id": 10939, + "name": "Poarta Salajului", + "county": "Salaj" + }, + { + "id": 10940, + "name": "Romita", + "county": "Salaj" + }, + { + "id": 10941, + "name": "Rus", + "county": "Salaj" + }, + { + "id": 10942, + "name": "Buzas", + "county": "Salaj" + }, + { + "id": 10943, + "name": "Fantanele Rus", + "county": "Salaj" + }, + { + "id": 10944, + "name": "Hasmas", + "county": "Salaj" + }, + { + "id": 10945, + "name": "Simisna", + "county": "Salaj" + }, + { + "id": 10946, + "name": "Salatig", + "county": "Salaj" + }, + { + "id": 10947, + "name": "Bulgari", + "county": "Salaj" + }, + { + "id": 10948, + "name": "Deja", + "county": "Salaj" + }, + { + "id": 10949, + "name": "Mineu", + "county": "Salaj" + }, + { + "id": 10950, + "name": "Notig", + "county": "Salaj" + }, + { + "id": 10951, + "name": "Sag", + "county": "Salaj" + }, + { + "id": 10952, + "name": "Fizes", + "county": "Salaj" + }, + { + "id": 10953, + "name": "Mal", + "county": "Salaj" + }, + { + "id": 10954, + "name": "Sarbi", + "county": "Salaj" + }, + { + "id": 10955, + "name": "Tusa", + "county": "Salaj" + }, + { + "id": 10956, + "name": "Sanmihaiu Almasului", + "county": "Salaj" + }, + { + "id": 10957, + "name": "Bercea", + "county": "Salaj" + }, + { + "id": 10958, + "name": "Santa Maria", + "county": "Salaj" + }, + { + "id": 10959, + "name": "Somes-Odorhei", + "county": "Salaj" + }, + { + "id": 10960, + "name": "Barsa", + "county": "Salaj" + }, + { + "id": 10961, + "name": "Domnin", + "county": "Salaj" + }, + { + "id": 10962, + "name": "Inau", + "county": "Salaj" + }, + { + "id": 10963, + "name": "Soimus", + "county": "Salaj" + }, + { + "id": 10964, + "name": "Surduc", + "county": "Salaj" + }, + { + "id": 10965, + "name": "Braglez", + "county": "Salaj" + }, + { + "id": 10966, + "name": "Cristoltel", + "county": "Salaj" + }, + { + "id": 10967, + "name": "Solona", + "county": "Salaj" + }, + { + "id": 10968, + "name": "Testioara", + "county": "Salaj" + }, + { + "id": 10969, + "name": "Tihau", + "county": "Salaj" + }, + { + "id": 10970, + "name": "Turbuta", + "county": "Salaj" + }, + { + "id": 10971, + "name": "Samsud", + "county": "Salaj" + }, + { + "id": 10972, + "name": "Valea Pomilor", + "county": "Salaj" + }, + { + "id": 10973, + "name": "Sarmasag", + "county": "Salaj" + }, + { + "id": 10974, + "name": "Ilisua", + "county": "Salaj" + }, + { + "id": 10975, + "name": "Lompirt", + "county": "Salaj" + }, + { + "id": 10976, + "name": "Moiad", + "county": "Salaj" + }, + { + "id": 10977, + "name": "Poiana Magura", + "county": "Salaj" + }, + { + "id": 10978, + "name": "Tarmure", + "county": "Salaj" + }, + { + "id": 10979, + "name": "Valcau de Jos", + "county": "Salaj" + }, + { + "id": 10980, + "name": "Lazuri", + "county": "Salaj" + }, + { + "id": 10981, + "name": "Preoteasa", + "county": "Salaj" + }, + { + "id": 10982, + "name": "Ratovei", + "county": "Salaj" + }, + { + "id": 10983, + "name": "Sub Cetate", + "county": "Salaj" + }, + { + "id": 10984, + "name": "Valcau de Sus", + "county": "Salaj" + }, + { + "id": 10985, + "name": "Varsolt", + "county": "Salaj" + }, + { + "id": 10986, + "name": "Recea", + "county": "Salaj" + }, + { + "id": 10987, + "name": "Recea Mica", + "county": "Salaj" + }, + { + "id": 10988, + "name": "Zalha", + "county": "Salaj" + }, + { + "id": 10989, + "name": "Ceaca", + "county": "Salaj" + }, + { + "id": 10990, + "name": "Ciureni", + "county": "Salaj" + }, + { + "id": 10991, + "name": "Valea Ciurenilor", + "county": "Salaj" + }, + { + "id": 10992, + "name": "Valea Hranei", + "county": "Salaj" + }, + { + "id": 10993, + "name": "Valea Lunga", + "county": "Salaj" + }, + { + "id": 10994, + "name": "Vartesca", + "county": "Salaj" + }, + { + "id": 10995, + "name": "Zimbor", + "county": "Salaj" + }, + { + "id": 10996, + "name": "Chendremal", + "county": "Salaj" + }, + { + "id": 10997, + "name": "Dolu", + "county": "Salaj" + }, + { + "id": 10998, + "name": "Sutoru", + "county": "Salaj" + }, + { + "id": 10999, + "name": "Sancraiu Almasului", + "county": "Salaj" + }, + { + "id": 11000, + "name": "Sibiu", + "county": "Sibiu" + }, + { + "id": 11001, + "name": "Paltinis", + "county": "Sibiu" + }, + { + "id": 11002, + "name": "Cristian", + "county": "Sibiu" + }, + { + "id": 11003, + "name": "Poplaca", + "county": "Sibiu" + }, + { + "id": 11004, + "name": "Rasinari", + "county": "Sibiu" + }, + { + "id": 11005, + "name": "Prislop", + "county": "Sibiu" + }, + { + "id": 11006, + "name": "Selimbar", + "county": "Sibiu" + }, + { + "id": 11007, + "name": "Bungard", + "county": "Sibiu" + }, + { + "id": 11008, + "name": "Mohu", + "county": "Sibiu" + }, + { + "id": 11009, + "name": "Vestem", + "county": "Sibiu" + }, + { + "id": 11010, + "name": "Medias", + "county": "Sibiu" + }, + { + "id": 11011, + "name": "Ighisu Nou", + "county": "Sibiu" + }, + { + "id": 11012, + "name": "Tarnava", + "county": "Sibiu" + }, + { + "id": 11013, + "name": "Colonia Tarnava", + "county": "Sibiu" + }, + { + "id": 11014, + "name": "Agnita", + "county": "Sibiu" + }, + { + "id": 11015, + "name": "Coves", + "county": "Sibiu" + }, + { + "id": 11016, + "name": "Ruja", + "county": "Sibiu" + }, + { + "id": 11017, + "name": "Cisnadie", + "county": "Sibiu" + }, + { + "id": 11018, + "name": "Cisnadioara", + "county": "Sibiu" + }, + { + "id": 11019, + "name": "Copsa Mica", + "county": "Sibiu" + }, + { + "id": 11020, + "name": "Dumbraveni", + "county": "Sibiu" + }, + { + "id": 11021, + "name": "Ernea", + "county": "Sibiu" + }, + { + "id": 11022, + "name": "Saros pe Tarnave", + "county": "Sibiu" + }, + { + "id": 11023, + "name": "Ocna Sibiului", + "county": "Sibiu" + }, + { + "id": 11024, + "name": "Toparcea", + "county": "Sibiu" + }, + { + "id": 11025, + "name": "Altina", + "county": "Sibiu" + }, + { + "id": 11026, + "name": "Benesti", + "county": "Sibiu" + }, + { + "id": 11027, + "name": "Ghijasa de Sus", + "county": "Sibiu" + }, + { + "id": 11028, + "name": "Apoldu de Jos", + "county": "Sibiu" + }, + { + "id": 11029, + "name": "Sangatin", + "county": "Sibiu" + }, + { + "id": 11030, + "name": "Arpasu de Jos", + "county": "Sibiu" + }, + { + "id": 11031, + "name": "Arpasu de Sus", + "county": "Sibiu" + }, + { + "id": 11032, + "name": "Noul Roman", + "county": "Sibiu" + }, + { + "id": 11033, + "name": "Atel", + "county": "Sibiu" + }, + { + "id": 11034, + "name": "Alma", + "county": "Sibiu" + }, + { + "id": 11035, + "name": "Dupus", + "county": "Sibiu" + }, + { + "id": 11036, + "name": "Giacas", + "county": "Sibiu" + }, + { + "id": 11037, + "name": "Smig", + "county": "Sibiu" + }, + { + "id": 11038, + "name": "Avrig", + "county": "Sibiu" + }, + { + "id": 11039, + "name": "Bradu", + "county": "Sibiu" + }, + { + "id": 11040, + "name": "Glamboaca", + "county": "Sibiu" + }, + { + "id": 11041, + "name": "Marsa", + "county": "Sibiu" + }, + { + "id": 11042, + "name": "Sacadate", + "county": "Sibiu" + }, + { + "id": 11043, + "name": "Axente Sever", + "county": "Sibiu" + }, + { + "id": 11044, + "name": "Agarbiciu", + "county": "Sibiu" + }, + { + "id": 11045, + "name": "Soala", + "county": "Sibiu" + }, + { + "id": 11046, + "name": "Bazna", + "county": "Sibiu" + }, + { + "id": 11047, + "name": "Boian", + "county": "Sibiu" + }, + { + "id": 11048, + "name": "Velt", + "county": "Sibiu" + }, + { + "id": 11049, + "name": "Biertan", + "county": "Sibiu" + }, + { + "id": 11050, + "name": "Copsa Mare", + "county": "Sibiu" + }, + { + "id": 11051, + "name": "Richis", + "county": "Sibiu" + }, + { + "id": 11052, + "name": "Barghis", + "county": "Sibiu" + }, + { + "id": 11053, + "name": "Apos", + "county": "Sibiu" + }, + { + "id": 11054, + "name": "Ighisu Vechi", + "county": "Sibiu" + }, + { + "id": 11055, + "name": "Pelisor", + "county": "Sibiu" + }, + { + "id": 11056, + "name": "Vecerd", + "county": "Sibiu" + }, + { + "id": 11057, + "name": "Zlagna", + "county": "Sibiu" + }, + { + "id": 11058, + "name": "Blajel", + "county": "Sibiu" + }, + { + "id": 11059, + "name": "Paucea", + "county": "Sibiu" + }, + { + "id": 11060, + "name": "Romanesti", + "county": "Sibiu" + }, + { + "id": 11061, + "name": "Brateiu", + "county": "Sibiu" + }, + { + "id": 11062, + "name": "Buzd", + "county": "Sibiu" + }, + { + "id": 11063, + "name": "Bradeni", + "county": "Sibiu" + }, + { + "id": 11064, + "name": "Retis", + "county": "Sibiu" + }, + { + "id": 11065, + "name": "Teline", + "county": "Sibiu" + }, + { + "id": 11066, + "name": "Bruiu", + "county": "Sibiu" + }, + { + "id": 11067, + "name": "Gherdeal", + "county": "Sibiu" + }, + { + "id": 11068, + "name": "Somartin", + "county": "Sibiu" + }, + { + "id": 11069, + "name": "Chirpar", + "county": "Sibiu" + }, + { + "id": 11070, + "name": "Sasaus", + "county": "Sibiu" + }, + { + "id": 11071, + "name": "Vard", + "county": "Sibiu" + }, + { + "id": 11072, + "name": "Veseud", + "county": "Sibiu" + }, + { + "id": 11073, + "name": "Carta", + "county": "Sibiu" + }, + { + "id": 11074, + "name": "Poienita", + "county": "Sibiu" + }, + { + "id": 11075, + "name": "Cartisoara", + "county": "Sibiu" + }, + { + "id": 11076, + "name": "Darlos", + "county": "Sibiu" + }, + { + "id": 11077, + "name": "Curciu", + "county": "Sibiu" + }, + { + "id": 11078, + "name": "Valea Lunga", + "county": "Sibiu" + }, + { + "id": 11079, + "name": "Gura Raului", + "county": "Sibiu" + }, + { + "id": 11080, + "name": "Hoghilag", + "county": "Sibiu" + }, + { + "id": 11081, + "name": "Prod", + "county": "Sibiu" + }, + { + "id": 11082, + "name": "Valchid", + "county": "Sibiu" + }, + { + "id": 11083, + "name": "Iacobeni", + "county": "Sibiu" + }, + { + "id": 11084, + "name": "Movile", + "county": "Sibiu" + }, + { + "id": 11085, + "name": "Netus", + "county": "Sibiu" + }, + { + "id": 11086, + "name": "Noistat", + "county": "Sibiu" + }, + { + "id": 11087, + "name": "Stejarisu", + "county": "Sibiu" + }, + { + "id": 11088, + "name": "Jina", + "county": "Sibiu" + }, + { + "id": 11089, + "name": "Laslea", + "county": "Sibiu" + }, + { + "id": 11090, + "name": "Floresti", + "county": "Sibiu" + }, + { + "id": 11091, + "name": "Malancrav", + "county": "Sibiu" + }, + { + "id": 11092, + "name": "Nou Sasesc", + "county": "Sibiu" + }, + { + "id": 11093, + "name": "Roandola", + "county": "Sibiu" + }, + { + "id": 11094, + "name": "Loamnes", + "county": "Sibiu" + }, + { + "id": 11095, + "name": "Alamor", + "county": "Sibiu" + }, + { + "id": 11096, + "name": "Armeni", + "county": "Sibiu" + }, + { + "id": 11097, + "name": "Hasag", + "county": "Sibiu" + }, + { + "id": 11098, + "name": "Mandra", + "county": "Sibiu" + }, + { + "id": 11099, + "name": "Sadinca", + "county": "Sibiu" + }, + { + "id": 11100, + "name": "Ludos", + "county": "Sibiu" + }, + { + "id": 11101, + "name": "Gusu", + "county": "Sibiu" + }, + { + "id": 11102, + "name": "Marpod", + "county": "Sibiu" + }, + { + "id": 11103, + "name": "Ilimbav", + "county": "Sibiu" + }, + { + "id": 11104, + "name": "Miercurea Sibiului", + "county": "Sibiu" + }, + { + "id": 11105, + "name": "Apoldu de Sus", + "county": "Sibiu" + }, + { + "id": 11106, + "name": "Dobarca", + "county": "Sibiu" + }, + { + "id": 11107, + "name": "Merghindeal", + "county": "Sibiu" + }, + { + "id": 11108, + "name": "Dealu Frumos", + "county": "Sibiu" + }, + { + "id": 11109, + "name": "Micasasa", + "county": "Sibiu" + }, + { + "id": 11110, + "name": "Chesler", + "county": "Sibiu" + }, + { + "id": 11111, + "name": "Tapu", + "county": "Sibiu" + }, + { + "id": 11112, + "name": "Valeni", + "county": "Sibiu" + }, + { + "id": 11113, + "name": "Mihaileni", + "county": "Sibiu" + }, + { + "id": 11114, + "name": "Metis", + "county": "Sibiu" + }, + { + "id": 11115, + "name": "Moardas", + "county": "Sibiu" + }, + { + "id": 11116, + "name": "Ravasel", + "county": "Sibiu" + }, + { + "id": 11117, + "name": "Salcau", + "county": "Sibiu" + }, + { + "id": 11118, + "name": "Mosna", + "county": "Sibiu" + }, + { + "id": 11119, + "name": "Alma Vii", + "county": "Sibiu" + }, + { + "id": 11120, + "name": "Nemsa", + "county": "Sibiu" + }, + { + "id": 11121, + "name": "Nocrich", + "county": "Sibiu" + }, + { + "id": 11122, + "name": "Fofeldea", + "county": "Sibiu" + }, + { + "id": 11123, + "name": "Ghijasa de Jos", + "county": "Sibiu" + }, + { + "id": 11124, + "name": "Hosman", + "county": "Sibiu" + }, + { + "id": 11125, + "name": "Tichindeal", + "county": "Sibiu" + }, + { + "id": 11126, + "name": "Orlat", + "county": "Sibiu" + }, + { + "id": 11127, + "name": "Pauca", + "county": "Sibiu" + }, + { + "id": 11128, + "name": "Bogatu Roman", + "county": "Sibiu" + }, + { + "id": 11129, + "name": "Brosteni", + "county": "Sibiu" + }, + { + "id": 11130, + "name": "Presaca", + "county": "Sibiu" + }, + { + "id": 11131, + "name": "Poiana Sibiului", + "county": "Sibiu" + }, + { + "id": 11132, + "name": "Porumbacu de Jos", + "county": "Sibiu" + }, + { + "id": 11133, + "name": "Colun", + "county": "Sibiu" + }, + { + "id": 11134, + "name": "Porumbacu de Sus", + "county": "Sibiu" + }, + { + "id": 11135, + "name": "Sarata", + "county": "Sibiu" + }, + { + "id": 11136, + "name": "Scoreiu", + "county": "Sibiu" + }, + { + "id": 11137, + "name": "Racovita", + "county": "Sibiu" + }, + { + "id": 11138, + "name": "Sebesu de Sus", + "county": "Sibiu" + }, + { + "id": 11139, + "name": "Rau Sadului", + "county": "Sibiu" + }, + { + "id": 11140, + "name": "Rosia", + "county": "Sibiu" + }, + { + "id": 11141, + "name": "Casolt", + "county": "Sibiu" + }, + { + "id": 11142, + "name": "Cornatel", + "county": "Sibiu" + }, + { + "id": 11143, + "name": "Daia", + "county": "Sibiu" + }, + { + "id": 11144, + "name": "Nou", + "county": "Sibiu" + }, + { + "id": 11145, + "name": "Nucet", + "county": "Sibiu" + }, + { + "id": 11146, + "name": "Sadu", + "county": "Sibiu" + }, + { + "id": 11147, + "name": "Saliste", + "county": "Sibiu" + }, + { + "id": 11148, + "name": "Aciliu", + "county": "Sibiu" + }, + { + "id": 11149, + "name": "Amnas", + "county": "Sibiu" + }, + { + "id": 11150, + "name": "Crint", + "county": "Sibiu" + }, + { + "id": 11151, + "name": "Gales", + "county": "Sibiu" + }, + { + "id": 11152, + "name": "Fantanele", + "county": "Sibiu" + }, + { + "id": 11153, + "name": "Mag", + "county": "Sibiu" + }, + { + "id": 11154, + "name": "Sacel", + "county": "Sibiu" + }, + { + "id": 11155, + "name": "Sibiel", + "county": "Sibiu" + }, + { + "id": 11156, + "name": "Vale", + "county": "Sibiu" + }, + { + "id": 11157, + "name": "Slimnic", + "county": "Sibiu" + }, + { + "id": 11158, + "name": "Albi", + "county": "Sibiu" + }, + { + "id": 11159, + "name": "Padureni", + "county": "Sibiu" + }, + { + "id": 11160, + "name": "Rusi", + "county": "Sibiu" + }, + { + "id": 11161, + "name": "Veseud", + "county": "Sibiu" + }, + { + "id": 11162, + "name": "Seica Mare", + "county": "Sibiu" + }, + { + "id": 11163, + "name": "Boarta", + "county": "Sibiu" + }, + { + "id": 11164, + "name": "Buia", + "county": "Sibiu" + }, + { + "id": 11165, + "name": "Mighindoala", + "county": "Sibiu" + }, + { + "id": 11166, + "name": "Petis", + "county": "Sibiu" + }, + { + "id": 11167, + "name": "Stenea", + "county": "Sibiu" + }, + { + "id": 11168, + "name": "Seica Mica", + "county": "Sibiu" + }, + { + "id": 11169, + "name": "Sorostin", + "county": "Sibiu" + }, + { + "id": 11170, + "name": "Sura Mare", + "county": "Sibiu" + }, + { + "id": 11171, + "name": "Hamba", + "county": "Sibiu" + }, + { + "id": 11172, + "name": "Sura Mica", + "county": "Sibiu" + }, + { + "id": 11173, + "name": "Rusciori", + "county": "Sibiu" + }, + { + "id": 11174, + "name": "Talmaciu", + "county": "Sibiu" + }, + { + "id": 11175, + "name": "Boita", + "county": "Sibiu" + }, + { + "id": 11176, + "name": "Colonia Talmaciu", + "county": "Sibiu" + }, + { + "id": 11177, + "name": "Lazaret", + "county": "Sibiu" + }, + { + "id": 11178, + "name": "Lotrioara", + "county": "Sibiu" + }, + { + "id": 11179, + "name": "Paltin", + "county": "Sibiu" + }, + { + "id": 11180, + "name": "Talmacel", + "county": "Sibiu" + }, + { + "id": 11181, + "name": "Tilisca", + "county": "Sibiu" + }, + { + "id": 11182, + "name": "Rod", + "county": "Sibiu" + }, + { + "id": 11183, + "name": "Turnu Rosu", + "county": "Sibiu" + }, + { + "id": 11184, + "name": "Sebesu de Jos", + "county": "Sibiu" + }, + { + "id": 11185, + "name": "Valea Viilor", + "county": "Sibiu" + }, + { + "id": 11186, + "name": "Motis", + "county": "Sibiu" + }, + { + "id": 11187, + "name": "Vurpar", + "county": "Sibiu" + }, + { + "id": 11188, + "name": "Suceava", + "county": "Suceava" + }, + { + "id": 11189, + "name": "Ipotesti", + "county": "Suceava" + }, + { + "id": 11190, + "name": "Lisaura", + "county": "Suceava" + }, + { + "id": 11191, + "name": "Tisauti", + "county": "Suceava" + }, + { + "id": 11192, + "name": "Mitocu Dragomirnei", + "county": "Suceava" + }, + { + "id": 11193, + "name": "Dragomirna", + "county": "Suceava" + }, + { + "id": 11194, + "name": "Lipoveni", + "county": "Suceava" + }, + { + "id": 11195, + "name": "Mitocasi", + "county": "Suceava" + }, + { + "id": 11196, + "name": "Salcea", + "county": "Suceava" + }, + { + "id": 11197, + "name": "Mereni", + "county": "Suceava" + }, + { + "id": 11198, + "name": "Plopeni", + "county": "Suceava" + }, + { + "id": 11199, + "name": "Prelipca", + "county": "Suceava" + }, + { + "id": 11200, + "name": "Varatec", + "county": "Suceava" + }, + { + "id": 11201, + "name": "Scheia", + "county": "Suceava" + }, + { + "id": 11202, + "name": "Florinta", + "county": "Suceava" + }, + { + "id": 11203, + "name": "Mihoveni", + "county": "Suceava" + }, + { + "id": 11204, + "name": "Sfantu Ilie", + "county": "Suceava" + }, + { + "id": 11205, + "name": "Trei Movile", + "county": "Suceava" + }, + { + "id": 11206, + "name": "Campulung Moldovenesc", + "county": "Suceava" + }, + { + "id": 11207, + "name": "Falticeni", + "county": "Suceava" + }, + { + "id": 11208, + "name": "Soldanesti", + "county": "Suceava" + }, + { + "id": 11209, + "name": "Tarna Mare", + "county": "Suceava" + }, + { + "id": 11210, + "name": "Gura Humorului", + "county": "Suceava" + }, + { + "id": 11211, + "name": "Voronet", + "county": "Suceava" + }, + { + "id": 11212, + "name": "Radauti", + "county": "Suceava" + }, + { + "id": 11213, + "name": "Siret", + "county": "Suceava" + }, + { + "id": 11214, + "name": "Manastioara", + "county": "Suceava" + }, + { + "id": 11215, + "name": "Padureni", + "county": "Suceava" + }, + { + "id": 11216, + "name": "Solca", + "county": "Suceava" + }, + { + "id": 11217, + "name": "Poieni-Solca", + "county": "Suceava" + }, + { + "id": 11218, + "name": "Vatra Dornei", + "county": "Suceava" + }, + { + "id": 11219, + "name": "Argestru", + "county": "Suceava" + }, + { + "id": 11220, + "name": "Rosu", + "county": "Suceava" + }, + { + "id": 11221, + "name": "Todireni", + "county": "Suceava" + }, + { + "id": 11222, + "name": "Adancata", + "county": "Suceava" + }, + { + "id": 11223, + "name": "Artari", + "county": "Suceava" + }, + { + "id": 11224, + "name": "Beresti", + "county": "Suceava" + }, + { + "id": 11225, + "name": "Calugareni", + "county": "Suceava" + }, + { + "id": 11226, + "name": "Fetesti", + "county": "Suceava" + }, + { + "id": 11227, + "name": "Hantesti", + "county": "Suceava" + }, + { + "id": 11228, + "name": "Arbore", + "county": "Suceava" + }, + { + "id": 11229, + "name": "Bodnareni", + "county": "Suceava" + }, + { + "id": 11230, + "name": "Clit", + "county": "Suceava" + }, + { + "id": 11231, + "name": "Baia", + "county": "Suceava" + }, + { + "id": 11232, + "name": "Bogata", + "county": "Suceava" + }, + { + "id": 11233, + "name": "Badeuti", + "county": "Suceava" + }, + { + "id": 11234, + "name": "Gara", + "county": "Suceava" + }, + { + "id": 11235, + "name": "Iaslovat", + "county": "Suceava" + }, + { + "id": 11236, + "name": "Lunca", + "county": "Suceava" + }, + { + "id": 11237, + "name": "Milisauti", + "county": "Suceava" + }, + { + "id": 11238, + "name": "Balcauti", + "county": "Suceava" + }, + { + "id": 11239, + "name": "Gropeni", + "county": "Suceava" + }, + { + "id": 11240, + "name": "Negostina", + "county": "Suceava" + }, + { + "id": 11241, + "name": "Bilca", + "county": "Suceava" + }, + { + "id": 11242, + "name": "Bogdanesti", + "county": "Suceava" + }, + { + "id": 11243, + "name": "Boroaia", + "county": "Suceava" + }, + { + "id": 11244, + "name": "Barasti", + "county": "Suceava" + }, + { + "id": 11245, + "name": "Giulesti", + "county": "Suceava" + }, + { + "id": 11246, + "name": "Moisa", + "county": "Suceava" + }, + { + "id": 11247, + "name": "Sacuta", + "county": "Suceava" + }, + { + "id": 11248, + "name": "Bosanci", + "county": "Suceava" + }, + { + "id": 11249, + "name": "Cumparatura", + "county": "Suceava" + }, + { + "id": 11250, + "name": "Botosana", + "county": "Suceava" + }, + { + "id": 11251, + "name": "Comanesti", + "county": "Suceava" + }, + { + "id": 11252, + "name": "Humoreni", + "county": "Suceava" + }, + { + "id": 11253, + "name": "Breaza", + "county": "Suceava" + }, + { + "id": 11254, + "name": "Breaza de Sus", + "county": "Suceava" + }, + { + "id": 11255, + "name": "Parau Negrei", + "county": "Suceava" + }, + { + "id": 11256, + "name": "Brodina", + "county": "Suceava" + }, + { + "id": 11257, + "name": "Brodina de Jos", + "county": "Suceava" + }, + { + "id": 11258, + "name": "Cununschi", + "county": "Suceava" + }, + { + "id": 11259, + "name": "Dubiusca", + "county": "Suceava" + }, + { + "id": 11260, + "name": "Ehreste", + "county": "Suceava" + }, + { + "id": 11261, + "name": "Falcau", + "county": "Suceava" + }, + { + "id": 11262, + "name": "Norocu", + "county": "Suceava" + }, + { + "id": 11263, + "name": "Paltin", + "county": "Suceava" + }, + { + "id": 11264, + "name": "Sadau", + "county": "Suceava" + }, + { + "id": 11265, + "name": "Zalomestra", + "county": "Suceava" + }, + { + "id": 11266, + "name": "Brosteni", + "county": "Suceava" + }, + { + "id": 11267, + "name": "Cotargasi", + "county": "Suceava" + }, + { + "id": 11268, + "name": "Darmoxa", + "county": "Suceava" + }, + { + "id": 11269, + "name": "Frasin", + "county": "Suceava" + }, + { + "id": 11270, + "name": "Haleasa", + "county": "Suceava" + }, + { + "id": 11271, + "name": "Holda", + "county": "Suceava" + }, + { + "id": 11272, + "name": "Holdita", + "county": "Suceava" + }, + { + "id": 11273, + "name": "Lungeni", + "county": "Suceava" + }, + { + "id": 11274, + "name": "Neagra", + "county": "Suceava" + }, + { + "id": 11275, + "name": "Pietroasa", + "county": "Suceava" + }, + { + "id": 11276, + "name": "Bunesti", + "county": "Suceava" + }, + { + "id": 11277, + "name": "Petia", + "county": "Suceava" + }, + { + "id": 11278, + "name": "Podeni", + "county": "Suceava" + }, + { + "id": 11279, + "name": "Ses", + "county": "Suceava" + }, + { + "id": 11280, + "name": "Uncesti", + "county": "Suceava" + }, + { + "id": 11281, + "name": "Partestii de Sus", + "county": "Suceava" + }, + { + "id": 11282, + "name": "Cacica", + "county": "Suceava" + }, + { + "id": 11283, + "name": "Maidan", + "county": "Suceava" + }, + { + "id": 11284, + "name": "Runcu", + "county": "Suceava" + }, + { + "id": 11285, + "name": "Solonetu Nou", + "county": "Suceava" + }, + { + "id": 11286, + "name": "Calafindesti", + "county": "Suceava" + }, + { + "id": 11287, + "name": "Botosanita Mare", + "county": "Suceava" + }, + { + "id": 11288, + "name": "Calinesti", + "county": "Suceava" + }, + { + "id": 11289, + "name": "Serbauti", + "county": "Suceava" + }, + { + "id": 11290, + "name": "Cajvana", + "county": "Suceava" + }, + { + "id": 11291, + "name": "Codru", + "county": "Suceava" + }, + { + "id": 11292, + "name": "Ilisesti", + "county": "Suceava" + }, + { + "id": 11293, + "name": "Balaceana", + "county": "Suceava" + }, + { + "id": 11294, + "name": "Brasca", + "county": "Suceava" + }, + { + "id": 11295, + "name": "Ciprian Porumbescu", + "county": "Suceava" + }, + { + "id": 11296, + "name": "Carlibaba", + "county": "Suceava" + }, + { + "id": 11297, + "name": "Carlibaba Noua", + "county": "Suceava" + }, + { + "id": 11298, + "name": "Iedu", + "county": "Suceava" + }, + { + "id": 11299, + "name": "Sesuri", + "county": "Suceava" + }, + { + "id": 11300, + "name": "Tibau", + "county": "Suceava" + }, + { + "id": 11301, + "name": "Valea Stanei", + "county": "Suceava" + }, + { + "id": 11302, + "name": "Cornu Luncii", + "county": "Suceava" + }, + { + "id": 11303, + "name": "Baisesti", + "county": "Suceava" + }, + { + "id": 11304, + "name": "Braiesti", + "county": "Suceava" + }, + { + "id": 11305, + "name": "Dumbrava", + "county": "Suceava" + }, + { + "id": 11306, + "name": "Paiseni", + "county": "Suceava" + }, + { + "id": 11307, + "name": "Sasca Mare", + "county": "Suceava" + }, + { + "id": 11308, + "name": "Sasca Mica", + "county": "Suceava" + }, + { + "id": 11309, + "name": "Sasca Noua", + "county": "Suceava" + }, + { + "id": 11310, + "name": "Sinca", + "county": "Suceava" + }, + { + "id": 11311, + "name": "Crucea", + "county": "Suceava" + }, + { + "id": 11312, + "name": "Chiril", + "county": "Suceava" + }, + { + "id": 11313, + "name": "Cojoci", + "county": "Suceava" + }, + { + "id": 11314, + "name": "Satu Mare", + "county": "Suceava" + }, + { + "id": 11315, + "name": "Maritei", + "county": "Suceava" + }, + { + "id": 11316, + "name": "Danila", + "county": "Suceava" + }, + { + "id": 11317, + "name": "Darmanesti", + "county": "Suceava" + }, + { + "id": 11318, + "name": "Calinesti", + "county": "Suceava" + }, + { + "id": 11319, + "name": "Calinesti-Vasilache", + "county": "Suceava" + }, + { + "id": 11320, + "name": "Mariteia Mica", + "county": "Suceava" + }, + { + "id": 11321, + "name": "Dolhasca", + "county": "Suceava" + }, + { + "id": 11322, + "name": "Budeni", + "county": "Suceava" + }, + { + "id": 11323, + "name": "Gulia", + "county": "Suceava" + }, + { + "id": 11324, + "name": "Poiana", + "county": "Suceava" + }, + { + "id": 11325, + "name": "Poienari", + "county": "Suceava" + }, + { + "id": 11326, + "name": "Probota", + "county": "Suceava" + }, + { + "id": 11327, + "name": "Silistea Noua", + "county": "Suceava" + }, + { + "id": 11328, + "name": "Valea Poienei", + "county": "Suceava" + }, + { + "id": 11329, + "name": "Dolhestii-Mari", + "county": "Suceava" + }, + { + "id": 11330, + "name": "Dolhestii Mici", + "county": "Suceava" + }, + { + "id": 11331, + "name": "Valea Bourei", + "county": "Suceava" + }, + { + "id": 11332, + "name": "Cozanesti", + "county": "Suceava" + }, + { + "id": 11333, + "name": "Dorna-Arini", + "county": "Suceava" + }, + { + "id": 11334, + "name": "Gheorghiteni", + "county": "Suceava" + }, + { + "id": 11335, + "name": "Ortoaia", + "county": "Suceava" + }, + { + "id": 11336, + "name": "Rusca", + "county": "Suceava" + }, + { + "id": 11337, + "name": "Sunatori", + "county": "Suceava" + }, + { + "id": 11338, + "name": "Dorna Candrenilor", + "county": "Suceava" + }, + { + "id": 11339, + "name": "Cosna", + "county": "Suceava" + }, + { + "id": 11340, + "name": "Dealu Floreni", + "county": "Suceava" + }, + { + "id": 11341, + "name": "Poiana Negrii", + "county": "Suceava" + }, + { + "id": 11342, + "name": "Podu Cosnei", + "county": "Suceava" + }, + { + "id": 11343, + "name": "Romanesti", + "county": "Suceava" + }, + { + "id": 11344, + "name": "Tesna", + "county": "Suceava" + }, + { + "id": 11345, + "name": "Valea Bancului", + "county": "Suceava" + }, + { + "id": 11346, + "name": "Dornesti", + "county": "Suceava" + }, + { + "id": 11347, + "name": "Iaz", + "county": "Suceava" + }, + { + "id": 11348, + "name": "Mazanaesti", + "county": "Suceava" + }, + { + "id": 11349, + "name": "Berchisesti", + "county": "Suceava" + }, + { + "id": 11350, + "name": "Corlata", + "county": "Suceava" + }, + { + "id": 11351, + "name": "Dragoiesti", + "county": "Suceava" + }, + { + "id": 11352, + "name": "Lucacesti", + "county": "Suceava" + }, + { + "id": 11353, + "name": "Draguseni", + "county": "Suceava" + }, + { + "id": 11354, + "name": "Brosteni", + "county": "Suceava" + }, + { + "id": 11355, + "name": "Gara Leu", + "county": "Suceava" + }, + { + "id": 11356, + "name": "Dumbraveni", + "county": "Suceava" + }, + { + "id": 11357, + "name": "Salageni", + "county": "Suceava" + }, + { + "id": 11358, + "name": "Fantanele", + "county": "Suceava" + }, + { + "id": 11359, + "name": "Banesti", + "county": "Suceava" + }, + { + "id": 11360, + "name": "Cotu Dobei", + "county": "Suceava" + }, + { + "id": 11361, + "name": "Slobozia", + "county": "Suceava" + }, + { + "id": 11362, + "name": "Stamate", + "county": "Suceava" + }, + { + "id": 11363, + "name": "Forasti", + "county": "Suceava" + }, + { + "id": 11364, + "name": "Antoceni", + "county": "Suceava" + }, + { + "id": 11365, + "name": "Boura", + "county": "Suceava" + }, + { + "id": 11366, + "name": "Manolea", + "county": "Suceava" + }, + { + "id": 11367, + "name": "Oniceni", + "county": "Suceava" + }, + { + "id": 11368, + "name": "Rosiori", + "county": "Suceava" + }, + { + "id": 11369, + "name": "Rusi", + "county": "Suceava" + }, + { + "id": 11370, + "name": "Tolesti", + "county": "Suceava" + }, + { + "id": 11371, + "name": "Uidesti", + "county": "Suceava" + }, + { + "id": 11372, + "name": "Frasin", + "county": "Suceava" + }, + { + "id": 11373, + "name": "Bucsoaia", + "county": "Suceava" + }, + { + "id": 11374, + "name": "Doroteia", + "county": "Suceava" + }, + { + "id": 11375, + "name": "Plutonita", + "county": "Suceava" + }, + { + "id": 11376, + "name": "Fratautii Noi", + "county": "Suceava" + }, + { + "id": 11377, + "name": "Costisa", + "county": "Suceava" + }, + { + "id": 11378, + "name": "Fratautii Vechi", + "county": "Suceava" + }, + { + "id": 11379, + "name": "Maneuti", + "county": "Suceava" + }, + { + "id": 11380, + "name": "Frumosu", + "county": "Suceava" + }, + { + "id": 11381, + "name": "Deia", + "county": "Suceava" + }, + { + "id": 11382, + "name": "Dragosa", + "county": "Suceava" + }, + { + "id": 11383, + "name": "Fundu Moldovei", + "county": "Suceava" + }, + { + "id": 11384, + "name": "Botusel", + "county": "Suceava" + }, + { + "id": 11385, + "name": "Botus", + "county": "Suceava" + }, + { + "id": 11386, + "name": "Branistea", + "county": "Suceava" + }, + { + "id": 11387, + "name": "Colacu", + "county": "Suceava" + }, + { + "id": 11388, + "name": "Delnita", + "county": "Suceava" + }, + { + "id": 11389, + "name": "Delut", + "county": "Suceava" + }, + { + "id": 11390, + "name": "Obcina", + "county": "Suceava" + }, + { + "id": 11391, + "name": "Plai", + "county": "Suceava" + }, + { + "id": 11392, + "name": "Smida Ungurenilor", + "county": "Suceava" + }, + { + "id": 11393, + "name": "Galanesti", + "county": "Suceava" + }, + { + "id": 11394, + "name": "Hurjuieni", + "county": "Suceava" + }, + { + "id": 11395, + "name": "Voitinel", + "county": "Suceava" + }, + { + "id": 11396, + "name": "Gramesti", + "county": "Suceava" + }, + { + "id": 11397, + "name": "Balinesti", + "county": "Suceava" + }, + { + "id": 11398, + "name": "Botosanita Mica", + "county": "Suceava" + }, + { + "id": 11399, + "name": "Rudesti", + "county": "Suceava" + }, + { + "id": 11400, + "name": "Verbia", + "county": "Suceava" + }, + { + "id": 11401, + "name": "Granicesti", + "county": "Suceava" + }, + { + "id": 11402, + "name": "Dumbrava", + "county": "Suceava" + }, + { + "id": 11403, + "name": "Gura Solcii", + "county": "Suceava" + }, + { + "id": 11404, + "name": "Iacobesti", + "county": "Suceava" + }, + { + "id": 11405, + "name": "Romanesti", + "county": "Suceava" + }, + { + "id": 11406, + "name": "Slobozia Sucevei", + "county": "Suceava" + }, + { + "id": 11407, + "name": "Horodniceni", + "county": "Suceava" + }, + { + "id": 11408, + "name": "Botesti", + "county": "Suceava" + }, + { + "id": 11409, + "name": "Bradatel", + "county": "Suceava" + }, + { + "id": 11410, + "name": "Mihaiesti", + "county": "Suceava" + }, + { + "id": 11411, + "name": "Rotopanesti", + "county": "Suceava" + }, + { + "id": 11412, + "name": "Horodnic de Jos", + "county": "Suceava" + }, + { + "id": 11413, + "name": "Horodnic de Sus", + "county": "Suceava" + }, + { + "id": 11414, + "name": "Iacobeni", + "county": "Suceava" + }, + { + "id": 11415, + "name": "Botos", + "county": "Suceava" + }, + { + "id": 11416, + "name": "Ciocanesti", + "county": "Suceava" + }, + { + "id": 11417, + "name": "Mestecanis", + "county": "Suceava" + }, + { + "id": 11418, + "name": "Izvoarele Sucevei", + "county": "Suceava" + }, + { + "id": 11419, + "name": "Bobeica", + "county": "Suceava" + }, + { + "id": 11420, + "name": "Brodina", + "county": "Suceava" + }, + { + "id": 11421, + "name": "Liteni", + "county": "Suceava" + }, + { + "id": 11422, + "name": "Corni", + "county": "Suceava" + }, + { + "id": 11423, + "name": "Roscani", + "county": "Suceava" + }, + { + "id": 11424, + "name": "Rotunda", + "county": "Suceava" + }, + { + "id": 11425, + "name": "Silistea", + "county": "Suceava" + }, + { + "id": 11426, + "name": "Vercicani", + "county": "Suceava" + }, + { + "id": 11427, + "name": "Marginea", + "county": "Suceava" + }, + { + "id": 11428, + "name": "Malini", + "county": "Suceava" + }, + { + "id": 11429, + "name": "Iesle", + "county": "Suceava" + }, + { + "id": 11430, + "name": "Paraie", + "county": "Suceava" + }, + { + "id": 11431, + "name": "Poiana Marului", + "county": "Suceava" + }, + { + "id": 11432, + "name": "Valeni-Stanisoara", + "county": "Suceava" + }, + { + "id": 11433, + "name": "Manastirea Humorului", + "county": "Suceava" + }, + { + "id": 11434, + "name": "Plesa", + "county": "Suceava" + }, + { + "id": 11435, + "name": "Poiana Micului", + "county": "Suceava" + }, + { + "id": 11436, + "name": "Moara Nica", + "county": "Suceava" + }, + { + "id": 11437, + "name": "Bulai", + "county": "Suceava" + }, + { + "id": 11438, + "name": "Frumoasa", + "county": "Suceava" + }, + { + "id": 11439, + "name": "Groapa Vladichii", + "county": "Suceava" + }, + { + "id": 11440, + "name": "Liteni", + "county": "Suceava" + }, + { + "id": 11441, + "name": "Moara Carp", + "county": "Suceava" + }, + { + "id": 11442, + "name": "Vornicenii Mari", + "county": "Suceava" + }, + { + "id": 11443, + "name": "Vornicenii Mici", + "county": "Suceava" + }, + { + "id": 11444, + "name": "Moldova-Sulita", + "county": "Suceava" + }, + { + "id": 11445, + "name": "Benia", + "county": "Suceava" + }, + { + "id": 11446, + "name": "Moldovita", + "county": "Suceava" + }, + { + "id": 11447, + "name": "Argel", + "county": "Suceava" + }, + { + "id": 11448, + "name": "Demacusa", + "county": "Suceava" + }, + { + "id": 11449, + "name": "Rasca", + "county": "Suceava" + }, + { + "id": 11450, + "name": "Bainet", + "county": "Suceava" + }, + { + "id": 11451, + "name": "Bancesti", + "county": "Suceava" + }, + { + "id": 11452, + "name": "Climauti", + "county": "Suceava" + }, + { + "id": 11453, + "name": "Musenita", + "county": "Suceava" + }, + { + "id": 11454, + "name": "Vascauti", + "county": "Suceava" + }, + { + "id": 11455, + "name": "Vicsani", + "county": "Suceava" + }, + { + "id": 11456, + "name": "Ostra", + "county": "Suceava" + }, + { + "id": 11457, + "name": "Tarnicioara", + "county": "Suceava" + }, + { + "id": 11458, + "name": "Panaci", + "county": "Suceava" + }, + { + "id": 11459, + "name": "Catrinari", + "county": "Suceava" + }, + { + "id": 11460, + "name": "Coverca", + "county": "Suceava" + }, + { + "id": 11461, + "name": "Dragoiasa", + "county": "Suceava" + }, + { + "id": 11462, + "name": "Glodu", + "county": "Suceava" + }, + { + "id": 11463, + "name": "Paltinis", + "county": "Suceava" + }, + { + "id": 11464, + "name": "Paltinoasa", + "county": "Suceava" + }, + { + "id": 11465, + "name": "Capu Codrului", + "county": "Suceava" + }, + { + "id": 11466, + "name": "Partestii de Jos", + "county": "Suceava" + }, + { + "id": 11467, + "name": "Deleni", + "county": "Suceava" + }, + { + "id": 11468, + "name": "Varvata", + "county": "Suceava" + }, + { + "id": 11469, + "name": "Varfu Dealului", + "county": "Suceava" + }, + { + "id": 11470, + "name": "Patrauti", + "county": "Suceava" + }, + { + "id": 11471, + "name": "Poiana Stampei", + "county": "Suceava" + }, + { + "id": 11472, + "name": "Casoi", + "county": "Suceava" + }, + { + "id": 11473, + "name": "Dornisoara", + "county": "Suceava" + }, + { + "id": 11474, + "name": "Pilugani", + "county": "Suceava" + }, + { + "id": 11475, + "name": "Praleni", + "county": "Suceava" + }, + { + "id": 11476, + "name": "Tataru", + "county": "Suceava" + }, + { + "id": 11477, + "name": "Tesna", + "county": "Suceava" + }, + { + "id": 11478, + "name": "Pojorata", + "county": "Suceava" + }, + { + "id": 11479, + "name": "Valea Putnei", + "county": "Suceava" + }, + { + "id": 11480, + "name": "Preutesti", + "county": "Suceava" + }, + { + "id": 11481, + "name": "Arghira", + "county": "Suceava" + }, + { + "id": 11482, + "name": "Basarabi", + "county": "Suceava" + }, + { + "id": 11483, + "name": "Bahna Arin", + "county": "Suceava" + }, + { + "id": 11484, + "name": "Hartop", + "county": "Suceava" + }, + { + "id": 11485, + "name": "Husi", + "county": "Suceava" + }, + { + "id": 11486, + "name": "Leucusesti", + "county": "Suceava" + }, + { + "id": 11487, + "name": "Putna", + "county": "Suceava" + }, + { + "id": 11488, + "name": "Gura Putnei", + "county": "Suceava" + }, + { + "id": 11489, + "name": "Radaseni", + "county": "Suceava" + }, + { + "id": 11490, + "name": "Lamaseni", + "county": "Suceava" + }, + { + "id": 11491, + "name": "Pocoleni", + "county": "Suceava" + }, + { + "id": 11492, + "name": "Rasca", + "county": "Suceava" + }, + { + "id": 11493, + "name": "Buda", + "county": "Suceava" + }, + { + "id": 11494, + "name": "Dumbraveni", + "county": "Suceava" + }, + { + "id": 11495, + "name": "Jahalia", + "county": "Suceava" + }, + { + "id": 11496, + "name": "Slatioara", + "county": "Suceava" + }, + { + "id": 11497, + "name": "Sadova", + "county": "Suceava" + }, + { + "id": 11498, + "name": "Satu Mare", + "county": "Suceava" + }, + { + "id": 11499, + "name": "Tibeni", + "county": "Suceava" + }, + { + "id": 11500, + "name": "Siminicea", + "county": "Suceava" + }, + { + "id": 11501, + "name": "Grigoresti", + "county": "Suceava" + }, + { + "id": 11502, + "name": "Slatina", + "county": "Suceava" + }, + { + "id": 11503, + "name": "Gainesti", + "county": "Suceava" + }, + { + "id": 11504, + "name": "Herla", + "county": "Suceava" + }, + { + "id": 11505, + "name": "Straja", + "county": "Suceava" + }, + { + "id": 11506, + "name": "Stroiesti", + "county": "Suceava" + }, + { + "id": 11507, + "name": "Valcelele", + "county": "Suceava" + }, + { + "id": 11508, + "name": "Zaharesti", + "county": "Suceava" + }, + { + "id": 11509, + "name": "Stulpicani", + "county": "Suceava" + }, + { + "id": 11510, + "name": "Gemenea", + "county": "Suceava" + }, + { + "id": 11511, + "name": "Negrileasa", + "county": "Suceava" + }, + { + "id": 11512, + "name": "Slatioara", + "county": "Suceava" + }, + { + "id": 11513, + "name": "Vadu Negrilesei", + "county": "Suceava" + }, + { + "id": 11514, + "name": "Sucevita", + "county": "Suceava" + }, + { + "id": 11515, + "name": "Voievodeasa", + "county": "Suceava" + }, + { + "id": 11516, + "name": "Neagra Sarului", + "county": "Suceava" + }, + { + "id": 11517, + "name": "Gura Haitii", + "county": "Suceava" + }, + { + "id": 11518, + "name": "Plaiu Sarului", + "county": "Suceava" + }, + { + "id": 11519, + "name": "Sarisor", + "county": "Suceava" + }, + { + "id": 11520, + "name": "Sarisoru Mare", + "county": "Suceava" + }, + { + "id": 11521, + "name": "Saru Bucovinei", + "county": "Suceava" + }, + { + "id": 11522, + "name": "Sarul Dornei", + "county": "Suceava" + }, + { + "id": 11523, + "name": "Todiresti", + "county": "Suceava" + }, + { + "id": 11524, + "name": "Costana", + "county": "Suceava" + }, + { + "id": 11525, + "name": "Parhauti", + "county": "Suceava" + }, + { + "id": 11526, + "name": "Sarghiesti", + "county": "Suceava" + }, + { + "id": 11527, + "name": "Solonet", + "county": "Suceava" + }, + { + "id": 11528, + "name": "Udesti", + "county": "Suceava" + }, + { + "id": 11529, + "name": "Chiliseni", + "county": "Suceava" + }, + { + "id": 11530, + "name": "Luncusoara", + "county": "Suceava" + }, + { + "id": 11531, + "name": "Manastioara", + "county": "Suceava" + }, + { + "id": 11532, + "name": "Plavalari", + "county": "Suceava" + }, + { + "id": 11533, + "name": "Poieni-Suceava", + "county": "Suceava" + }, + { + "id": 11534, + "name": "Racova", + "county": "Suceava" + }, + { + "id": 11535, + "name": "Reuseni", + "county": "Suceava" + }, + { + "id": 11536, + "name": "Rusii-Manastioara", + "county": "Suceava" + }, + { + "id": 11537, + "name": "Securiceni", + "county": "Suceava" + }, + { + "id": 11538, + "name": "Stirbat", + "county": "Suceava" + }, + { + "id": 11539, + "name": "Ulma", + "county": "Suceava" + }, + { + "id": 11540, + "name": "Costileva", + "county": "Suceava" + }, + { + "id": 11541, + "name": "Lupcina", + "county": "Suceava" + }, + { + "id": 11542, + "name": "Magura", + "county": "Suceava" + }, + { + "id": 11543, + "name": "Nisipitu", + "county": "Suceava" + }, + { + "id": 11544, + "name": "Vadu Moldovei", + "county": "Suceava" + }, + { + "id": 11545, + "name": "Camarzani", + "county": "Suceava" + }, + { + "id": 11546, + "name": "Ciumulesti", + "county": "Suceava" + }, + { + "id": 11547, + "name": "Cotu Baii", + "county": "Suceava" + }, + { + "id": 11548, + "name": "Dumbravita", + "county": "Suceava" + }, + { + "id": 11549, + "name": "Fantana Mare", + "county": "Suceava" + }, + { + "id": 11550, + "name": "Ioneasa", + "county": "Suceava" + }, + { + "id": 11551, + "name": "Mesteceni", + "county": "Suceava" + }, + { + "id": 11552, + "name": "Movileni", + "county": "Suceava" + }, + { + "id": 11553, + "name": "Nigotesti", + "county": "Suceava" + }, + { + "id": 11554, + "name": "Praxia", + "county": "Suceava" + }, + { + "id": 11555, + "name": "Spataresti", + "county": "Suceava" + }, + { + "id": 11556, + "name": "Valea Moldovei", + "county": "Suceava" + }, + { + "id": 11557, + "name": "Capu Campului", + "county": "Suceava" + }, + { + "id": 11558, + "name": "Mironu", + "county": "Suceava" + }, + { + "id": 11559, + "name": "Vama", + "county": "Suceava" + }, + { + "id": 11560, + "name": "Molid", + "county": "Suceava" + }, + { + "id": 11561, + "name": "Prisaca Dornei", + "county": "Suceava" + }, + { + "id": 11562, + "name": "Stramtura", + "county": "Suceava" + }, + { + "id": 11563, + "name": "Vatra Moldovitei", + "county": "Suceava" + }, + { + "id": 11564, + "name": "Ciumarna", + "county": "Suceava" + }, + { + "id": 11565, + "name": "Paltinu", + "county": "Suceava" + }, + { + "id": 11566, + "name": "Veresti", + "county": "Suceava" + }, + { + "id": 11567, + "name": "Bursuceni", + "county": "Suceava" + }, + { + "id": 11568, + "name": "Corocaiesti", + "county": "Suceava" + }, + { + "id": 11569, + "name": "Hancea", + "county": "Suceava" + }, + { + "id": 11570, + "name": "Vicovu de Jos", + "county": "Suceava" + }, + { + "id": 11571, + "name": "Vicovu de Sus", + "county": "Suceava" + }, + { + "id": 11572, + "name": "Bivolaria", + "county": "Suceava" + }, + { + "id": 11573, + "name": "Volovat", + "county": "Suceava" + }, + { + "id": 11574, + "name": "Burla", + "county": "Suceava" + }, + { + "id": 11575, + "name": "Plesesti", + "county": "Suceava" + }, + { + "id": 11576, + "name": "Giurgesti", + "county": "Suceava" + }, + { + "id": 11577, + "name": "Hreatca", + "county": "Suceava" + }, + { + "id": 11578, + "name": "Jacota", + "county": "Suceava" + }, + { + "id": 11579, + "name": "Meresti", + "county": "Suceava" + }, + { + "id": 11580, + "name": "Osoi", + "county": "Suceava" + }, + { + "id": 11581, + "name": "Valea Glodului", + "county": "Suceava" + }, + { + "id": 11582, + "name": "Vulturesti", + "county": "Suceava" + }, + { + "id": 11583, + "name": "Zamostea", + "county": "Suceava" + }, + { + "id": 11584, + "name": "Badragi", + "county": "Suceava" + }, + { + "id": 11585, + "name": "Ciomartan", + "county": "Suceava" + }, + { + "id": 11586, + "name": "Cojocareni", + "county": "Suceava" + }, + { + "id": 11587, + "name": "Corpaci", + "county": "Suceava" + }, + { + "id": 11588, + "name": "Lunca", + "county": "Suceava" + }, + { + "id": 11589, + "name": "Nicani", + "county": "Suceava" + }, + { + "id": 11590, + "name": "Rauteni", + "county": "Suceava" + }, + { + "id": 11591, + "name": "Tautesti", + "county": "Suceava" + }, + { + "id": 11592, + "name": "Zvoristea", + "county": "Suceava" + }, + { + "id": 11593, + "name": "Buda", + "county": "Suceava" + }, + { + "id": 11594, + "name": "Dealu", + "county": "Suceava" + }, + { + "id": 11595, + "name": "Poiana", + "county": "Suceava" + }, + { + "id": 11596, + "name": "Serbanesti", + "county": "Suceava" + }, + { + "id": 11597, + "name": "Slobozia", + "county": "Suceava" + }, + { + "id": 11598, + "name": "Stanca", + "county": "Suceava" + }, + { + "id": 11599, + "name": "Stancuta", + "county": "Suceava" + }, + { + "id": 11600, + "name": "Turnu Magurele", + "county": "Teleorman" + }, + { + "id": 11601, + "name": "Ciuperceni", + "county": "Teleorman" + }, + { + "id": 11602, + "name": "Poiana", + "county": "Teleorman" + }, + { + "id": 11603, + "name": "Islaz", + "county": "Teleorman" + }, + { + "id": 11604, + "name": "Moldoveni", + "county": "Teleorman" + }, + { + "id": 11605, + "name": "Lita", + "county": "Teleorman" + }, + { + "id": 11606, + "name": "Alexandria", + "county": "Teleorman" + }, + { + "id": 11607, + "name": "Nanov", + "county": "Teleorman" + }, + { + "id": 11608, + "name": "Poroschia", + "county": "Teleorman" + }, + { + "id": 11609, + "name": "Calomfiresti", + "county": "Teleorman" + }, + { + "id": 11610, + "name": "Rosiori de Vede", + "county": "Teleorman" + }, + { + "id": 11611, + "name": "Videle", + "county": "Teleorman" + }, + { + "id": 11612, + "name": "Cosoaia", + "county": "Teleorman" + }, + { + "id": 11613, + "name": "Crevenicu", + "county": "Teleorman" + }, + { + "id": 11614, + "name": "Radulesti", + "county": "Teleorman" + }, + { + "id": 11615, + "name": "Zimnicea", + "county": "Teleorman" + }, + { + "id": 11616, + "name": "Balaci", + "county": "Teleorman" + }, + { + "id": 11617, + "name": "Burdeni", + "county": "Teleorman" + }, + { + "id": 11618, + "name": "Tecuci", + "county": "Teleorman" + }, + { + "id": 11619, + "name": "Babaita", + "county": "Teleorman" + }, + { + "id": 11620, + "name": "Clanita", + "county": "Teleorman" + }, + { + "id": 11621, + "name": "Frasinet", + "county": "Teleorman" + }, + { + "id": 11622, + "name": "Merisani", + "county": "Teleorman" + }, + { + "id": 11623, + "name": "Blejesti", + "county": "Teleorman" + }, + { + "id": 11624, + "name": "Baciu", + "county": "Teleorman" + }, + { + "id": 11625, + "name": "Sericu", + "county": "Teleorman" + }, + { + "id": 11626, + "name": "Bogdana", + "county": "Teleorman" + }, + { + "id": 11627, + "name": "Brosteanca", + "county": "Teleorman" + }, + { + "id": 11628, + "name": "Ulmeni", + "county": "Teleorman" + }, + { + "id": 11629, + "name": "Urluiu", + "county": "Teleorman" + }, + { + "id": 11630, + "name": "Botoroaga", + "county": "Teleorman" + }, + { + "id": 11631, + "name": "Calugaru", + "county": "Teleorman" + }, + { + "id": 11632, + "name": "Tarnava", + "county": "Teleorman" + }, + { + "id": 11633, + "name": "Tunari", + "county": "Teleorman" + }, + { + "id": 11634, + "name": "Valea Ciresului", + "county": "Teleorman" + }, + { + "id": 11635, + "name": "Bragadiru", + "county": "Teleorman" + }, + { + "id": 11636, + "name": "Branceni", + "county": "Teleorman" + }, + { + "id": 11637, + "name": "Bujoreni", + "county": "Teleorman" + }, + { + "id": 11638, + "name": "Darvas", + "county": "Teleorman" + }, + { + "id": 11639, + "name": "Prunaru", + "county": "Teleorman" + }, + { + "id": 11640, + "name": "Bujoru", + "county": "Teleorman" + }, + { + "id": 11641, + "name": "Buzescu", + "county": "Teleorman" + }, + { + "id": 11642, + "name": "Calinesti", + "county": "Teleorman" + }, + { + "id": 11643, + "name": "Antonesti", + "county": "Teleorman" + }, + { + "id": 11644, + "name": "Copaceanca", + "county": "Teleorman" + }, + { + "id": 11645, + "name": "Licuriciu", + "county": "Teleorman" + }, + { + "id": 11646, + "name": "Marita", + "county": "Teleorman" + }, + { + "id": 11647, + "name": "Calmatuiu", + "county": "Teleorman" + }, + { + "id": 11648, + "name": "Bujoru", + "county": "Teleorman" + }, + { + "id": 11649, + "name": "Caravaneti", + "county": "Teleorman" + }, + { + "id": 11650, + "name": "Nicolae Balcescu", + "county": "Teleorman" + }, + { + "id": 11651, + "name": "Calmatuiu de Sus", + "county": "Teleorman" + }, + { + "id": 11652, + "name": "Bacalesti", + "county": "Teleorman" + }, + { + "id": 11653, + "name": "Ionascu", + "county": "Teleorman" + }, + { + "id": 11654, + "name": "Cervenia", + "county": "Teleorman" + }, + { + "id": 11655, + "name": "Ciolanestii din Deal", + "county": "Teleorman" + }, + { + "id": 11656, + "name": "Baldovinesti", + "county": "Teleorman" + }, + { + "id": 11657, + "name": "Ciolanestii din Vale", + "county": "Teleorman" + }, + { + "id": 11658, + "name": "Contesti", + "county": "Teleorman" + }, + { + "id": 11659, + "name": "Cosmesti", + "county": "Teleorman" + }, + { + "id": 11660, + "name": "Ciuperceni", + "county": "Teleorman" + }, + { + "id": 11661, + "name": "Crangeni", + "county": "Teleorman" + }, + { + "id": 11662, + "name": "Balta Sarata", + "county": "Teleorman" + }, + { + "id": 11663, + "name": "Dorobantu", + "county": "Teleorman" + }, + { + "id": 11664, + "name": "Stejaru", + "county": "Teleorman" + }, + { + "id": 11665, + "name": "Crangu", + "county": "Teleorman" + }, + { + "id": 11666, + "name": "Dracea", + "county": "Teleorman" + }, + { + "id": 11667, + "name": "Florica", + "county": "Teleorman" + }, + { + "id": 11668, + "name": "Secara", + "county": "Teleorman" + }, + { + "id": 11669, + "name": "Zlata", + "county": "Teleorman" + }, + { + "id": 11670, + "name": "Didesti", + "county": "Teleorman" + }, + { + "id": 11671, + "name": "Insuratei", + "county": "Teleorman" + }, + { + "id": 11672, + "name": "Satu Nou", + "county": "Teleorman" + }, + { + "id": 11673, + "name": "Dobrotesti", + "county": "Teleorman" + }, + { + "id": 11674, + "name": "Merisani", + "county": "Teleorman" + }, + { + "id": 11675, + "name": "Dracsenei", + "county": "Teleorman" + }, + { + "id": 11676, + "name": "Beuca", + "county": "Teleorman" + }, + { + "id": 11677, + "name": "Dracsani", + "county": "Teleorman" + }, + { + "id": 11678, + "name": "Odobeasca", + "county": "Teleorman" + }, + { + "id": 11679, + "name": "Plopi", + "county": "Teleorman" + }, + { + "id": 11680, + "name": "Satul Vechi", + "county": "Teleorman" + }, + { + "id": 11681, + "name": "Draganesti de Vede", + "county": "Teleorman" + }, + { + "id": 11682, + "name": "Magura cu Liliac", + "county": "Teleorman" + }, + { + "id": 11683, + "name": "Vacaresti", + "county": "Teleorman" + }, + { + "id": 11684, + "name": "Draganesti-Vlasca", + "county": "Teleorman" + }, + { + "id": 11685, + "name": "Comoara", + "county": "Teleorman" + }, + { + "id": 11686, + "name": "Vaceni", + "county": "Teleorman" + }, + { + "id": 11687, + "name": "Furculesti", + "county": "Teleorman" + }, + { + "id": 11688, + "name": "Mosteni", + "county": "Teleorman" + }, + { + "id": 11689, + "name": "Spatarei", + "county": "Teleorman" + }, + { + "id": 11690, + "name": "Voievoda", + "county": "Teleorman" + }, + { + "id": 11691, + "name": "Frumoasa", + "county": "Teleorman" + }, + { + "id": 11692, + "name": "Pauleasca", + "county": "Teleorman" + }, + { + "id": 11693, + "name": "Galateni", + "county": "Teleorman" + }, + { + "id": 11694, + "name": "Bascoveni", + "county": "Teleorman" + }, + { + "id": 11695, + "name": "Gradisteanca", + "county": "Teleorman" + }, + { + "id": 11696, + "name": "Gratia", + "county": "Teleorman" + }, + { + "id": 11697, + "name": "Ciurari-Deal", + "county": "Teleorman" + }, + { + "id": 11698, + "name": "Draghinesti", + "county": "Teleorman" + }, + { + "id": 11699, + "name": "Izvoarele", + "county": "Teleorman" + }, + { + "id": 11700, + "name": "Lisa", + "county": "Teleorman" + }, + { + "id": 11701, + "name": "Vanatori", + "county": "Teleorman" + }, + { + "id": 11702, + "name": "Lunca", + "county": "Teleorman" + }, + { + "id": 11703, + "name": "Pleasov", + "county": "Teleorman" + }, + { + "id": 11704, + "name": "Prundu", + "county": "Teleorman" + }, + { + "id": 11705, + "name": "Saelele", + "county": "Teleorman" + }, + { + "id": 11706, + "name": "Mavrodin", + "county": "Teleorman" + }, + { + "id": 11707, + "name": "Nenciulesti", + "county": "Teleorman" + }, + { + "id": 11708, + "name": "Paru Rotund", + "county": "Teleorman" + }, + { + "id": 11709, + "name": "Magura", + "county": "Teleorman" + }, + { + "id": 11710, + "name": "Guruieni", + "county": "Teleorman" + }, + { + "id": 11711, + "name": "Maldaeni", + "county": "Teleorman" + }, + { + "id": 11712, + "name": "Merenii de Jos", + "county": "Teleorman" + }, + { + "id": 11713, + "name": "Merenii de Sus", + "county": "Teleorman" + }, + { + "id": 11714, + "name": "Stefeni", + "county": "Teleorman" + }, + { + "id": 11715, + "name": "Marzanesti", + "county": "Teleorman" + }, + { + "id": 11716, + "name": "Cernetu", + "county": "Teleorman" + }, + { + "id": 11717, + "name": "Teleormanu", + "county": "Teleorman" + }, + { + "id": 11718, + "name": "Valea Parului", + "county": "Teleorman" + }, + { + "id": 11719, + "name": "Mosteni", + "county": "Teleorman" + }, + { + "id": 11720, + "name": "Nasturelu", + "county": "Teleorman" + }, + { + "id": 11721, + "name": "Zimnicele", + "county": "Teleorman" + }, + { + "id": 11722, + "name": "Necsesti", + "county": "Teleorman" + }, + { + "id": 11723, + "name": "Belciug", + "county": "Teleorman" + }, + { + "id": 11724, + "name": "Gardesti", + "county": "Teleorman" + }, + { + "id": 11725, + "name": "Olteni", + "county": "Teleorman" + }, + { + "id": 11726, + "name": "Perii Brosteni", + "county": "Teleorman" + }, + { + "id": 11727, + "name": "Orbeasca de Jos", + "county": "Teleorman" + }, + { + "id": 11728, + "name": "Laceni", + "county": "Teleorman" + }, + { + "id": 11729, + "name": "Orbeasca de Sus", + "county": "Teleorman" + }, + { + "id": 11730, + "name": "Peretu", + "county": "Teleorman" + }, + { + "id": 11731, + "name": "Piatra", + "county": "Teleorman" + }, + { + "id": 11732, + "name": "Pietrosani", + "county": "Teleorman" + }, + { + "id": 11733, + "name": "Plosca", + "county": "Teleorman" + }, + { + "id": 11734, + "name": "Plopii-Slavitesti", + "county": "Teleorman" + }, + { + "id": 11735, + "name": "Beciu", + "county": "Teleorman" + }, + { + "id": 11736, + "name": "Barsestii de Jos", + "county": "Teleorman" + }, + { + "id": 11737, + "name": "Brancoveanca", + "county": "Teleorman" + }, + { + "id": 11738, + "name": "Dudu", + "county": "Teleorman" + }, + { + "id": 11739, + "name": "Smardan", + "county": "Teleorman" + }, + { + "id": 11740, + "name": "Poeni", + "county": "Teleorman" + }, + { + "id": 11741, + "name": "Banov", + "county": "Teleorman" + }, + { + "id": 11742, + "name": "Bratesti", + "county": "Teleorman" + }, + { + "id": 11743, + "name": "Catunu", + "county": "Teleorman" + }, + { + "id": 11744, + "name": "Preajba", + "county": "Teleorman" + }, + { + "id": 11745, + "name": "Tavarlau", + "county": "Teleorman" + }, + { + "id": 11746, + "name": "Vatasi", + "county": "Teleorman" + }, + { + "id": 11747, + "name": "Vitanesti", + "county": "Teleorman" + }, + { + "id": 11748, + "name": "Schitu Poienari", + "county": "Teleorman" + }, + { + "id": 11749, + "name": "Silistea", + "county": "Teleorman" + }, + { + "id": 11750, + "name": "Purani", + "county": "Teleorman" + }, + { + "id": 11751, + "name": "Putineiu", + "county": "Teleorman" + }, + { + "id": 11752, + "name": "Baduleasa", + "county": "Teleorman" + }, + { + "id": 11753, + "name": "Carlomanu", + "county": "Teleorman" + }, + { + "id": 11754, + "name": "Radoiesti-Vale", + "county": "Teleorman" + }, + { + "id": 11755, + "name": "Cetatea", + "county": "Teleorman" + }, + { + "id": 11756, + "name": "Radoiesti-Deal", + "county": "Teleorman" + }, + { + "id": 11757, + "name": "Rasmiresti", + "county": "Teleorman" + }, + { + "id": 11758, + "name": "Ludaneasca", + "county": "Teleorman" + }, + { + "id": 11759, + "name": "Salcia", + "county": "Teleorman" + }, + { + "id": 11760, + "name": "Baneasa", + "county": "Teleorman" + }, + { + "id": 11761, + "name": "Tudor Vladimirescu", + "county": "Teleorman" + }, + { + "id": 11762, + "name": "Saceni", + "county": "Teleorman" + }, + { + "id": 11763, + "name": "Butculesti", + "county": "Teleorman" + }, + { + "id": 11764, + "name": "Ciurari", + "county": "Teleorman" + }, + { + "id": 11765, + "name": "Scrioastea", + "county": "Teleorman" + }, + { + "id": 11766, + "name": "Brebina", + "county": "Teleorman" + }, + { + "id": 11767, + "name": "Cucueti", + "county": "Teleorman" + }, + { + "id": 11768, + "name": "Viile", + "county": "Teleorman" + }, + { + "id": 11769, + "name": "Scurtu Mare", + "county": "Teleorman" + }, + { + "id": 11770, + "name": "Albeni", + "county": "Teleorman" + }, + { + "id": 11771, + "name": "Dracesti", + "county": "Teleorman" + }, + { + "id": 11772, + "name": "Negrilesti", + "county": "Teleorman" + }, + { + "id": 11773, + "name": "Scurtu-Slavesti", + "county": "Teleorman" + }, + { + "id": 11774, + "name": "Valea Postei", + "county": "Teleorman" + }, + { + "id": 11775, + "name": "Seaca", + "county": "Teleorman" + }, + { + "id": 11776, + "name": "Navodari", + "county": "Teleorman" + }, + { + "id": 11777, + "name": "Sfintesti", + "county": "Teleorman" + }, + { + "id": 11778, + "name": "Segarcea-Vale", + "county": "Teleorman" + }, + { + "id": 11779, + "name": "Olteanca", + "county": "Teleorman" + }, + { + "id": 11780, + "name": "Segarcea-Deal", + "county": "Teleorman" + }, + { + "id": 11781, + "name": "Silistea", + "county": "Teleorman" + }, + { + "id": 11782, + "name": "Butesti", + "county": "Teleorman" + }, + { + "id": 11783, + "name": "Purani", + "county": "Teleorman" + }, + { + "id": 11784, + "name": "Puranii de Sus", + "county": "Teleorman" + }, + { + "id": 11785, + "name": "Silistea Mica", + "county": "Teleorman" + }, + { + "id": 11786, + "name": "Silistea-Gumesti", + "county": "Teleorman" + }, + { + "id": 11787, + "name": "Sarbenii de Jos", + "county": "Teleorman" + }, + { + "id": 11788, + "name": "Sarbeni", + "county": "Teleorman" + }, + { + "id": 11789, + "name": "Udeni", + "county": "Teleorman" + }, + { + "id": 11790, + "name": "Slobozia Mandra", + "county": "Teleorman" + }, + { + "id": 11791, + "name": "Uda-Clocociov", + "county": "Teleorman" + }, + { + "id": 11792, + "name": "Uda-Paciurea", + "county": "Teleorman" + }, + { + "id": 11793, + "name": "Smardioasa", + "county": "Teleorman" + }, + { + "id": 11794, + "name": "Soimu", + "county": "Teleorman" + }, + { + "id": 11795, + "name": "Stejaru", + "county": "Teleorman" + }, + { + "id": 11796, + "name": "Bratcovu", + "county": "Teleorman" + }, + { + "id": 11797, + "name": "Gresia", + "county": "Teleorman" + }, + { + "id": 11798, + "name": "Socetu", + "county": "Teleorman" + }, + { + "id": 11799, + "name": "Suhaia", + "county": "Teleorman" + }, + { + "id": 11800, + "name": "Fantanele", + "county": "Teleorman" + }, + { + "id": 11801, + "name": "Storobaneasa", + "county": "Teleorman" + }, + { + "id": 11802, + "name": "Beiu", + "county": "Teleorman" + }, + { + "id": 11803, + "name": "Talpa-Ograzile", + "county": "Teleorman" + }, + { + "id": 11804, + "name": "Linia Costii", + "county": "Teleorman" + }, + { + "id": 11805, + "name": "Rotaresti", + "county": "Teleorman" + }, + { + "id": 11806, + "name": "Talpa-Bascoveni", + "county": "Teleorman" + }, + { + "id": 11807, + "name": "Talpa Postei", + "county": "Teleorman" + }, + { + "id": 11808, + "name": "Tatarastii de Jos", + "county": "Teleorman" + }, + { + "id": 11809, + "name": "Lada", + "county": "Teleorman" + }, + { + "id": 11810, + "name": "Negreni", + "county": "Teleorman" + }, + { + "id": 11811, + "name": "Negrenii de Sus", + "county": "Teleorman" + }, + { + "id": 11812, + "name": "Negrenii-Osebiti", + "county": "Teleorman" + }, + { + "id": 11813, + "name": "Obartu", + "county": "Teleorman" + }, + { + "id": 11814, + "name": "Slavesti", + "county": "Teleorman" + }, + { + "id": 11815, + "name": "Tatarastii de Sus", + "county": "Teleorman" + }, + { + "id": 11816, + "name": "Dobreni", + "county": "Teleorman" + }, + { + "id": 11817, + "name": "Udupu", + "county": "Teleorman" + }, + { + "id": 11818, + "name": "Toporu", + "county": "Giurgiu" + }, + { + "id": 11819, + "name": "Tomulesti", + "county": "Giurgiu" + }, + { + "id": 11820, + "name": "Traian", + "county": "Teleorman" + }, + { + "id": 11821, + "name": "Trivalea-Mosteni", + "county": "Teleorman" + }, + { + "id": 11822, + "name": "Bratasani", + "county": "Teleorman" + }, + { + "id": 11823, + "name": "Deparati", + "county": "Teleorman" + }, + { + "id": 11824, + "name": "Troianul", + "county": "Teleorman" + }, + { + "id": 11825, + "name": "Dulceni", + "county": "Teleorman" + }, + { + "id": 11826, + "name": "Vatra", + "county": "Teleorman" + }, + { + "id": 11827, + "name": "Tiganesti", + "county": "Teleorman" + }, + { + "id": 11828, + "name": "Vedea", + "county": "Teleorman" + }, + { + "id": 11829, + "name": "Albesti", + "county": "Teleorman" + }, + { + "id": 11830, + "name": "Cosoteni", + "county": "Teleorman" + }, + { + "id": 11831, + "name": "Dulceanca", + "county": "Teleorman" + }, + { + "id": 11832, + "name": "Meri", + "county": "Teleorman" + }, + { + "id": 11833, + "name": "Viisoara", + "county": "Teleorman" + }, + { + "id": 11834, + "name": "Vartoapele de Sus", + "county": "Teleorman" + }, + { + "id": 11835, + "name": "Garagau", + "county": "Teleorman" + }, + { + "id": 11836, + "name": "Vartoapele de Jos", + "county": "Teleorman" + }, + { + "id": 11837, + "name": "Zambreasca", + "county": "Teleorman" + }, + { + "id": 11838, + "name": "Timisoara", + "county": "Timis" + }, + { + "id": 11839, + "name": "Dumbravita", + "county": "Timis" + }, + { + "id": 11840, + "name": "Ghiroda", + "county": "Timis" + }, + { + "id": 11841, + "name": "Giarmata-Vii", + "county": "Timis" + }, + { + "id": 11842, + "name": "Giroc", + "county": "Timis" + }, + { + "id": 11843, + "name": "Chisoda", + "county": "Timis" + }, + { + "id": 11844, + "name": "Lugoj", + "county": "Timis" + }, + { + "id": 11845, + "name": "Maguri", + "county": "Timis" + }, + { + "id": 11846, + "name": "Tapia", + "county": "Timis" + }, + { + "id": 11847, + "name": "Buzias", + "county": "Timis" + }, + { + "id": 11848, + "name": "Silagiu", + "county": "Timis" + }, + { + "id": 11849, + "name": "Bacova", + "county": "Timis" + }, + { + "id": 11850, + "name": "Deta", + "county": "Timis" + }, + { + "id": 11851, + "name": "Opatita", + "county": "Timis" + }, + { + "id": 11852, + "name": "Jimbolia", + "county": "Timis" + }, + { + "id": 11853, + "name": "Sannicolau Mare", + "county": "Timis" + }, + { + "id": 11854, + "name": "Balint", + "county": "Timis" + }, + { + "id": 11855, + "name": "Bodo", + "county": "Timis" + }, + { + "id": 11856, + "name": "Fadimac", + "county": "Timis" + }, + { + "id": 11857, + "name": "Targoviste", + "county": "Timis" + }, + { + "id": 11858, + "name": "Banloc", + "county": "Timis" + }, + { + "id": 11859, + "name": "Dolat", + "county": "Timis" + }, + { + "id": 11860, + "name": "Livezile", + "county": "Timis" + }, + { + "id": 11861, + "name": "Ofsenita", + "county": "Timis" + }, + { + "id": 11862, + "name": "Partos", + "county": "Timis" + }, + { + "id": 11863, + "name": "Soca", + "county": "Timis" + }, + { + "id": 11864, + "name": "Bara", + "county": "Timis" + }, + { + "id": 11865, + "name": "Dobresti", + "county": "Timis" + }, + { + "id": 11866, + "name": "Lapusnic", + "county": "Timis" + }, + { + "id": 11867, + "name": "Radmanesti", + "county": "Timis" + }, + { + "id": 11868, + "name": "Spata", + "county": "Timis" + }, + { + "id": 11869, + "name": "Beba Veche", + "county": "Timis" + }, + { + "id": 11870, + "name": "Cherestur", + "county": "Timis" + }, + { + "id": 11871, + "name": "Pordeanu", + "county": "Timis" + }, + { + "id": 11872, + "name": "Becicherecu Mic", + "county": "Timis" + }, + { + "id": 11873, + "name": "Dudestii Noi", + "county": "Timis" + }, + { + "id": 11874, + "name": "Belint", + "county": "Timis" + }, + { + "id": 11875, + "name": "Babsa", + "county": "Timis" + }, + { + "id": 11876, + "name": "Chizatau", + "county": "Timis" + }, + { + "id": 11877, + "name": "Gruni", + "county": "Timis" + }, + { + "id": 11878, + "name": "Bethausen", + "county": "Timis" + }, + { + "id": 11879, + "name": "Cladova", + "county": "Timis" + }, + { + "id": 11880, + "name": "Cliciova", + "county": "Timis" + }, + { + "id": 11881, + "name": "Cutina", + "county": "Timis" + }, + { + "id": 11882, + "name": "Leucusesti", + "county": "Timis" + }, + { + "id": 11883, + "name": "Nevrincea", + "county": "Timis" + }, + { + "id": 11884, + "name": "Biled", + "county": "Timis" + }, + { + "id": 11885, + "name": "Sandra", + "county": "Timis" + }, + { + "id": 11886, + "name": "Uihei", + "county": "Timis" + }, + { + "id": 11887, + "name": "Barna", + "county": "Timis" + }, + { + "id": 11888, + "name": "Botesti", + "county": "Timis" + }, + { + "id": 11889, + "name": "Botinesti", + "county": "Timis" + }, + { + "id": 11890, + "name": "Drinova", + "county": "Timis" + }, + { + "id": 11891, + "name": "Juresti", + "county": "Timis" + }, + { + "id": 11892, + "name": "Poganesti", + "county": "Timis" + }, + { + "id": 11893, + "name": "Sarazani", + "county": "Timis" + }, + { + "id": 11894, + "name": "Bogda", + "county": "Timis" + }, + { + "id": 11895, + "name": "Altringen", + "county": "Timis" + }, + { + "id": 11896, + "name": "Buzad", + "county": "Timis" + }, + { + "id": 11897, + "name": "Charlotenburg", + "county": "Timis" + }, + { + "id": 11898, + "name": "Comeat", + "county": "Timis" + }, + { + "id": 11899, + "name": "Sintar", + "county": "Timis" + }, + { + "id": 11900, + "name": "Boldur", + "county": "Timis" + }, + { + "id": 11901, + "name": "Jabar", + "county": "Timis" + }, + { + "id": 11902, + "name": "Ohaba-Forgaci", + "county": "Timis" + }, + { + "id": 11903, + "name": "Sinersig", + "county": "Timis" + }, + { + "id": 11904, + "name": "Brestovat", + "county": "Timis" + }, + { + "id": 11905, + "name": "Cosarii", + "county": "Timis" + }, + { + "id": 11906, + "name": "Hodos", + "county": "Timis" + }, + { + "id": 11907, + "name": "Lucaret", + "county": "Timis" + }, + { + "id": 11908, + "name": "Tes", + "county": "Timis" + }, + { + "id": 11909, + "name": "Carpinis", + "county": "Timis" + }, + { + "id": 11910, + "name": "Iecea Mare", + "county": "Timis" + }, + { + "id": 11911, + "name": "Iecea Mica", + "county": "Timis" + }, + { + "id": 11912, + "name": "Cenad", + "county": "Timis" + }, + { + "id": 11913, + "name": "Cenei", + "county": "Timis" + }, + { + "id": 11914, + "name": "Bobda", + "county": "Timis" + }, + { + "id": 11915, + "name": "Checea", + "county": "Timis" + }, + { + "id": 11916, + "name": "Cheveresu Mare", + "county": "Timis" + }, + { + "id": 11917, + "name": "Dragsina", + "county": "Timis" + }, + { + "id": 11918, + "name": "Vucova", + "county": "Timis" + }, + { + "id": 11919, + "name": "Ciacova", + "county": "Timis" + }, + { + "id": 11920, + "name": "Cebza", + "county": "Timis" + }, + { + "id": 11921, + "name": "Gad", + "county": "Timis" + }, + { + "id": 11922, + "name": "Ghilad", + "county": "Timis" + }, + { + "id": 11923, + "name": "Macedonia", + "county": "Timis" + }, + { + "id": 11924, + "name": "Obad", + "county": "Timis" + }, + { + "id": 11925, + "name": "Petroman", + "county": "Timis" + }, + { + "id": 11926, + "name": "Comlosu Mare", + "county": "Timis" + }, + { + "id": 11927, + "name": "Comlosu Mic", + "county": "Timis" + }, + { + "id": 11928, + "name": "Lunga", + "county": "Timis" + }, + { + "id": 11929, + "name": "Costeiu", + "county": "Timis" + }, + { + "id": 11930, + "name": "Hezeris", + "county": "Timis" + }, + { + "id": 11931, + "name": "Paru", + "county": "Timis" + }, + { + "id": 11932, + "name": "Tipari", + "county": "Timis" + }, + { + "id": 11933, + "name": "Valea Lunga Romana", + "county": "Timis" + }, + { + "id": 11934, + "name": "Criciova", + "county": "Timis" + }, + { + "id": 11935, + "name": "Ciresu", + "county": "Timis" + }, + { + "id": 11936, + "name": "Ciresu Mic", + "county": "Timis" + }, + { + "id": 11937, + "name": "Jdioara", + "county": "Timis" + }, + { + "id": 11938, + "name": "Curtea", + "county": "Timis" + }, + { + "id": 11939, + "name": "Cosava", + "county": "Timis" + }, + { + "id": 11940, + "name": "Homojdia", + "county": "Timis" + }, + { + "id": 11941, + "name": "Darova", + "county": "Timis" + }, + { + "id": 11942, + "name": "Hodos", + "county": "Timis" + }, + { + "id": 11943, + "name": "Sacosu Mare", + "county": "Timis" + }, + { + "id": 11944, + "name": "Denta", + "county": "Timis" + }, + { + "id": 11945, + "name": "Brestea", + "county": "Timis" + }, + { + "id": 11946, + "name": "Rovinita Mare", + "county": "Timis" + }, + { + "id": 11947, + "name": "Rovinita Mica", + "county": "Timis" + }, + { + "id": 11948, + "name": "Dudestii Vechi", + "county": "Timis" + }, + { + "id": 11949, + "name": "Cheglevici", + "county": "Timis" + }, + { + "id": 11950, + "name": "Colonia Bulgara", + "county": "Timis" + }, + { + "id": 11951, + "name": "Valcani", + "county": "Timis" + }, + { + "id": 11952, + "name": "Dumbrava", + "county": "Timis" + }, + { + "id": 11953, + "name": "Bucovat", + "county": "Timis" + }, + { + "id": 11954, + "name": "Rachita", + "county": "Timis" + }, + { + "id": 11955, + "name": "Faget", + "county": "Timis" + }, + { + "id": 11956, + "name": "Batesti", + "county": "Timis" + }, + { + "id": 11957, + "name": "Begheiu Mic", + "county": "Timis" + }, + { + "id": 11958, + "name": "Bichigi", + "county": "Timis" + }, + { + "id": 11959, + "name": "Branesti", + "county": "Timis" + }, + { + "id": 11960, + "name": "Bunea Mare", + "county": "Timis" + }, + { + "id": 11961, + "name": "Bunea Mica", + "county": "Timis" + }, + { + "id": 11962, + "name": "Colonia Mica", + "county": "Timis" + }, + { + "id": 11963, + "name": "Jupanesti", + "county": "Timis" + }, + { + "id": 11964, + "name": "Povargina", + "county": "Timis" + }, + { + "id": 11965, + "name": "Temeresti", + "county": "Timis" + }, + { + "id": 11966, + "name": "Fardea", + "county": "Timis" + }, + { + "id": 11967, + "name": "Dragsinesti", + "county": "Timis" + }, + { + "id": 11968, + "name": "Gladna Montana", + "county": "Timis" + }, + { + "id": 11969, + "name": "Gladna Romana", + "county": "Timis" + }, + { + "id": 11970, + "name": "Hauzesti", + "county": "Timis" + }, + { + "id": 11971, + "name": "Matnicu Mic", + "county": "Timis" + }, + { + "id": 11972, + "name": "Zolt", + "county": "Timis" + }, + { + "id": 11973, + "name": "Foeni", + "county": "Timis" + }, + { + "id": 11974, + "name": "Cruceni", + "county": "Timis" + }, + { + "id": 11975, + "name": "Gavojdia", + "county": "Timis" + }, + { + "id": 11976, + "name": "Jena", + "county": "Timis" + }, + { + "id": 11977, + "name": "Lugojel", + "county": "Timis" + }, + { + "id": 11978, + "name": "Salbagel", + "county": "Timis" + }, + { + "id": 11979, + "name": "Gataia", + "county": "Timis" + }, + { + "id": 11980, + "name": "Berecuta", + "county": "Timis" + }, + { + "id": 11981, + "name": "Birda", + "county": "Timis" + }, + { + "id": 11982, + "name": "Butin", + "county": "Timis" + }, + { + "id": 11983, + "name": "Manastire", + "county": "Timis" + }, + { + "id": 11984, + "name": "Percosova", + "county": "Timis" + }, + { + "id": 11985, + "name": "Sculia", + "county": "Timis" + }, + { + "id": 11986, + "name": "Sangeorge", + "county": "Timis" + }, + { + "id": 11987, + "name": "Semlacu Mare", + "county": "Timis" + }, + { + "id": 11988, + "name": "Semlacu Mic", + "county": "Timis" + }, + { + "id": 11989, + "name": "Ghizela", + "county": "Timis" + }, + { + "id": 11990, + "name": "Hisias", + "county": "Timis" + }, + { + "id": 11991, + "name": "Paniova", + "county": "Timis" + }, + { + "id": 11992, + "name": "Sanovita", + "county": "Timis" + }, + { + "id": 11993, + "name": "Giarmata", + "county": "Timis" + }, + { + "id": 11994, + "name": "Cerneteaz", + "county": "Timis" + }, + { + "id": 11995, + "name": "Giera", + "county": "Timis" + }, + { + "id": 11996, + "name": "Granicerii", + "county": "Timis" + }, + { + "id": 11997, + "name": "Toager", + "county": "Timis" + }, + { + "id": 11998, + "name": "Giulvaz", + "county": "Timis" + }, + { + "id": 11999, + "name": "Crai Nou", + "county": "Timis" + }, + { + "id": 12000, + "name": "Ivanda", + "county": "Timis" + }, + { + "id": 12001, + "name": "Rudna", + "county": "Timis" + }, + { + "id": 12002, + "name": "Jamu Mare", + "county": "Timis" + }, + { + "id": 12003, + "name": "Clopodia", + "county": "Timis" + }, + { + "id": 12004, + "name": "Ferendia", + "county": "Timis" + }, + { + "id": 12005, + "name": "Gherman", + "county": "Timis" + }, + { + "id": 12006, + "name": "Latunas", + "county": "Timis" + }, + { + "id": 12007, + "name": "Jebel", + "county": "Timis" + }, + { + "id": 12008, + "name": "Padureni", + "county": "Timis" + }, + { + "id": 12009, + "name": "Lenauheim", + "county": "Timis" + }, + { + "id": 12010, + "name": "Bulgarus", + "county": "Timis" + }, + { + "id": 12011, + "name": "Grabat", + "county": "Timis" + }, + { + "id": 12012, + "name": "Liebling", + "county": "Timis" + }, + { + "id": 12013, + "name": "Cerna", + "county": "Timis" + }, + { + "id": 12014, + "name": "Iosif", + "county": "Timis" + }, + { + "id": 12015, + "name": "Lovrin", + "county": "Timis" + }, + { + "id": 12016, + "name": "Gottlob", + "county": "Timis" + }, + { + "id": 12017, + "name": "Tomnatic", + "county": "Timis" + }, + { + "id": 12018, + "name": "Vizejdia", + "county": "Timis" + }, + { + "id": 12019, + "name": "Margina", + "county": "Timis" + }, + { + "id": 12020, + "name": "Breazova", + "county": "Timis" + }, + { + "id": 12021, + "name": "Bulza", + "county": "Timis" + }, + { + "id": 12022, + "name": "Cosevita", + "county": "Timis" + }, + { + "id": 12023, + "name": "Costeiu de Sus", + "county": "Timis" + }, + { + "id": 12024, + "name": "Grosi", + "county": "Timis" + }, + { + "id": 12025, + "name": "Nemesesti", + "county": "Timis" + }, + { + "id": 12026, + "name": "Sintesti", + "county": "Timis" + }, + { + "id": 12027, + "name": "Zorani", + "county": "Timis" + }, + { + "id": 12028, + "name": "Masloc", + "county": "Timis" + }, + { + "id": 12029, + "name": "Alios", + "county": "Timis" + }, + { + "id": 12030, + "name": "Fibis", + "county": "Timis" + }, + { + "id": 12031, + "name": "Remetea Mica", + "county": "Timis" + }, + { + "id": 12032, + "name": "Manastiur", + "county": "Timis" + }, + { + "id": 12033, + "name": "Padurani", + "county": "Timis" + }, + { + "id": 12034, + "name": "Remetea-Lunca", + "county": "Timis" + }, + { + "id": 12035, + "name": "Topla", + "county": "Timis" + }, + { + "id": 12036, + "name": "Moravita", + "county": "Timis" + }, + { + "id": 12037, + "name": "Dejan", + "county": "Timis" + }, + { + "id": 12038, + "name": "Gaiu Mic", + "county": "Timis" + }, + { + "id": 12039, + "name": "Stamora Germana", + "county": "Timis" + }, + { + "id": 12040, + "name": "Mosnita Noua", + "county": "Timis" + }, + { + "id": 12041, + "name": "Albina", + "county": "Timis" + }, + { + "id": 12042, + "name": "Mosnita Veche", + "county": "Timis" + }, + { + "id": 12043, + "name": "Rudicica", + "county": "Timis" + }, + { + "id": 12044, + "name": "Urseni", + "county": "Timis" + }, + { + "id": 12045, + "name": "Nadrag", + "county": "Timis" + }, + { + "id": 12046, + "name": "Crivina", + "county": "Timis" + }, + { + "id": 12047, + "name": "Nitchidorf", + "county": "Timis" + }, + { + "id": 12048, + "name": "Blajova", + "county": "Timis" + }, + { + "id": 12049, + "name": "Duboz", + "county": "Timis" + }, + { + "id": 12050, + "name": "Ohaba Lunga", + "county": "Timis" + }, + { + "id": 12051, + "name": "Dubesti", + "county": "Timis" + }, + { + "id": 12052, + "name": "Iersnic", + "county": "Timis" + }, + { + "id": 12053, + "name": "Ohaba Romana", + "county": "Timis" + }, + { + "id": 12054, + "name": "Ortisoara", + "county": "Timis" + }, + { + "id": 12055, + "name": "Calacea", + "county": "Timis" + }, + { + "id": 12056, + "name": "Cornesti", + "county": "Timis" + }, + { + "id": 12057, + "name": "Seceani", + "county": "Timis" + }, + { + "id": 12058, + "name": "Peciu Nou", + "county": "Timis" + }, + { + "id": 12059, + "name": "Dinias", + "county": "Timis" + }, + { + "id": 12060, + "name": "Sanmartinu Sarbesc", + "county": "Timis" + }, + { + "id": 12061, + "name": "Periam", + "county": "Timis" + }, + { + "id": 12062, + "name": "Pesac", + "county": "Timis" + }, + { + "id": 12063, + "name": "Pietroasa", + "county": "Timis" + }, + { + "id": 12064, + "name": "Crivina de Sus", + "county": "Timis" + }, + { + "id": 12065, + "name": "Farasesti", + "county": "Timis" + }, + { + "id": 12066, + "name": "Poieni", + "county": "Timis" + }, + { + "id": 12067, + "name": "Pischia", + "county": "Timis" + }, + { + "id": 12068, + "name": "Bencecu de Jos", + "county": "Timis" + }, + { + "id": 12069, + "name": "Bencecu de Sus", + "county": "Timis" + }, + { + "id": 12070, + "name": "Murani", + "county": "Timis" + }, + { + "id": 12071, + "name": "Salciua Noua", + "county": "Timis" + }, + { + "id": 12072, + "name": "Racovita", + "county": "Timis" + }, + { + "id": 12073, + "name": "Capat", + "county": "Timis" + }, + { + "id": 12074, + "name": "Dragoiesti", + "county": "Timis" + }, + { + "id": 12075, + "name": "Ficatar", + "county": "Timis" + }, + { + "id": 12076, + "name": "Hitias", + "county": "Timis" + }, + { + "id": 12077, + "name": "Sarbova", + "county": "Timis" + }, + { + "id": 12078, + "name": "Recas", + "county": "Timis" + }, + { + "id": 12079, + "name": "Bazos", + "county": "Timis" + }, + { + "id": 12080, + "name": "Herneacova", + "county": "Timis" + }, + { + "id": 12081, + "name": "Izvin", + "county": "Timis" + }, + { + "id": 12082, + "name": "Nadas", + "county": "Timis" + }, + { + "id": 12083, + "name": "Petrovaselo", + "county": "Timis" + }, + { + "id": 12084, + "name": "Stanciova", + "county": "Timis" + }, + { + "id": 12085, + "name": "Remetea Mare", + "county": "Timis" + }, + { + "id": 12086, + "name": "Bazosu Nou", + "county": "Timis" + }, + { + "id": 12087, + "name": "Bucovat", + "county": "Timis" + }, + { + "id": 12088, + "name": "Ianova", + "county": "Timis" + }, + { + "id": 12089, + "name": "Sacosu Turcesc", + "county": "Timis" + }, + { + "id": 12090, + "name": "Berini", + "county": "Timis" + }, + { + "id": 12091, + "name": "Icloda", + "county": "Timis" + }, + { + "id": 12092, + "name": "Otvesti", + "county": "Timis" + }, + { + "id": 12093, + "name": "Stamora Romana", + "county": "Timis" + }, + { + "id": 12094, + "name": "Uliuc", + "county": "Timis" + }, + { + "id": 12095, + "name": "Unip", + "county": "Timis" + }, + { + "id": 12096, + "name": "Satchinez", + "county": "Timis" + }, + { + "id": 12097, + "name": "Barateaz", + "county": "Timis" + }, + { + "id": 12098, + "name": "Hodoni", + "county": "Timis" + }, + { + "id": 12099, + "name": "Sacalaz", + "county": "Timis" + }, + { + "id": 12100, + "name": "Beregsau Mare", + "county": "Timis" + }, + { + "id": 12101, + "name": "Beregsau Mic", + "county": "Timis" + }, + { + "id": 12102, + "name": "Secas", + "county": "Timis" + }, + { + "id": 12103, + "name": "Cheches", + "county": "Timis" + }, + { + "id": 12104, + "name": "Crivobara", + "county": "Timis" + }, + { + "id": 12105, + "name": "Vizma", + "county": "Timis" + }, + { + "id": 12106, + "name": "Sanandrei", + "county": "Timis" + }, + { + "id": 12107, + "name": "Carani", + "county": "Timis" + }, + { + "id": 12108, + "name": "Covaci", + "county": "Timis" + }, + { + "id": 12109, + "name": "Sanmihaiu Roman", + "county": "Timis" + }, + { + "id": 12110, + "name": "Sanmihaiu German", + "county": "Timis" + }, + { + "id": 12111, + "name": "Utvin", + "county": "Timis" + }, + { + "id": 12112, + "name": "Sanpetru Mare", + "county": "Timis" + }, + { + "id": 12113, + "name": "Igris", + "county": "Timis" + }, + { + "id": 12114, + "name": "Saravale", + "county": "Timis" + }, + { + "id": 12115, + "name": "Sag", + "county": "Timis" + }, + { + "id": 12116, + "name": "Parta", + "county": "Timis" + }, + { + "id": 12117, + "name": "Stiuca", + "county": "Timis" + }, + { + "id": 12118, + "name": "Dragomiresti", + "county": "Timis" + }, + { + "id": 12119, + "name": "Olosag", + "county": "Timis" + }, + { + "id": 12120, + "name": "Zgribesti", + "county": "Timis" + }, + { + "id": 12121, + "name": "Teremia Mare", + "county": "Timis" + }, + { + "id": 12122, + "name": "Nerau", + "county": "Timis" + }, + { + "id": 12123, + "name": "Teremia Mica", + "county": "Timis" + }, + { + "id": 12124, + "name": "Tomesti", + "county": "Timis" + }, + { + "id": 12125, + "name": "Balosesti", + "county": "Timis" + }, + { + "id": 12126, + "name": "Colonia Fabricii", + "county": "Timis" + }, + { + "id": 12127, + "name": "Luncanii de Jos", + "county": "Timis" + }, + { + "id": 12128, + "name": "Luncanii de Sus", + "county": "Timis" + }, + { + "id": 12129, + "name": "Romanesti", + "county": "Timis" + }, + { + "id": 12130, + "name": "Topolovatu Mare", + "county": "Timis" + }, + { + "id": 12131, + "name": "Cralovat", + "county": "Timis" + }, + { + "id": 12132, + "name": "Ictar-Budinti", + "county": "Timis" + }, + { + "id": 12133, + "name": "Iosifalau", + "county": "Timis" + }, + { + "id": 12134, + "name": "Sustra", + "county": "Timis" + }, + { + "id": 12135, + "name": "Topolovatu Mic", + "county": "Timis" + }, + { + "id": 12136, + "name": "Tormac", + "county": "Timis" + }, + { + "id": 12137, + "name": "Cadar", + "county": "Timis" + }, + { + "id": 12138, + "name": "Sipet", + "county": "Timis" + }, + { + "id": 12139, + "name": "Sudrias", + "county": "Timis" + }, + { + "id": 12140, + "name": "Jupani", + "county": "Timis" + }, + { + "id": 12141, + "name": "Saceni", + "county": "Timis" + }, + { + "id": 12142, + "name": "Surducu Mic", + "county": "Timis" + }, + { + "id": 12143, + "name": "Susani", + "county": "Timis" + }, + { + "id": 12144, + "name": "Traian Vuia", + "county": "Timis" + }, + { + "id": 12145, + "name": "Uivar", + "county": "Timis" + }, + { + "id": 12146, + "name": "Iohanisfeld", + "county": "Timis" + }, + { + "id": 12147, + "name": "Otelec", + "county": "Timis" + }, + { + "id": 12148, + "name": "Pustinis", + "county": "Timis" + }, + { + "id": 12149, + "name": "Rauti", + "county": "Timis" + }, + { + "id": 12150, + "name": "Sanmartinu Maghiar", + "county": "Timis" + }, + { + "id": 12151, + "name": "Varias", + "county": "Timis" + }, + { + "id": 12152, + "name": "Gelu", + "county": "Timis" + }, + { + "id": 12153, + "name": "Sanpetru Mic", + "county": "Timis" + }, + { + "id": 12154, + "name": "Victor Vlad Delamarina", + "county": "Timis" + }, + { + "id": 12155, + "name": "Herendesti", + "county": "Timis" + }, + { + "id": 12156, + "name": "Honorici", + "county": "Timis" + }, + { + "id": 12157, + "name": "Padureni", + "county": "Timis" + }, + { + "id": 12158, + "name": "Petroasa Mare", + "county": "Timis" + }, + { + "id": 12159, + "name": "Pini", + "county": "Timis" + }, + { + "id": 12160, + "name": "Visag", + "county": "Timis" + }, + { + "id": 12161, + "name": "Voiteg", + "county": "Timis" + }, + { + "id": 12162, + "name": "Folea", + "county": "Timis" + }, + { + "id": 12163, + "name": "Tulcea", + "county": "Tulcea" + }, + { + "id": 12164, + "name": "Tudor Vladimirescu", + "county": "Tulcea" + }, + { + "id": 12165, + "name": "Babadag", + "county": "Tulcea" + }, + { + "id": 12166, + "name": "Isaccea", + "county": "Tulcea" + }, + { + "id": 12167, + "name": "Tichilesti", + "county": "Tulcea" + }, + { + "id": 12168, + "name": "Revarsarea", + "county": "Tulcea" + }, + { + "id": 12169, + "name": "Macin", + "county": "Tulcea" + }, + { + "id": 12170, + "name": "Sulina", + "county": "Tulcea" + }, + { + "id": 12171, + "name": "Baia", + "county": "Tulcea" + }, + { + "id": 12172, + "name": "Camena", + "county": "Tulcea" + }, + { + "id": 12173, + "name": "Caugagia", + "county": "Tulcea" + }, + { + "id": 12174, + "name": "Ceamurlia de Sus", + "county": "Tulcea" + }, + { + "id": 12175, + "name": "Panduru", + "county": "Tulcea" + }, + { + "id": 12176, + "name": "Beidaud", + "county": "Tulcea" + }, + { + "id": 12177, + "name": "Neatarnarea", + "county": "Tulcea" + }, + { + "id": 12178, + "name": "Sarighiol de Deal", + "county": "Tulcea" + }, + { + "id": 12179, + "name": "C.a. Rosetti", + "county": "Tulcea" + }, + { + "id": 12180, + "name": "Cardon", + "county": "Tulcea" + }, + { + "id": 12181, + "name": "Letea", + "county": "Tulcea" + }, + { + "id": 12182, + "name": "Periprava", + "county": "Tulcea" + }, + { + "id": 12183, + "name": "Sfistofca", + "county": "Tulcea" + }, + { + "id": 12184, + "name": "Carcaliu", + "county": "Tulcea" + }, + { + "id": 12185, + "name": "Casimcea", + "county": "Tulcea" + }, + { + "id": 12186, + "name": "Cismeaua Noua", + "county": "Tulcea" + }, + { + "id": 12187, + "name": "Corugea", + "county": "Tulcea" + }, + { + "id": 12188, + "name": "Haidar", + "county": "Tulcea" + }, + { + "id": 12189, + "name": "Rahman", + "county": "Tulcea" + }, + { + "id": 12190, + "name": "Razboieni", + "county": "Tulcea" + }, + { + "id": 12191, + "name": "Stanca", + "county": "Tulcea" + }, + { + "id": 12192, + "name": "Ceatalchioi", + "county": "Tulcea" + }, + { + "id": 12193, + "name": "Patlageanca", + "county": "Tulcea" + }, + { + "id": 12194, + "name": "Plauru", + "county": "Tulcea" + }, + { + "id": 12195, + "name": "Salceni", + "county": "Tulcea" + }, + { + "id": 12196, + "name": "Ceamurlia de Jos", + "county": "Tulcea" + }, + { + "id": 12197, + "name": "Lunca", + "county": "Tulcea" + }, + { + "id": 12198, + "name": "Cerna", + "county": "Tulcea" + }, + { + "id": 12199, + "name": "General Praporgescu", + "county": "Tulcea" + }, + { + "id": 12200, + "name": "Mircea Voda", + "county": "Tulcea" + }, + { + "id": 12201, + "name": "Traian", + "county": "Tulcea" + }, + { + "id": 12202, + "name": "Chilia Veche", + "county": "Tulcea" + }, + { + "id": 12203, + "name": "Caslita", + "county": "Tulcea" + }, + { + "id": 12204, + "name": "Ostrovu Tataru", + "county": "Tulcea" + }, + { + "id": 12205, + "name": "Tatanir", + "county": "Tulcea" + }, + { + "id": 12206, + "name": "Ciucurova", + "county": "Tulcea" + }, + { + "id": 12207, + "name": "Atmagea", + "county": "Tulcea" + }, + { + "id": 12208, + "name": "Fantana Mare", + "county": "Tulcea" + }, + { + "id": 12209, + "name": "Crisan", + "county": "Tulcea" + }, + { + "id": 12210, + "name": "Caraorman", + "county": "Tulcea" + }, + { + "id": 12211, + "name": "Mila 23", + "county": "Tulcea" + }, + { + "id": 12212, + "name": "Daeni", + "county": "Tulcea" + }, + { + "id": 12213, + "name": "Dorobantu", + "county": "Tulcea" + }, + { + "id": 12214, + "name": "Ardealu", + "county": "Tulcea" + }, + { + "id": 12215, + "name": "Carjelari", + "county": "Tulcea" + }, + { + "id": 12216, + "name": "Fantana Oilor", + "county": "Tulcea" + }, + { + "id": 12217, + "name": "Mesteru", + "county": "Tulcea" + }, + { + "id": 12218, + "name": "Frecatei", + "county": "Tulcea" + }, + { + "id": 12219, + "name": "Cataloi", + "county": "Tulcea" + }, + { + "id": 12220, + "name": "Posta", + "county": "Tulcea" + }, + { + "id": 12221, + "name": "Telita", + "county": "Tulcea" + }, + { + "id": 12222, + "name": "Greci", + "county": "Tulcea" + }, + { + "id": 12223, + "name": "Grindu", + "county": "Tulcea" + }, + { + "id": 12224, + "name": "Hamcearca", + "county": "Tulcea" + }, + { + "id": 12225, + "name": "Balabancea", + "county": "Tulcea" + }, + { + "id": 12226, + "name": "Caprioara", + "county": "Tulcea" + }, + { + "id": 12227, + "name": "Nifon", + "county": "Tulcea" + }, + { + "id": 12228, + "name": "Horia", + "county": "Tulcea" + }, + { + "id": 12229, + "name": "Closca", + "county": "Tulcea" + }, + { + "id": 12230, + "name": "Floresti", + "county": "Tulcea" + }, + { + "id": 12231, + "name": "Izvoarele", + "county": "Tulcea" + }, + { + "id": 12232, + "name": "Alba", + "county": "Tulcea" + }, + { + "id": 12233, + "name": "Iulia", + "county": "Tulcea" + }, + { + "id": 12234, + "name": "Valea Teilor", + "county": "Tulcea" + }, + { + "id": 12235, + "name": "Jijila", + "county": "Tulcea" + }, + { + "id": 12236, + "name": "Garvan", + "county": "Tulcea" + }, + { + "id": 12237, + "name": "Jurilovca", + "county": "Tulcea" + }, + { + "id": 12238, + "name": "Visina", + "county": "Tulcea" + }, + { + "id": 12239, + "name": "Salcioara", + "county": "Tulcea" + }, + { + "id": 12240, + "name": "Luncavita", + "county": "Tulcea" + }, + { + "id": 12241, + "name": "Rachelu", + "county": "Tulcea" + }, + { + "id": 12242, + "name": "Vacareni", + "county": "Tulcea" + }, + { + "id": 12243, + "name": "Mahmudia", + "county": "Tulcea" + }, + { + "id": 12244, + "name": "Baltenii de Jos", + "county": "Tulcea" + }, + { + "id": 12245, + "name": "Baltenii de Sus", + "county": "Tulcea" + }, + { + "id": 12246, + "name": "Bestepe", + "county": "Tulcea" + }, + { + "id": 12247, + "name": "Maliuc", + "county": "Tulcea" + }, + { + "id": 12248, + "name": "Ilganii de Sus", + "county": "Tulcea" + }, + { + "id": 12249, + "name": "Gorgova", + "county": "Tulcea" + }, + { + "id": 12250, + "name": "Partizani", + "county": "Tulcea" + }, + { + "id": 12251, + "name": "Vulturu", + "county": "Tulcea" + }, + { + "id": 12252, + "name": "Mihai Bravu", + "county": "Tulcea" + }, + { + "id": 12253, + "name": "Satu Nou", + "county": "Tulcea" + }, + { + "id": 12254, + "name": "Turda", + "county": "Tulcea" + }, + { + "id": 12255, + "name": "Mihail Kogalniceanu", + "county": "Tulcea" + }, + { + "id": 12256, + "name": "Lastuni", + "county": "Tulcea" + }, + { + "id": 12257, + "name": "Randunica", + "county": "Tulcea" + }, + { + "id": 12258, + "name": "Murighiol", + "county": "Tulcea" + }, + { + "id": 12259, + "name": "Colina", + "county": "Tulcea" + }, + { + "id": 12260, + "name": "Dunavatu de Jos", + "county": "Tulcea" + }, + { + "id": 12261, + "name": "Dunavatu de Sus", + "county": "Tulcea" + }, + { + "id": 12262, + "name": "Plopul", + "county": "Tulcea" + }, + { + "id": 12263, + "name": "Sarinasuf", + "county": "Tulcea" + }, + { + "id": 12264, + "name": "Uzlina", + "county": "Tulcea" + }, + { + "id": 12265, + "name": "Nalbant", + "county": "Tulcea" + }, + { + "id": 12266, + "name": "Nicolae Balcescu", + "county": "Tulcea" + }, + { + "id": 12267, + "name": "Trestenic", + "county": "Tulcea" + }, + { + "id": 12268, + "name": "Niculitel", + "county": "Tulcea" + }, + { + "id": 12269, + "name": "Nufaru", + "county": "Tulcea" + }, + { + "id": 12270, + "name": "Ilganii de Jos", + "county": "Tulcea" + }, + { + "id": 12271, + "name": "Malcoci", + "county": "Tulcea" + }, + { + "id": 12272, + "name": "Victoria", + "county": "Tulcea" + }, + { + "id": 12273, + "name": "Ostrov", + "county": "Tulcea" + }, + { + "id": 12274, + "name": "Piatra", + "county": "Tulcea" + }, + { + "id": 12275, + "name": "Pardina", + "county": "Tulcea" + }, + { + "id": 12276, + "name": "Peceneaga", + "county": "Tulcea" + }, + { + "id": 12277, + "name": "Sarichioi", + "county": "Tulcea" + }, + { + "id": 12278, + "name": "Enisala", + "county": "Tulcea" + }, + { + "id": 12279, + "name": "Sabangia", + "county": "Tulcea" + }, + { + "id": 12280, + "name": "Visterna", + "county": "Tulcea" + }, + { + "id": 12281, + "name": "Zebil", + "county": "Tulcea" + }, + { + "id": 12282, + "name": "Sfantu Gheorghe", + "county": "Tulcea" + }, + { + "id": 12283, + "name": "Slava Cercheza", + "county": "Tulcea" + }, + { + "id": 12284, + "name": "Slava Rusa", + "county": "Tulcea" + }, + { + "id": 12285, + "name": "Smardan", + "county": "Tulcea" + }, + { + "id": 12286, + "name": "Somova", + "county": "Tulcea" + }, + { + "id": 12287, + "name": "Mineri", + "county": "Tulcea" + }, + { + "id": 12288, + "name": "Parches", + "county": "Tulcea" + }, + { + "id": 12289, + "name": "Stejaru", + "county": "Tulcea" + }, + { + "id": 12290, + "name": "Mina Altan Tepe", + "county": "Tulcea" + }, + { + "id": 12291, + "name": "Vasile Alecsandri", + "county": "Tulcea" + }, + { + "id": 12292, + "name": "Topolog", + "county": "Tulcea" + }, + { + "id": 12293, + "name": "Calfa", + "county": "Tulcea" + }, + { + "id": 12294, + "name": "Cerbu", + "county": "Tulcea" + }, + { + "id": 12295, + "name": "Fagarasu Nou", + "county": "Tulcea" + }, + { + "id": 12296, + "name": "Luminita", + "county": "Tulcea" + }, + { + "id": 12297, + "name": "Magurele", + "county": "Tulcea" + }, + { + "id": 12298, + "name": "Sambata Noua", + "county": "Tulcea" + }, + { + "id": 12299, + "name": "Turcoaia", + "county": "Tulcea" + }, + { + "id": 12300, + "name": "Valea Nucarilor", + "county": "Tulcea" + }, + { + "id": 12301, + "name": "Agighiol", + "county": "Tulcea" + }, + { + "id": 12302, + "name": "Iazurile", + "county": "Tulcea" + }, + { + "id": 12303, + "name": "I.c.bratianu", + "county": "Tulcea" + }, + { + "id": 12304, + "name": "Barlad", + "county": "Vaslui" + }, + { + "id": 12305, + "name": "Husi", + "county": "Vaslui" + }, + { + "id": 12306, + "name": "Negresti", + "county": "Vaslui" + }, + { + "id": 12307, + "name": "Cazanesti", + "county": "Vaslui" + }, + { + "id": 12308, + "name": "Cioatele", + "county": "Vaslui" + }, + { + "id": 12309, + "name": "Glodeni", + "county": "Vaslui" + }, + { + "id": 12310, + "name": "Parpanita", + "county": "Vaslui" + }, + { + "id": 12311, + "name": "Poiana", + "county": "Vaslui" + }, + { + "id": 12312, + "name": "Valea Mare", + "county": "Vaslui" + }, + { + "id": 12313, + "name": "Vaslui", + "county": "Vaslui" + }, + { + "id": 12314, + "name": "Bahnari", + "county": "Vaslui" + }, + { + "id": 12315, + "name": "Brodoc", + "county": "Vaslui" + }, + { + "id": 12316, + "name": "Moara Grecilor", + "county": "Vaslui" + }, + { + "id": 12317, + "name": "Rediu", + "county": "Vaslui" + }, + { + "id": 12318, + "name": "Viisoara", + "county": "Vaslui" + }, + { + "id": 12319, + "name": "Albesti", + "county": "Vaslui" + }, + { + "id": 12320, + "name": "Corni-Albesti", + "county": "Vaslui" + }, + { + "id": 12321, + "name": "Crasna", + "county": "Vaslui" + }, + { + "id": 12322, + "name": "Gura Albesti", + "county": "Vaslui" + }, + { + "id": 12323, + "name": "Alexandru Vlahuta", + "county": "Vaslui" + }, + { + "id": 12324, + "name": "Buda", + "county": "Vaslui" + }, + { + "id": 12325, + "name": "Ghicani", + "county": "Vaslui" + }, + { + "id": 12326, + "name": "Ibanesti", + "county": "Vaslui" + }, + { + "id": 12327, + "name": "Manzati", + "county": "Vaslui" + }, + { + "id": 12328, + "name": "Morareni", + "county": "Vaslui" + }, + { + "id": 12329, + "name": "Putu Olarului", + "county": "Vaslui" + }, + { + "id": 12330, + "name": "Arsura", + "county": "Vaslui" + }, + { + "id": 12331, + "name": "Fundatura", + "county": "Vaslui" + }, + { + "id": 12332, + "name": "Mihail Kogalniceanu", + "county": "Vaslui" + }, + { + "id": 12333, + "name": "Pahnesti", + "county": "Vaslui" + }, + { + "id": 12334, + "name": "Gara Banca", + "county": "Vaslui" + }, + { + "id": 12335, + "name": "Banca", + "county": "Vaslui" + }, + { + "id": 12336, + "name": "Ghermanesti", + "county": "Vaslui" + }, + { + "id": 12337, + "name": "Miclesti", + "county": "Vaslui" + }, + { + "id": 12338, + "name": "Mitoc", + "county": "Vaslui" + }, + { + "id": 12339, + "name": "Satu Nou", + "county": "Vaslui" + }, + { + "id": 12340, + "name": "Salcioara", + "county": "Vaslui" + }, + { + "id": 12341, + "name": "Sarbi", + "county": "Vaslui" + }, + { + "id": 12342, + "name": "Stoisesti", + "county": "Vaslui" + }, + { + "id": 12343, + "name": "Stramtura-Mitoc", + "county": "Vaslui" + }, + { + "id": 12344, + "name": "Tifu", + "county": "Vaslui" + }, + { + "id": 12345, + "name": "1 Decembrie", + "county": "Vaslui" + }, + { + "id": 12346, + "name": "Bacani", + "county": "Vaslui" + }, + { + "id": 12347, + "name": "Baltateni", + "county": "Vaslui" + }, + { + "id": 12348, + "name": "Drujesti", + "county": "Vaslui" + }, + { + "id": 12349, + "name": "Suseni", + "county": "Vaslui" + }, + { + "id": 12350, + "name": "Vulpaseni", + "county": "Vaslui" + }, + { + "id": 12351, + "name": "Bacesti", + "county": "Vaslui" + }, + { + "id": 12352, + "name": "Armaseni", + "county": "Vaslui" + }, + { + "id": 12353, + "name": "Babusa", + "county": "Vaslui" + }, + { + "id": 12354, + "name": "Paltinis", + "county": "Vaslui" + }, + { + "id": 12355, + "name": "Tibanestii Buhlii", + "county": "Vaslui" + }, + { + "id": 12356, + "name": "Vovriesti", + "county": "Vaslui" + }, + { + "id": 12357, + "name": "Balteni", + "county": "Vaslui" + }, + { + "id": 12358, + "name": "Balteni-Deal", + "county": "Vaslui" + }, + { + "id": 12359, + "name": "Chetresti", + "county": "Vaslui" + }, + { + "id": 12360, + "name": "Berezeni", + "county": "Vaslui" + }, + { + "id": 12361, + "name": "Musata", + "county": "Vaslui" + }, + { + "id": 12362, + "name": "Ranceni", + "county": "Vaslui" + }, + { + "id": 12363, + "name": "Satu Nou", + "county": "Vaslui" + }, + { + "id": 12364, + "name": "Stuhulet", + "county": "Vaslui" + }, + { + "id": 12365, + "name": "Blagesti", + "county": "Vaslui" + }, + { + "id": 12366, + "name": "Igesti", + "county": "Vaslui" + }, + { + "id": 12367, + "name": "Sipeni", + "county": "Vaslui" + }, + { + "id": 12368, + "name": "Bogdana", + "county": "Vaslui" + }, + { + "id": 12369, + "name": "Arsita", + "county": "Vaslui" + }, + { + "id": 12370, + "name": "Fantana Blanarului", + "county": "Vaslui" + }, + { + "id": 12371, + "name": "Gavanu", + "county": "Vaslui" + }, + { + "id": 12372, + "name": "Lacu Babei", + "county": "Vaslui" + }, + { + "id": 12373, + "name": "Plopeni", + "county": "Vaslui" + }, + { + "id": 12374, + "name": "Similisoara", + "county": "Vaslui" + }, + { + "id": 12375, + "name": "Suceveni", + "county": "Vaslui" + }, + { + "id": 12376, + "name": "Verdes", + "county": "Vaslui" + }, + { + "id": 12377, + "name": "Bogdanesti", + "county": "Vaslui" + }, + { + "id": 12378, + "name": "Buda", + "county": "Vaslui" + }, + { + "id": 12379, + "name": "Horoiata", + "county": "Vaslui" + }, + { + "id": 12380, + "name": "Hupca", + "county": "Vaslui" + }, + { + "id": 12381, + "name": "Orgoiesti", + "county": "Vaslui" + }, + { + "id": 12382, + "name": "Ulea", + "county": "Vaslui" + }, + { + "id": 12383, + "name": "Untesti", + "county": "Vaslui" + }, + { + "id": 12384, + "name": "Visinari", + "county": "Vaslui" + }, + { + "id": 12385, + "name": "Vladesti", + "county": "Vaslui" + }, + { + "id": 12386, + "name": "Bogdanita", + "county": "Vaslui" + }, + { + "id": 12387, + "name": "Cepesti", + "county": "Vaslui" + }, + { + "id": 12388, + "name": "Cartibasi", + "county": "Vaslui" + }, + { + "id": 12389, + "name": "Coroiesti", + "county": "Vaslui" + }, + { + "id": 12390, + "name": "Radaesti", + "county": "Vaslui" + }, + { + "id": 12391, + "name": "Schitu", + "county": "Vaslui" + }, + { + "id": 12392, + "name": "Tunsesti", + "county": "Vaslui" + }, + { + "id": 12393, + "name": "Botesti", + "county": "Vaslui" + }, + { + "id": 12394, + "name": "Ganesti", + "county": "Vaslui" + }, + { + "id": 12395, + "name": "Gugesti", + "county": "Vaslui" + }, + { + "id": 12396, + "name": "Talpigeni", + "county": "Vaslui" + }, + { + "id": 12397, + "name": "Averesti", + "county": "Vaslui" + }, + { + "id": 12398, + "name": "Armaseni", + "county": "Vaslui" + }, + { + "id": 12399, + "name": "Bunesti", + "county": "Vaslui" + }, + { + "id": 12400, + "name": "Plopi", + "county": "Vaslui" + }, + { + "id": 12401, + "name": "Podu Oprii", + "county": "Vaslui" + }, + { + "id": 12402, + "name": "Rosiori", + "county": "Vaslui" + }, + { + "id": 12403, + "name": "Tabalaesti", + "county": "Vaslui" + }, + { + "id": 12404, + "name": "Codaesti", + "county": "Vaslui" + }, + { + "id": 12405, + "name": "Ghergheleu", + "county": "Vaslui" + }, + { + "id": 12406, + "name": "Pribesti", + "county": "Vaslui" + }, + { + "id": 12407, + "name": "Rediu Galian", + "county": "Vaslui" + }, + { + "id": 12408, + "name": "Coroiesti", + "county": "Vaslui" + }, + { + "id": 12409, + "name": "Chilieni", + "county": "Vaslui" + }, + { + "id": 12410, + "name": "Coroiestii de Sus", + "county": "Vaslui" + }, + { + "id": 12411, + "name": "Hreasca", + "county": "Vaslui" + }, + { + "id": 12412, + "name": "Mireni", + "county": "Vaslui" + }, + { + "id": 12413, + "name": "Movileni", + "county": "Vaslui" + }, + { + "id": 12414, + "name": "Pacuraresti", + "county": "Vaslui" + }, + { + "id": 12415, + "name": "Costesti", + "county": "Vaslui" + }, + { + "id": 12416, + "name": "Chitcani", + "county": "Vaslui" + }, + { + "id": 12417, + "name": "Dinga", + "county": "Vaslui" + }, + { + "id": 12418, + "name": "Parvesti", + "county": "Vaslui" + }, + { + "id": 12419, + "name": "Puntiseni", + "county": "Vaslui" + }, + { + "id": 12420, + "name": "Radesti", + "county": "Vaslui" + }, + { + "id": 12421, + "name": "Cretesti", + "county": "Vaslui" + }, + { + "id": 12422, + "name": "Budesti", + "county": "Vaslui" + }, + { + "id": 12423, + "name": "Cretestii de Sus", + "county": "Vaslui" + }, + { + "id": 12424, + "name": "Satu Nou", + "county": "Vaslui" + }, + { + "id": 12425, + "name": "Danesti", + "county": "Vaslui" + }, + { + "id": 12426, + "name": "Bereasa", + "county": "Vaslui" + }, + { + "id": 12427, + "name": "Botoaia", + "county": "Vaslui" + }, + { + "id": 12428, + "name": "Emil Racovita", + "county": "Vaslui" + }, + { + "id": 12429, + "name": "Rascani", + "county": "Vaslui" + }, + { + "id": 12430, + "name": "Tatarani", + "county": "Vaslui" + }, + { + "id": 12431, + "name": "Deleni", + "county": "Vaslui" + }, + { + "id": 12432, + "name": "Bulboaca", + "county": "Vaslui" + }, + { + "id": 12433, + "name": "Moreni", + "county": "Vaslui" + }, + { + "id": 12434, + "name": "Zizinca", + "county": "Vaslui" + }, + { + "id": 12435, + "name": "Delesti", + "county": "Vaslui" + }, + { + "id": 12436, + "name": "Albesti", + "county": "Vaslui" + }, + { + "id": 12437, + "name": "Balesti", + "county": "Vaslui" + }, + { + "id": 12438, + "name": "Cozmesti", + "county": "Vaslui" + }, + { + "id": 12439, + "name": "Fastaci", + "county": "Vaslui" + }, + { + "id": 12440, + "name": "Fundatura", + "county": "Vaslui" + }, + { + "id": 12441, + "name": "Harsova", + "county": "Vaslui" + }, + { + "id": 12442, + "name": "Hordilesti", + "county": "Vaslui" + }, + { + "id": 12443, + "name": "Manastirea", + "county": "Vaslui" + }, + { + "id": 12444, + "name": "Raduiesti", + "county": "Vaslui" + }, + { + "id": 12445, + "name": "Dragomiresti", + "county": "Vaslui" + }, + { + "id": 12446, + "name": "Babuta", + "county": "Vaslui" + }, + { + "id": 12447, + "name": "Belzeni", + "county": "Vaslui" + }, + { + "id": 12448, + "name": "Botoi", + "county": "Vaslui" + }, + { + "id": 12449, + "name": "Ciuperca", + "county": "Vaslui" + }, + { + "id": 12450, + "name": "Doagele", + "county": "Vaslui" + }, + { + "id": 12451, + "name": "Poiana Pietrei", + "county": "Vaslui" + }, + { + "id": 12452, + "name": "Popesti", + "county": "Vaslui" + }, + { + "id": 12453, + "name": "Radeni", + "county": "Vaslui" + }, + { + "id": 12454, + "name": "Semenea", + "county": "Vaslui" + }, + { + "id": 12455, + "name": "Tulesti", + "county": "Vaslui" + }, + { + "id": 12456, + "name": "Vladia", + "county": "Vaslui" + }, + { + "id": 12457, + "name": "Dranceni", + "county": "Vaslui" + }, + { + "id": 12458, + "name": "Albita", + "county": "Vaslui" + }, + { + "id": 12459, + "name": "Baile Dranceni", + "county": "Vaslui" + }, + { + "id": 12460, + "name": "Ghermanesti", + "county": "Vaslui" + }, + { + "id": 12461, + "name": "Rasesti", + "county": "Vaslui" + }, + { + "id": 12462, + "name": "Soparleni", + "county": "Vaslui" + }, + { + "id": 12463, + "name": "Epureni", + "county": "Vaslui" + }, + { + "id": 12464, + "name": "Bobesti", + "county": "Vaslui" + }, + { + "id": 12465, + "name": "Duda", + "county": "Vaslui" + }, + { + "id": 12466, + "name": "Valea Grecului", + "county": "Vaslui" + }, + { + "id": 12467, + "name": "Dumesti", + "county": "Vaslui" + }, + { + "id": 12468, + "name": "Dumestii Vechi", + "county": "Vaslui" + }, + { + "id": 12469, + "name": "Schinetea", + "county": "Vaslui" + }, + { + "id": 12470, + "name": "Valea Mare", + "county": "Vaslui" + }, + { + "id": 12471, + "name": "Epureni", + "county": "Vaslui" + }, + { + "id": 12472, + "name": "Barlalesti", + "county": "Vaslui" + }, + { + "id": 12473, + "name": "Bursuci", + "county": "Vaslui" + }, + { + "id": 12474, + "name": "Horga", + "county": "Vaslui" + }, + { + "id": 12475, + "name": "Falciu", + "county": "Vaslui" + }, + { + "id": 12476, + "name": "Bogdanesti", + "county": "Vaslui" + }, + { + "id": 12477, + "name": "Bozia", + "county": "Vaslui" + }, + { + "id": 12478, + "name": "Copaceana", + "county": "Vaslui" + }, + { + "id": 12479, + "name": "Odaia Bogdana", + "county": "Vaslui" + }, + { + "id": 12480, + "name": "Ranzesti", + "county": "Vaslui" + }, + { + "id": 12481, + "name": "Gagesti", + "county": "Vaslui" + }, + { + "id": 12482, + "name": "Giurcani", + "county": "Vaslui" + }, + { + "id": 12483, + "name": "Peicani", + "county": "Vaslui" + }, + { + "id": 12484, + "name": "Popeni", + "county": "Vaslui" + }, + { + "id": 12485, + "name": "Tupilati", + "county": "Vaslui" + }, + { + "id": 12486, + "name": "Gherghesti", + "county": "Vaslui" + }, + { + "id": 12487, + "name": "Chetrosu", + "county": "Vaslui" + }, + { + "id": 12488, + "name": "Corodesti", + "county": "Vaslui" + }, + { + "id": 12489, + "name": "Dragomanesti", + "county": "Vaslui" + }, + { + "id": 12490, + "name": "Draxeni", + "county": "Vaslui" + }, + { + "id": 12491, + "name": "Lazu", + "county": "Vaslui" + }, + { + "id": 12492, + "name": "Lunca", + "county": "Vaslui" + }, + { + "id": 12493, + "name": "Soci", + "county": "Vaslui" + }, + { + "id": 12494, + "name": "Valea Lupului", + "county": "Vaslui" + }, + { + "id": 12495, + "name": "Garceni", + "county": "Vaslui" + }, + { + "id": 12496, + "name": "Dumbraveni", + "county": "Vaslui" + }, + { + "id": 12497, + "name": "Racova", + "county": "Vaslui" + }, + { + "id": 12498, + "name": "Racovita", + "county": "Vaslui" + }, + { + "id": 12499, + "name": "Slobozia", + "county": "Vaslui" + }, + { + "id": 12500, + "name": "Trohan", + "county": "Vaslui" + }, + { + "id": 12501, + "name": "Grivita", + "county": "Vaslui" + }, + { + "id": 12502, + "name": "Fruntiseni", + "county": "Vaslui" + }, + { + "id": 12503, + "name": "Grajdeni", + "county": "Vaslui" + }, + { + "id": 12504, + "name": "Odaia Bursucani", + "county": "Vaslui" + }, + { + "id": 12505, + "name": "Trestiana", + "county": "Vaslui" + }, + { + "id": 12506, + "name": "Hoceni", + "county": "Vaslui" + }, + { + "id": 12507, + "name": "Barbosi", + "county": "Vaslui" + }, + { + "id": 12508, + "name": "Deleni", + "county": "Vaslui" + }, + { + "id": 12509, + "name": "Oteleni", + "county": "Vaslui" + }, + { + "id": 12510, + "name": "Rediu", + "county": "Vaslui" + }, + { + "id": 12511, + "name": "Siscani", + "county": "Vaslui" + }, + { + "id": 12512, + "name": "Tomsa", + "county": "Vaslui" + }, + { + "id": 12513, + "name": "Hurdugi", + "county": "Vaslui" + }, + { + "id": 12514, + "name": "Grumezoaia", + "county": "Vaslui" + }, + { + "id": 12515, + "name": "Gusitei", + "county": "Vaslui" + }, + { + "id": 12516, + "name": "Plotonesti", + "county": "Vaslui" + }, + { + "id": 12517, + "name": "Urlati", + "county": "Vaslui" + }, + { + "id": 12518, + "name": "Iana", + "county": "Vaslui" + }, + { + "id": 12519, + "name": "Halaresti", + "county": "Vaslui" + }, + { + "id": 12520, + "name": "Recea", + "county": "Vaslui" + }, + { + "id": 12521, + "name": "Silistea", + "county": "Vaslui" + }, + { + "id": 12522, + "name": "Vadurile", + "county": "Vaslui" + }, + { + "id": 12523, + "name": "Ivanesti", + "county": "Vaslui" + }, + { + "id": 12524, + "name": "Albina", + "county": "Vaslui" + }, + { + "id": 12525, + "name": "Blesca", + "county": "Vaslui" + }, + { + "id": 12526, + "name": "Brosteni", + "county": "Vaslui" + }, + { + "id": 12527, + "name": "Buscata", + "county": "Vaslui" + }, + { + "id": 12528, + "name": "Cosca", + "county": "Vaslui" + }, + { + "id": 12529, + "name": "Cosesti", + "county": "Vaslui" + }, + { + "id": 12530, + "name": "Fundatura Mare", + "county": "Vaslui" + }, + { + "id": 12531, + "name": "Fundatura Mica", + "county": "Vaslui" + }, + { + "id": 12532, + "name": "Harsoveni", + "county": "Vaslui" + }, + { + "id": 12533, + "name": "Iezerel", + "county": "Vaslui" + }, + { + "id": 12534, + "name": "Ursoaia", + "county": "Vaslui" + }, + { + "id": 12535, + "name": "Valea Mare", + "county": "Vaslui" + }, + { + "id": 12536, + "name": "Valea Oanei", + "county": "Vaslui" + }, + { + "id": 12537, + "name": "Ivesti", + "county": "Vaslui" + }, + { + "id": 12538, + "name": "Belcesti", + "county": "Vaslui" + }, + { + "id": 12539, + "name": "Pogonesti", + "county": "Vaslui" + }, + { + "id": 12540, + "name": "Polocin", + "county": "Vaslui" + }, + { + "id": 12541, + "name": "Laza", + "county": "Vaslui" + }, + { + "id": 12542, + "name": "Bejenesti", + "county": "Vaslui" + }, + { + "id": 12543, + "name": "Poiana lui Alexa", + "county": "Vaslui" + }, + { + "id": 12544, + "name": "Puscasi", + "county": "Vaslui" + }, + { + "id": 12545, + "name": "Rasnita", + "county": "Vaslui" + }, + { + "id": 12546, + "name": "Sauca", + "county": "Vaslui" + }, + { + "id": 12547, + "name": "Teisoru", + "county": "Vaslui" + }, + { + "id": 12548, + "name": "Valea Targului", + "county": "Vaslui" + }, + { + "id": 12549, + "name": "Lipovat", + "county": "Vaslui" + }, + { + "id": 12550, + "name": "Capusneni", + "county": "Vaslui" + }, + { + "id": 12551, + "name": "Chitoc", + "county": "Vaslui" + }, + { + "id": 12552, + "name": "Corbu", + "county": "Vaslui" + }, + { + "id": 12553, + "name": "Fundu Vaii", + "county": "Vaslui" + }, + { + "id": 12554, + "name": "Lunca Banului", + "county": "Vaslui" + }, + { + "id": 12555, + "name": "Broscosesti", + "county": "Vaslui" + }, + { + "id": 12556, + "name": "Condrea", + "county": "Vaslui" + }, + { + "id": 12557, + "name": "Focsa", + "county": "Vaslui" + }, + { + "id": 12558, + "name": "Lunca Veche", + "county": "Vaslui" + }, + { + "id": 12559, + "name": "Otetoaia", + "county": "Vaslui" + }, + { + "id": 12560, + "name": "Raducani", + "county": "Vaslui" + }, + { + "id": 12561, + "name": "Malusteni", + "county": "Vaslui" + }, + { + "id": 12562, + "name": "Ghireasca", + "county": "Vaslui" + }, + { + "id": 12563, + "name": "Lupesti", + "county": "Vaslui" + }, + { + "id": 12564, + "name": "Manastirea", + "county": "Vaslui" + }, + { + "id": 12565, + "name": "Manzatesti", + "county": "Vaslui" + }, + { + "id": 12566, + "name": "Tutcani", + "county": "Vaslui" + }, + { + "id": 12567, + "name": "Miclesti", + "county": "Vaslui" + }, + { + "id": 12568, + "name": "Chircesti", + "county": "Vaslui" + }, + { + "id": 12569, + "name": "Popesti", + "county": "Vaslui" + }, + { + "id": 12570, + "name": "Muntenii de Jos", + "county": "Vaslui" + }, + { + "id": 12571, + "name": "Bacaoani", + "county": "Vaslui" + }, + { + "id": 12572, + "name": "Manjesti", + "county": "Vaslui" + }, + { + "id": 12573, + "name": "Secuia", + "county": "Vaslui" + }, + { + "id": 12574, + "name": "Murgeni", + "county": "Vaslui" + }, + { + "id": 12575, + "name": "Carja", + "county": "Vaslui" + }, + { + "id": 12576, + "name": "Latesti", + "county": "Vaslui" + }, + { + "id": 12577, + "name": "Sarateni", + "county": "Vaslui" + }, + { + "id": 12578, + "name": "Schineni", + "county": "Vaslui" + }, + { + "id": 12579, + "name": "Raiu", + "county": "Vaslui" + }, + { + "id": 12580, + "name": "Floreni", + "county": "Vaslui" + }, + { + "id": 12581, + "name": "Oltenesti", + "county": "Vaslui" + }, + { + "id": 12582, + "name": "Curteni", + "county": "Vaslui" + }, + { + "id": 12583, + "name": "Pahna", + "county": "Vaslui" + }, + { + "id": 12584, + "name": "Tarzii", + "county": "Vaslui" + }, + { + "id": 12585, + "name": "Vinetesti", + "county": "Vaslui" + }, + { + "id": 12586, + "name": "Zgura", + "county": "Vaslui" + }, + { + "id": 12587, + "name": "Osesti", + "county": "Vaslui" + }, + { + "id": 12588, + "name": "Buda", + "county": "Vaslui" + }, + { + "id": 12589, + "name": "Padureni", + "county": "Vaslui" + }, + { + "id": 12590, + "name": "Valcele", + "county": "Vaslui" + }, + { + "id": 12591, + "name": "Padureni", + "county": "Vaslui" + }, + { + "id": 12592, + "name": "Capotesti", + "county": "Vaslui" + }, + { + "id": 12593, + "name": "Davidesti", + "county": "Vaslui" + }, + { + "id": 12594, + "name": "Ivanesti", + "county": "Vaslui" + }, + { + "id": 12595, + "name": "Leosti", + "county": "Vaslui" + }, + { + "id": 12596, + "name": "Rusca", + "county": "Vaslui" + }, + { + "id": 12597, + "name": "Todireni", + "county": "Vaslui" + }, + { + "id": 12598, + "name": "Valeni", + "county": "Vaslui" + }, + { + "id": 12599, + "name": "Perieni", + "county": "Vaslui" + }, + { + "id": 12600, + "name": "Ciocani", + "county": "Vaslui" + }, + { + "id": 12601, + "name": "Crang", + "county": "Vaslui" + }, + { + "id": 12602, + "name": "Crangu Nou", + "county": "Vaslui" + }, + { + "id": 12603, + "name": "Podu Petris", + "county": "Vaslui" + }, + { + "id": 12604, + "name": "Poienesti", + "county": "Vaslui" + }, + { + "id": 12605, + "name": "Dealu Secarii", + "county": "Vaslui" + }, + { + "id": 12606, + "name": "Floresti", + "county": "Vaslui" + }, + { + "id": 12607, + "name": "Frasinu", + "county": "Vaslui" + }, + { + "id": 12608, + "name": "Fundu Vaii", + "county": "Vaslui" + }, + { + "id": 12609, + "name": "Oprisita", + "county": "Vaslui" + }, + { + "id": 12610, + "name": "Poienesti-Deal", + "county": "Vaslui" + }, + { + "id": 12611, + "name": "Pogana", + "county": "Vaslui" + }, + { + "id": 12612, + "name": "Bogesti", + "county": "Vaslui" + }, + { + "id": 12613, + "name": "Carjoani", + "county": "Vaslui" + }, + { + "id": 12614, + "name": "Mascurei", + "county": "Vaslui" + }, + { + "id": 12615, + "name": "Tomesti", + "county": "Vaslui" + }, + { + "id": 12616, + "name": "Puiesti", + "county": "Vaslui" + }, + { + "id": 12617, + "name": "Bartalus-Mocani", + "county": "Vaslui" + }, + { + "id": 12618, + "name": "Bartalus-Razesi", + "county": "Vaslui" + }, + { + "id": 12619, + "name": "Calimanesti", + "county": "Vaslui" + }, + { + "id": 12620, + "name": "Cetatuia", + "county": "Vaslui" + }, + { + "id": 12621, + "name": "Cristesti", + "county": "Vaslui" + }, + { + "id": 12622, + "name": "Fantanele", + "county": "Vaslui" + }, + { + "id": 12623, + "name": "Fulgu", + "county": "Vaslui" + }, + { + "id": 12624, + "name": "Galtesti", + "county": "Vaslui" + }, + { + "id": 12625, + "name": "Iezer", + "county": "Vaslui" + }, + { + "id": 12626, + "name": "Lalesti", + "county": "Vaslui" + }, + { + "id": 12627, + "name": "Rotari", + "county": "Vaslui" + }, + { + "id": 12628, + "name": "Rusi", + "county": "Vaslui" + }, + { + "id": 12629, + "name": "Pungesti", + "county": "Vaslui" + }, + { + "id": 12630, + "name": "Armasoaia", + "county": "Vaslui" + }, + { + "id": 12631, + "name": "Cursesti-Deal", + "county": "Vaslui" + }, + { + "id": 12632, + "name": "Cursesti-Vale", + "county": "Vaslui" + }, + { + "id": 12633, + "name": "Hordila", + "county": "Vaslui" + }, + { + "id": 12634, + "name": "Rapsa", + "county": "Vaslui" + }, + { + "id": 12635, + "name": "Silistea", + "county": "Vaslui" + }, + { + "id": 12636, + "name": "Stejaru", + "county": "Vaslui" + }, + { + "id": 12637, + "name": "Toporasti", + "county": "Vaslui" + }, + { + "id": 12638, + "name": "Rebricea", + "county": "Vaslui" + }, + { + "id": 12639, + "name": "Bolati", + "county": "Vaslui" + }, + { + "id": 12640, + "name": "Craciunesti", + "county": "Vaslui" + }, + { + "id": 12641, + "name": "Draxeni", + "county": "Vaslui" + }, + { + "id": 12642, + "name": "Macresti", + "county": "Vaslui" + }, + { + "id": 12643, + "name": "Ratesu Cuzei", + "county": "Vaslui" + }, + { + "id": 12644, + "name": "Sasova", + "county": "Vaslui" + }, + { + "id": 12645, + "name": "Tatomiresti", + "county": "Vaslui" + }, + { + "id": 12646, + "name": "Tufestii de Jos", + "county": "Vaslui" + }, + { + "id": 12647, + "name": "Rosiesti", + "county": "Vaslui" + }, + { + "id": 12648, + "name": "Codreni", + "county": "Vaslui" + }, + { + "id": 12649, + "name": "Gara Rosiesti", + "county": "Vaslui" + }, + { + "id": 12650, + "name": "Gura Idrici", + "county": "Vaslui" + }, + { + "id": 12651, + "name": "Idrici", + "county": "Vaslui" + }, + { + "id": 12652, + "name": "Rediu", + "county": "Vaslui" + }, + { + "id": 12653, + "name": "Valea lui Darie", + "county": "Vaslui" + }, + { + "id": 12654, + "name": "Solesti", + "county": "Vaslui" + }, + { + "id": 12655, + "name": "Bousori", + "county": "Vaslui" + }, + { + "id": 12656, + "name": "Iaz", + "county": "Vaslui" + }, + { + "id": 12657, + "name": "Satu Nou", + "county": "Vaslui" + }, + { + "id": 12658, + "name": "Serbotesti", + "county": "Vaslui" + }, + { + "id": 12659, + "name": "Stioborani", + "county": "Vaslui" + }, + { + "id": 12660, + "name": "Valea Silistei", + "county": "Vaslui" + }, + { + "id": 12661, + "name": "Stanilesti", + "county": "Vaslui" + }, + { + "id": 12662, + "name": "Bogdana-Voloseni", + "county": "Vaslui" + }, + { + "id": 12663, + "name": "Budu Cantemir", + "county": "Vaslui" + }, + { + "id": 12664, + "name": "Chersacosu", + "county": "Vaslui" + }, + { + "id": 12665, + "name": "Gura Vaii", + "county": "Vaslui" + }, + { + "id": 12666, + "name": "Poganesti", + "county": "Vaslui" + }, + { + "id": 12667, + "name": "Saratu", + "county": "Vaslui" + }, + { + "id": 12668, + "name": "Stefan cel Mare", + "county": "Vaslui" + }, + { + "id": 12669, + "name": "Barzesti", + "county": "Vaslui" + }, + { + "id": 12670, + "name": "Brahasoaia", + "county": "Vaslui" + }, + { + "id": 12671, + "name": "Calugareni", + "county": "Vaslui" + }, + { + "id": 12672, + "name": "Cantalaresti", + "county": "Vaslui" + }, + { + "id": 12673, + "name": "Maraseni", + "county": "Vaslui" + }, + { + "id": 12674, + "name": "Muntenesti", + "county": "Vaslui" + }, + { + "id": 12675, + "name": "Suletea", + "county": "Vaslui" + }, + { + "id": 12676, + "name": "Fedesti", + "county": "Vaslui" + }, + { + "id": 12677, + "name": "Jigalia", + "county": "Vaslui" + }, + { + "id": 12678, + "name": "Rascani", + "county": "Vaslui" + }, + { + "id": 12679, + "name": "Tanacu", + "county": "Vaslui" + }, + { + "id": 12680, + "name": "Benesti", + "county": "Vaslui" + }, + { + "id": 12681, + "name": "Muntenii de Sus", + "county": "Vaslui" + }, + { + "id": 12682, + "name": "Satu Nou", + "county": "Vaslui" + }, + { + "id": 12683, + "name": "Tacuta", + "county": "Vaslui" + }, + { + "id": 12684, + "name": "Cujba", + "county": "Vaslui" + }, + { + "id": 12685, + "name": "Dumasca", + "county": "Vaslui" + }, + { + "id": 12686, + "name": "Focseasca", + "county": "Vaslui" + }, + { + "id": 12687, + "name": "Mircesti", + "county": "Vaslui" + }, + { + "id": 12688, + "name": "Protopopesti", + "county": "Vaslui" + }, + { + "id": 12689, + "name": "Sofieni", + "county": "Vaslui" + }, + { + "id": 12690, + "name": "Tatarani", + "county": "Vaslui" + }, + { + "id": 12691, + "name": "Baltati", + "county": "Vaslui" + }, + { + "id": 12692, + "name": "Crasnaseni", + "county": "Vaslui" + }, + { + "id": 12693, + "name": "Giurgesti", + "county": "Vaslui" + }, + { + "id": 12694, + "name": "Leosti", + "county": "Vaslui" + }, + { + "id": 12695, + "name": "Mantu", + "county": "Vaslui" + }, + { + "id": 12696, + "name": "Stroiesti", + "county": "Vaslui" + }, + { + "id": 12697, + "name": "Valea lui Bosie", + "county": "Vaslui" + }, + { + "id": 12698, + "name": "Valea Seaca", + "county": "Vaslui" + }, + { + "id": 12699, + "name": "Todiresti", + "county": "Vaslui" + }, + { + "id": 12700, + "name": "Cotic", + "county": "Vaslui" + }, + { + "id": 12701, + "name": "Dragesti", + "county": "Vaslui" + }, + { + "id": 12702, + "name": "Huc", + "county": "Vaslui" + }, + { + "id": 12703, + "name": "Plopoasa", + "county": "Vaslui" + }, + { + "id": 12704, + "name": "Rafaila", + "county": "Vaslui" + }, + { + "id": 12705, + "name": "Silistea", + "county": "Vaslui" + }, + { + "id": 12706, + "name": "Sofronesti", + "county": "Vaslui" + }, + { + "id": 12707, + "name": "Valea Popii", + "county": "Vaslui" + }, + { + "id": 12708, + "name": "Viisoara", + "county": "Vaslui" + }, + { + "id": 12709, + "name": "Tutova", + "county": "Vaslui" + }, + { + "id": 12710, + "name": "Badeana", + "county": "Vaslui" + }, + { + "id": 12711, + "name": "Borodesti", + "county": "Vaslui" + }, + { + "id": 12712, + "name": "Ciortolom", + "county": "Vaslui" + }, + { + "id": 12713, + "name": "Coroiu", + "county": "Vaslui" + }, + { + "id": 12714, + "name": "Crivesti", + "county": "Vaslui" + }, + { + "id": 12715, + "name": "Pochidia", + "county": "Vaslui" + }, + { + "id": 12716, + "name": "Satu Nou", + "county": "Vaslui" + }, + { + "id": 12717, + "name": "Salceni", + "county": "Vaslui" + }, + { + "id": 12718, + "name": "Vizureni", + "county": "Vaslui" + }, + { + "id": 12719, + "name": "Valeni", + "county": "Vaslui" + }, + { + "id": 12720, + "name": "Feresti", + "county": "Vaslui" + }, + { + "id": 12721, + "name": "Moara Domneasca", + "county": "Vaslui" + }, + { + "id": 12722, + "name": "Vetrisoaia", + "county": "Vaslui" + }, + { + "id": 12723, + "name": "Bumbata", + "county": "Vaslui" + }, + { + "id": 12724, + "name": "Viisoara", + "county": "Vaslui" + }, + { + "id": 12725, + "name": "Dodesti", + "county": "Vaslui" + }, + { + "id": 12726, + "name": "Halta Dodesti", + "county": "Vaslui" + }, + { + "id": 12727, + "name": "Urdesti", + "county": "Vaslui" + }, + { + "id": 12728, + "name": "Valeni", + "county": "Vaslui" + }, + { + "id": 12729, + "name": "Viltotesti", + "county": "Vaslui" + }, + { + "id": 12730, + "name": "Vinderei", + "county": "Vaslui" + }, + { + "id": 12731, + "name": "Bradesti", + "county": "Vaslui" + }, + { + "id": 12732, + "name": "Docani", + "county": "Vaslui" + }, + { + "id": 12733, + "name": "Docaneasa", + "county": "Vaslui" + }, + { + "id": 12734, + "name": "Gara Docaneasa", + "county": "Vaslui" + }, + { + "id": 12735, + "name": "Gara Talasman", + "county": "Vaslui" + }, + { + "id": 12736, + "name": "Obarseni", + "county": "Vaslui" + }, + { + "id": 12737, + "name": "Valea Lunga", + "county": "Vaslui" + }, + { + "id": 12738, + "name": "Voinesti", + "county": "Vaslui" + }, + { + "id": 12739, + "name": "Avramesti", + "county": "Vaslui" + }, + { + "id": 12740, + "name": "Bancesti", + "county": "Vaslui" + }, + { + "id": 12741, + "name": "Corobanesti", + "county": "Vaslui" + }, + { + "id": 12742, + "name": "Gardesti", + "county": "Vaslui" + }, + { + "id": 12743, + "name": "Marasesti", + "county": "Vaslui" + }, + { + "id": 12744, + "name": "Obarseni", + "county": "Vaslui" + }, + { + "id": 12745, + "name": "Obarsenii Lingurari", + "county": "Vaslui" + }, + { + "id": 12746, + "name": "Rugaria", + "county": "Vaslui" + }, + { + "id": 12747, + "name": "Stancaseni", + "county": "Vaslui" + }, + { + "id": 12748, + "name": "Uricari", + "county": "Vaslui" + }, + { + "id": 12749, + "name": "Vulturesti", + "county": "Vaslui" + }, + { + "id": 12750, + "name": "Buhaiesti", + "county": "Vaslui" + }, + { + "id": 12751, + "name": "Podeni", + "county": "Vaslui" + }, + { + "id": 12752, + "name": "Voinesti", + "county": "Vaslui" + }, + { + "id": 12753, + "name": "Vutcani", + "county": "Vaslui" + }, + { + "id": 12754, + "name": "Malaiesti", + "county": "Vaslui" + }, + { + "id": 12755, + "name": "Posta Elan", + "county": "Vaslui" + }, + { + "id": 12756, + "name": "Zapodeni", + "county": "Vaslui" + }, + { + "id": 12757, + "name": "Butucaria", + "county": "Vaslui" + }, + { + "id": 12758, + "name": "Ciofeni", + "county": "Vaslui" + }, + { + "id": 12759, + "name": "Delea", + "county": "Vaslui" + }, + { + "id": 12760, + "name": "Dobroslovesti", + "county": "Vaslui" + }, + { + "id": 12761, + "name": "Macresti", + "county": "Vaslui" + }, + { + "id": 12762, + "name": "Portari", + "county": "Vaslui" + }, + { + "id": 12763, + "name": "Telejna", + "county": "Vaslui" + }, + { + "id": 12764, + "name": "Uncesti", + "county": "Vaslui" + }, + { + "id": 12765, + "name": "Zorleni", + "county": "Vaslui" + }, + { + "id": 12766, + "name": "Dealu Mare", + "county": "Vaslui" + }, + { + "id": 12767, + "name": "Popeni", + "county": "Vaslui" + }, + { + "id": 12768, + "name": "Simila", + "county": "Vaslui" + }, + { + "id": 12769, + "name": "Ramnicu Valcea", + "county": "Valcea" + }, + { + "id": 12770, + "name": "Aranghel", + "county": "Valcea" + }, + { + "id": 12771, + "name": "Cazanesti", + "county": "Valcea" + }, + { + "id": 12772, + "name": "Copacelu", + "county": "Valcea" + }, + { + "id": 12773, + "name": "Dealu Malului", + "county": "Valcea" + }, + { + "id": 12774, + "name": "Poenari", + "county": "Valcea" + }, + { + "id": 12775, + "name": "Priba", + "county": "Valcea" + }, + { + "id": 12776, + "name": "Raureni", + "county": "Valcea" + }, + { + "id": 12777, + "name": "Stolniceni", + "county": "Valcea" + }, + { + "id": 12778, + "name": "Troian", + "county": "Valcea" + }, + { + "id": 12779, + "name": "Goranu", + "county": "Valcea" + }, + { + "id": 12780, + "name": "Feteni", + "county": "Valcea" + }, + { + "id": 12781, + "name": "Lespezi", + "county": "Valcea" + }, + { + "id": 12782, + "name": "Salistea", + "county": "Valcea" + }, + { + "id": 12783, + "name": "Curaturile", + "county": "Valcea" + }, + { + "id": 12784, + "name": "Gatejesti", + "county": "Valcea" + }, + { + "id": 12785, + "name": "Prajila", + "county": "Valcea" + }, + { + "id": 12786, + "name": "Cheia", + "county": "Valcea" + }, + { + "id": 12787, + "name": "Comanca", + "county": "Valcea" + }, + { + "id": 12788, + "name": "Gurguiata", + "county": "Valcea" + }, + { + "id": 12789, + "name": "Livadia", + "county": "Valcea" + }, + { + "id": 12790, + "name": "Mosoroasa", + "county": "Valcea" + }, + { + "id": 12791, + "name": "Olanesti", + "county": "Valcea" + }, + { + "id": 12792, + "name": "Pietrisu", + "county": "Valcea" + }, + { + "id": 12793, + "name": "Tisa", + "county": "Valcea" + }, + { + "id": 12794, + "name": "Brezoi", + "county": "Valcea" + }, + { + "id": 12795, + "name": "Calinesti", + "county": "Valcea" + }, + { + "id": 12796, + "name": "Corbu", + "county": "Valcea" + }, + { + "id": 12797, + "name": "Draganesti", + "county": "Valcea" + }, + { + "id": 12798, + "name": "Golotreni", + "county": "Valcea" + }, + { + "id": 12799, + "name": "Pascoaia", + "county": "Valcea" + }, + { + "id": 12800, + "name": "Proieni", + "county": "Valcea" + }, + { + "id": 12801, + "name": "Valea lui Stan", + "county": "Valcea" + }, + { + "id": 12802, + "name": "Varatica", + "county": "Valcea" + }, + { + "id": 12803, + "name": "Calimanesti", + "county": "Valcea" + }, + { + "id": 12804, + "name": "Caciulata", + "county": "Valcea" + }, + { + "id": 12805, + "name": "Jiblea Noua", + "county": "Valcea" + }, + { + "id": 12806, + "name": "Jiblea Veche", + "county": "Valcea" + }, + { + "id": 12807, + "name": "Pausa", + "county": "Valcea" + }, + { + "id": 12808, + "name": "Seaca", + "county": "Valcea" + }, + { + "id": 12809, + "name": "Dragasani", + "county": "Valcea" + }, + { + "id": 12810, + "name": "Valea Caselor", + "county": "Valcea" + }, + { + "id": 12811, + "name": "Zarneni", + "county": "Valcea" + }, + { + "id": 12812, + "name": "Zlatarei", + "county": "Valcea" + }, + { + "id": 12813, + "name": "Horezu", + "county": "Valcea" + }, + { + "id": 12814, + "name": "Ifrimesti", + "county": "Valcea" + }, + { + "id": 12815, + "name": "Ramesti", + "county": "Valcea" + }, + { + "id": 12816, + "name": "Romanii de Jos", + "county": "Valcea" + }, + { + "id": 12817, + "name": "Romanii de Sus", + "county": "Valcea" + }, + { + "id": 12818, + "name": "Tanasesti", + "county": "Valcea" + }, + { + "id": 12819, + "name": "Ursani", + "county": "Valcea" + }, + { + "id": 12820, + "name": "Buda", + "county": "Valcea" + }, + { + "id": 12821, + "name": "Cosota", + "county": "Valcea" + }, + { + "id": 12822, + "name": "Facai", + "county": "Valcea" + }, + { + "id": 12823, + "name": "Gura Suhasului", + "county": "Valcea" + }, + { + "id": 12824, + "name": "Lunca", + "county": "Valcea" + }, + { + "id": 12825, + "name": "Ocnita", + "county": "Valcea" + }, + { + "id": 12826, + "name": "Slatioarele", + "county": "Valcea" + }, + { + "id": 12827, + "name": "Teica", + "county": "Valcea" + }, + { + "id": 12828, + "name": "Alunu", + "county": "Valcea" + }, + { + "id": 12829, + "name": "Bodesti", + "county": "Valcea" + }, + { + "id": 12830, + "name": "Coltesti", + "county": "Valcea" + }, + { + "id": 12831, + "name": "Igoiu", + "county": "Valcea" + }, + { + "id": 12832, + "name": "Ilaciu", + "county": "Valcea" + }, + { + "id": 12833, + "name": "Ocracu", + "county": "Valcea" + }, + { + "id": 12834, + "name": "Rosia", + "county": "Valcea" + }, + { + "id": 12835, + "name": "Amarasti", + "county": "Valcea" + }, + { + "id": 12836, + "name": "Meresesti", + "county": "Valcea" + }, + { + "id": 12837, + "name": "Nemoiu", + "county": "Valcea" + }, + { + "id": 12838, + "name": "Padina", + "county": "Valcea" + }, + { + "id": 12839, + "name": "Palanga", + "county": "Valcea" + }, + { + "id": 12840, + "name": "Teiul", + "county": "Valcea" + }, + { + "id": 12841, + "name": "Babeni", + "county": "Valcea" + }, + { + "id": 12842, + "name": "Bonciu", + "county": "Valcea" + }, + { + "id": 12843, + "name": "Capu Dealului", + "county": "Valcea" + }, + { + "id": 12844, + "name": "Paduretu", + "county": "Valcea" + }, + { + "id": 12845, + "name": "Romani", + "county": "Valcea" + }, + { + "id": 12846, + "name": "Tatarani", + "county": "Valcea" + }, + { + "id": 12847, + "name": "Valea Mare", + "county": "Valcea" + }, + { + "id": 12848, + "name": "Balcesti", + "county": "Valcea" + }, + { + "id": 12849, + "name": "Benesti", + "county": "Valcea" + }, + { + "id": 12850, + "name": "Chirculesti", + "county": "Valcea" + }, + { + "id": 12851, + "name": "Carlogani", + "county": "Valcea" + }, + { + "id": 12852, + "name": "Gorunesti", + "county": "Valcea" + }, + { + "id": 12853, + "name": "Irimesti", + "county": "Valcea" + }, + { + "id": 12854, + "name": "Otetelisu", + "county": "Valcea" + }, + { + "id": 12855, + "name": "Preotesti", + "county": "Valcea" + }, + { + "id": 12856, + "name": "Satu Poieni", + "county": "Valcea" + }, + { + "id": 12857, + "name": "Bodesti", + "county": "Valcea" + }, + { + "id": 12858, + "name": "Barbatesti", + "county": "Valcea" + }, + { + "id": 12859, + "name": "Barzesti", + "county": "Valcea" + }, + { + "id": 12860, + "name": "Negrulesti", + "county": "Valcea" + }, + { + "id": 12861, + "name": "Berbesti", + "county": "Valcea" + }, + { + "id": 12862, + "name": "Damteni", + "county": "Valcea" + }, + { + "id": 12863, + "name": "Dealu Alunis", + "county": "Valcea" + }, + { + "id": 12864, + "name": "Rosioara", + "county": "Valcea" + }, + { + "id": 12865, + "name": "Targu Gangulesti", + "county": "Valcea" + }, + { + "id": 12866, + "name": "Valea Mare", + "county": "Valcea" + }, + { + "id": 12867, + "name": "Stoenesti", + "county": "Valcea" + }, + { + "id": 12868, + "name": "Berislavesti", + "county": "Valcea" + }, + { + "id": 12869, + "name": "Bradisor", + "county": "Valcea" + }, + { + "id": 12870, + "name": "Dangesti", + "county": "Valcea" + }, + { + "id": 12871, + "name": "Radacinesti", + "county": "Valcea" + }, + { + "id": 12872, + "name": "Robaia", + "county": "Valcea" + }, + { + "id": 12873, + "name": "Scaueni", + "county": "Valcea" + }, + { + "id": 12874, + "name": "Boisoara", + "county": "Valcea" + }, + { + "id": 12875, + "name": "Bumbuesti", + "county": "Valcea" + }, + { + "id": 12876, + "name": "Gaujani", + "county": "Valcea" + }, + { + "id": 12877, + "name": "Budesti", + "county": "Valcea" + }, + { + "id": 12878, + "name": "Barza", + "county": "Valcea" + }, + { + "id": 12879, + "name": "Bercioiu", + "county": "Valcea" + }, + { + "id": 12880, + "name": "Barsesti", + "county": "Valcea" + }, + { + "id": 12881, + "name": "Linia", + "county": "Valcea" + }, + { + "id": 12882, + "name": "Piscu Pietrei", + "county": "Valcea" + }, + { + "id": 12883, + "name": "Racovita", + "county": "Valcea" + }, + { + "id": 12884, + "name": "Ruda", + "county": "Valcea" + }, + { + "id": 12885, + "name": "Olteni", + "county": "Valcea" + }, + { + "id": 12886, + "name": "Bogdanesti", + "county": "Valcea" + }, + { + "id": 12887, + "name": "Bujoreni", + "county": "Valcea" + }, + { + "id": 12888, + "name": "Gura Vaii", + "county": "Valcea" + }, + { + "id": 12889, + "name": "Lunca", + "county": "Valcea" + }, + { + "id": 12890, + "name": "Malu Alb", + "county": "Valcea" + }, + { + "id": 12891, + "name": "Malu Vartop", + "county": "Valcea" + }, + { + "id": 12892, + "name": "Bunesti", + "county": "Valcea" + }, + { + "id": 12893, + "name": "Coasta Mare", + "county": "Valcea" + }, + { + "id": 12894, + "name": "Firesti", + "county": "Valcea" + }, + { + "id": 12895, + "name": "Rapanesti", + "county": "Valcea" + }, + { + "id": 12896, + "name": "Teiusu", + "county": "Valcea" + }, + { + "id": 12897, + "name": "Titireci", + "county": "Valcea" + }, + { + "id": 12898, + "name": "Armasesti", + "county": "Valcea" + }, + { + "id": 12899, + "name": "Cernisoara", + "county": "Valcea" + }, + { + "id": 12900, + "name": "Grosi", + "county": "Valcea" + }, + { + "id": 12901, + "name": "Madulari", + "county": "Valcea" + }, + { + "id": 12902, + "name": "Modoia", + "county": "Valcea" + }, + { + "id": 12903, + "name": "Obarsia", + "county": "Valcea" + }, + { + "id": 12904, + "name": "Sarsanesti", + "county": "Valcea" + }, + { + "id": 12905, + "name": "Cainenii Mici", + "county": "Valcea" + }, + { + "id": 12906, + "name": "Cainenii Mari", + "county": "Valcea" + }, + { + "id": 12907, + "name": "Greblesti", + "county": "Valcea" + }, + { + "id": 12908, + "name": "Priloage", + "county": "Valcea" + }, + { + "id": 12909, + "name": "Rau Vadului", + "county": "Valcea" + }, + { + "id": 12910, + "name": "Robesti", + "county": "Valcea" + }, + { + "id": 12911, + "name": "Ulmetu", + "county": "Valcea" + }, + { + "id": 12912, + "name": "Balteni", + "county": "Valcea" + }, + { + "id": 12913, + "name": "Bondoci", + "county": "Valcea" + }, + { + "id": 12914, + "name": "Copaceni", + "county": "Valcea" + }, + { + "id": 12915, + "name": "Hotarasa", + "county": "Valcea" + }, + { + "id": 12916, + "name": "Vetelu", + "county": "Valcea" + }, + { + "id": 12917, + "name": "Costesti", + "county": "Valcea" + }, + { + "id": 12918, + "name": "Bistrita", + "county": "Valcea" + }, + { + "id": 12919, + "name": "Pietreni", + "county": "Valcea" + }, + { + "id": 12920, + "name": "Varatici", + "county": "Valcea" + }, + { + "id": 12921, + "name": "Creteni", + "county": "Valcea" + }, + { + "id": 12922, + "name": "Izvoru", + "county": "Valcea" + }, + { + "id": 12923, + "name": "Mrenesti", + "county": "Valcea" + }, + { + "id": 12924, + "name": "Streminoasa", + "county": "Valcea" + }, + { + "id": 12925, + "name": "Daesti", + "county": "Valcea" + }, + { + "id": 12926, + "name": "Babuesti", + "county": "Valcea" + }, + { + "id": 12927, + "name": "Fedelesoiu", + "county": "Valcea" + }, + { + "id": 12928, + "name": "Sanbotin", + "county": "Valcea" + }, + { + "id": 12929, + "name": "Dealu Launele", + "county": "Valcea" + }, + { + "id": 12930, + "name": "Badeni", + "county": "Valcea" + }, + { + "id": 12931, + "name": "Ceretu", + "county": "Valcea" + }, + { + "id": 12932, + "name": "Ciresul", + "county": "Valcea" + }, + { + "id": 12933, + "name": "Dealu Scheiului", + "county": "Valcea" + }, + { + "id": 12934, + "name": "Dobresti", + "county": "Valcea" + }, + { + "id": 12935, + "name": "Dragulesti", + "county": "Valcea" + }, + { + "id": 12936, + "name": "Glodu", + "county": "Valcea" + }, + { + "id": 12937, + "name": "Gura Crucilor", + "county": "Valcea" + }, + { + "id": 12938, + "name": "Launele de Jos", + "county": "Valcea" + }, + { + "id": 12939, + "name": "Linia pe Vale", + "county": "Valcea" + }, + { + "id": 12940, + "name": "Udresti", + "county": "Valcea" + }, + { + "id": 12941, + "name": "Valea Scheiului", + "county": "Valcea" + }, + { + "id": 12942, + "name": "Dragoesti", + "county": "Valcea" + }, + { + "id": 12943, + "name": "Buciumeni", + "county": "Valcea" + }, + { + "id": 12944, + "name": "Geamana", + "county": "Valcea" + }, + { + "id": 12945, + "name": "Milesti", + "county": "Valcea" + }, + { + "id": 12946, + "name": "Babeni-Oltetu", + "county": "Valcea" + }, + { + "id": 12947, + "name": "Budesti", + "county": "Valcea" + }, + { + "id": 12948, + "name": "Bungetani", + "county": "Valcea" + }, + { + "id": 12949, + "name": "Colelia", + "county": "Valcea" + }, + { + "id": 12950, + "name": "Diculesti", + "county": "Valcea" + }, + { + "id": 12951, + "name": "Fauresti", + "county": "Valcea" + }, + { + "id": 12952, + "name": "Gainesti", + "county": "Valcea" + }, + { + "id": 12953, + "name": "Marcusu", + "county": "Valcea" + }, + { + "id": 12954, + "name": "Fartatesti", + "county": "Valcea" + }, + { + "id": 12955, + "name": "Afanata", + "county": "Valcea" + }, + { + "id": 12956, + "name": "Becsani", + "county": "Valcea" + }, + { + "id": 12957, + "name": "Catetu", + "county": "Valcea" + }, + { + "id": 12958, + "name": "Cuci", + "county": "Valcea" + }, + { + "id": 12959, + "name": "Dancai", + "county": "Valcea" + }, + { + "id": 12960, + "name": "Dejoi", + "county": "Valcea" + }, + { + "id": 12961, + "name": "Dozesti", + "county": "Valcea" + }, + { + "id": 12962, + "name": "Giulesti", + "county": "Valcea" + }, + { + "id": 12963, + "name": "Giulestii de Sus", + "county": "Valcea" + }, + { + "id": 12964, + "name": "Garnicet", + "county": "Valcea" + }, + { + "id": 12965, + "name": "Maricesti", + "county": "Valcea" + }, + { + "id": 12966, + "name": "Nisipi", + "county": "Valcea" + }, + { + "id": 12967, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 12968, + "name": "Rusanesti", + "county": "Valcea" + }, + { + "id": 12969, + "name": "Seciu", + "county": "Valcea" + }, + { + "id": 12970, + "name": "Stanculesti", + "county": "Valcea" + }, + { + "id": 12971, + "name": "Sotani", + "county": "Valcea" + }, + { + "id": 12972, + "name": "Tanislavi", + "county": "Valcea" + }, + { + "id": 12973, + "name": "Valea Ursului", + "county": "Valcea" + }, + { + "id": 12974, + "name": "Francesti", + "county": "Valcea" + }, + { + "id": 12975, + "name": "Balutoaia", + "county": "Valcea" + }, + { + "id": 12976, + "name": "Cosani", + "county": "Valcea" + }, + { + "id": 12977, + "name": "Dezrobiti", + "county": "Valcea" + }, + { + "id": 12978, + "name": "Genuneni", + "county": "Valcea" + }, + { + "id": 12979, + "name": "Manailesti", + "county": "Valcea" + }, + { + "id": 12980, + "name": "Mosteni", + "county": "Valcea" + }, + { + "id": 12981, + "name": "Surpatele", + "county": "Valcea" + }, + { + "id": 12982, + "name": "Viisoara", + "county": "Valcea" + }, + { + "id": 12983, + "name": "Galicea", + "county": "Valcea" + }, + { + "id": 12984, + "name": "Bratia din Deal", + "county": "Valcea" + }, + { + "id": 12985, + "name": "Bratia din Vale", + "county": "Valcea" + }, + { + "id": 12986, + "name": "Cocoru", + "county": "Valcea" + }, + { + "id": 12987, + "name": "Cremenari", + "county": "Valcea" + }, + { + "id": 12988, + "name": "Dealu Mare", + "county": "Valcea" + }, + { + "id": 12989, + "name": "Ostroveni", + "county": "Valcea" + }, + { + "id": 12990, + "name": "Teiu", + "county": "Valcea" + }, + { + "id": 12991, + "name": "Valea Raului", + "county": "Valcea" + }, + { + "id": 12992, + "name": "Ghioroiu", + "county": "Valcea" + }, + { + "id": 12993, + "name": "Cazanesti", + "county": "Valcea" + }, + { + "id": 12994, + "name": "Herasti", + "county": "Valcea" + }, + { + "id": 12995, + "name": "Mierea", + "county": "Valcea" + }, + { + "id": 12996, + "name": "Poienari", + "county": "Valcea" + }, + { + "id": 12997, + "name": "Stirbesti", + "county": "Valcea" + }, + { + "id": 12998, + "name": "Glavile", + "county": "Valcea" + }, + { + "id": 12999, + "name": "Aninoasa", + "county": "Valcea" + }, + { + "id": 13000, + "name": "Jarostea", + "county": "Valcea" + }, + { + "id": 13001, + "name": "Olteanca", + "county": "Valcea" + }, + { + "id": 13002, + "name": "Voiculeasa", + "county": "Valcea" + }, + { + "id": 13003, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13004, + "name": "Aldesti", + "county": "Valcea" + }, + { + "id": 13005, + "name": "Blidari", + "county": "Valcea" + }, + { + "id": 13006, + "name": "Coasta", + "county": "Valcea" + }, + { + "id": 13007, + "name": "Draganesti", + "county": "Valcea" + }, + { + "id": 13008, + "name": "Gibesti", + "county": "Valcea" + }, + { + "id": 13009, + "name": "Giurgiuveni", + "county": "Valcea" + }, + { + "id": 13010, + "name": "Opatesti", + "county": "Valcea" + }, + { + "id": 13011, + "name": "Poenita", + "county": "Valcea" + }, + { + "id": 13012, + "name": "Tulei-Campeni", + "county": "Valcea" + }, + { + "id": 13013, + "name": "Vatasesti", + "county": "Valcea" + }, + { + "id": 13014, + "name": "Gradistea", + "county": "Valcea" + }, + { + "id": 13015, + "name": "Diaconesti", + "county": "Valcea" + }, + { + "id": 13016, + "name": "Dobricea", + "county": "Valcea" + }, + { + "id": 13017, + "name": "Linia", + "county": "Valcea" + }, + { + "id": 13018, + "name": "Obislavu", + "county": "Valcea" + }, + { + "id": 13019, + "name": "Strachinesti", + "county": "Valcea" + }, + { + "id": 13020, + "name": "Turburea", + "county": "Valcea" + }, + { + "id": 13021, + "name": "Tuturu", + "county": "Valcea" + }, + { + "id": 13022, + "name": "Valea Gradistei", + "county": "Valcea" + }, + { + "id": 13023, + "name": "Gusoeni", + "county": "Valcea" + }, + { + "id": 13024, + "name": "Burdalesti", + "county": "Valcea" + }, + { + "id": 13025, + "name": "Dealu Mare", + "county": "Valcea" + }, + { + "id": 13026, + "name": "Gusoianca", + "county": "Valcea" + }, + { + "id": 13027, + "name": "Magureni", + "county": "Valcea" + }, + { + "id": 13028, + "name": "Sparleni", + "county": "Valcea" + }, + { + "id": 13029, + "name": "Ionesti", + "county": "Valcea" + }, + { + "id": 13030, + "name": "Bucsani", + "county": "Valcea" + }, + { + "id": 13031, + "name": "Dealu Mare", + "county": "Valcea" + }, + { + "id": 13032, + "name": "Delureni", + "county": "Valcea" + }, + { + "id": 13033, + "name": "Fiscalia", + "county": "Valcea" + }, + { + "id": 13034, + "name": "Fotesti", + "county": "Valcea" + }, + { + "id": 13035, + "name": "Guguianca", + "county": "Valcea" + }, + { + "id": 13036, + "name": "Marcea", + "county": "Valcea" + }, + { + "id": 13037, + "name": "Prodanesti", + "county": "Valcea" + }, + { + "id": 13038, + "name": "Lalosu", + "county": "Valcea" + }, + { + "id": 13039, + "name": "Berbesti", + "county": "Valcea" + }, + { + "id": 13040, + "name": "Ghindari", + "county": "Valcea" + }, + { + "id": 13041, + "name": "Mologesti", + "county": "Valcea" + }, + { + "id": 13042, + "name": "Oltetani", + "county": "Valcea" + }, + { + "id": 13043, + "name": "Portaresti", + "county": "Valcea" + }, + { + "id": 13044, + "name": "Ladesti", + "county": "Valcea" + }, + { + "id": 13045, + "name": "Cermegesti", + "county": "Valcea" + }, + { + "id": 13046, + "name": "Chiricesti", + "county": "Valcea" + }, + { + "id": 13047, + "name": "Ciumagi", + "county": "Valcea" + }, + { + "id": 13048, + "name": "Dealu Corni", + "county": "Valcea" + }, + { + "id": 13049, + "name": "Gageni", + "county": "Valcea" + }, + { + "id": 13050, + "name": "Maldaresti", + "county": "Valcea" + }, + { + "id": 13051, + "name": "Olteanca", + "county": "Valcea" + }, + { + "id": 13052, + "name": "Pasculesti", + "county": "Valcea" + }, + { + "id": 13053, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13054, + "name": "Sarulesti", + "county": "Valcea" + }, + { + "id": 13055, + "name": "Beresti", + "county": "Valcea" + }, + { + "id": 13056, + "name": "Brosteni", + "county": "Valcea" + }, + { + "id": 13057, + "name": "Mijati", + "county": "Valcea" + }, + { + "id": 13058, + "name": "Scorusu", + "county": "Valcea" + }, + { + "id": 13059, + "name": "Serbanesti", + "county": "Valcea" + }, + { + "id": 13060, + "name": "Zarnesti", + "county": "Valcea" + }, + { + "id": 13061, + "name": "Livezi", + "county": "Valcea" + }, + { + "id": 13062, + "name": "Parausani", + "county": "Valcea" + }, + { + "id": 13063, + "name": "Paraienii de Jos", + "county": "Valcea" + }, + { + "id": 13064, + "name": "Paraienii de Mijloc", + "county": "Valcea" + }, + { + "id": 13065, + "name": "Paraienii de Sus", + "county": "Valcea" + }, + { + "id": 13066, + "name": "Plesoiu", + "county": "Valcea" + }, + { + "id": 13067, + "name": "Tina", + "county": "Valcea" + }, + { + "id": 13068, + "name": "Lungesti", + "county": "Valcea" + }, + { + "id": 13069, + "name": "Carcadiesti", + "county": "Valcea" + }, + { + "id": 13070, + "name": "Dumbrava", + "county": "Valcea" + }, + { + "id": 13071, + "name": "Fumureni", + "county": "Valcea" + }, + { + "id": 13072, + "name": "Gantulei", + "county": "Valcea" + }, + { + "id": 13073, + "name": "Stanesti-Lunca", + "county": "Valcea" + }, + { + "id": 13074, + "name": "Malaia", + "county": "Valcea" + }, + { + "id": 13075, + "name": "Ciungetu", + "county": "Valcea" + }, + { + "id": 13076, + "name": "Salistea", + "county": "Valcea" + }, + { + "id": 13077, + "name": "Mateesti", + "county": "Valcea" + }, + { + "id": 13078, + "name": "Greci", + "county": "Valcea" + }, + { + "id": 13079, + "name": "Turcesti", + "county": "Valcea" + }, + { + "id": 13080, + "name": "Oveselu", + "county": "Valcea" + }, + { + "id": 13081, + "name": "Bocsa", + "county": "Valcea" + }, + { + "id": 13082, + "name": "Botorani", + "county": "Valcea" + }, + { + "id": 13083, + "name": "Ciocanari", + "county": "Valcea" + }, + { + "id": 13084, + "name": "Maciuceni", + "county": "Valcea" + }, + { + "id": 13085, + "name": "Maldaresti", + "county": "Valcea" + }, + { + "id": 13086, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13087, + "name": "Stefanesti", + "county": "Valcea" + }, + { + "id": 13088, + "name": "Zavoieni", + "county": "Valcea" + }, + { + "id": 13089, + "name": "Madulari", + "county": "Valcea" + }, + { + "id": 13090, + "name": "Balsoara", + "county": "Valcea" + }, + { + "id": 13091, + "name": "Bantesti", + "county": "Valcea" + }, + { + "id": 13092, + "name": "Dimulesti", + "county": "Valcea" + }, + { + "id": 13093, + "name": "Iacovile", + "county": "Valcea" + }, + { + "id": 13094, + "name": "Mamu", + "county": "Valcea" + }, + { + "id": 13095, + "name": "Maldaresti", + "county": "Valcea" + }, + { + "id": 13096, + "name": "Maldarestii de Jos", + "county": "Valcea" + }, + { + "id": 13097, + "name": "Rosoveni", + "county": "Valcea" + }, + { + "id": 13098, + "name": "Telechesti", + "county": "Valcea" + }, + { + "id": 13099, + "name": "Buleta", + "county": "Valcea" + }, + { + "id": 13100, + "name": "Arsanca", + "county": "Valcea" + }, + { + "id": 13101, + "name": "Barsesti", + "county": "Valcea" + }, + { + "id": 13102, + "name": "Govora", + "county": "Valcea" + }, + { + "id": 13103, + "name": "Gurisoara", + "county": "Valcea" + }, + { + "id": 13104, + "name": "Magura", + "county": "Valcea" + }, + { + "id": 13105, + "name": "Mihaesti", + "county": "Valcea" + }, + { + "id": 13106, + "name": "Munteni", + "county": "Valcea" + }, + { + "id": 13107, + "name": "Negreni", + "county": "Valcea" + }, + { + "id": 13108, + "name": "Rugetu", + "county": "Valcea" + }, + { + "id": 13109, + "name": "Scarisoara", + "county": "Valcea" + }, + { + "id": 13110, + "name": "Stuparei", + "county": "Valcea" + }, + { + "id": 13111, + "name": "Vulpuesti", + "county": "Valcea" + }, + { + "id": 13112, + "name": "Milcoiu", + "county": "Valcea" + }, + { + "id": 13113, + "name": "Cazanesti", + "county": "Valcea" + }, + { + "id": 13114, + "name": "Ciutesti", + "county": "Valcea" + }, + { + "id": 13115, + "name": "Izbasesti", + "county": "Valcea" + }, + { + "id": 13116, + "name": "Suricaru", + "county": "Valcea" + }, + { + "id": 13117, + "name": "Tepsenari", + "county": "Valcea" + }, + { + "id": 13118, + "name": "Muereasca", + "county": "Valcea" + }, + { + "id": 13119, + "name": "Andreiesti", + "county": "Valcea" + }, + { + "id": 13120, + "name": "Francesti-Coasta", + "county": "Valcea" + }, + { + "id": 13121, + "name": "Gavanesti", + "county": "Valcea" + }, + { + "id": 13122, + "name": "Hotarele", + "county": "Valcea" + }, + { + "id": 13123, + "name": "Muereasca de Sus", + "county": "Valcea" + }, + { + "id": 13124, + "name": "Pripoara", + "county": "Valcea" + }, + { + "id": 13125, + "name": "Suta", + "county": "Valcea" + }, + { + "id": 13126, + "name": "Rotarasti", + "county": "Valcea" + }, + { + "id": 13127, + "name": "Banesti", + "county": "Valcea" + }, + { + "id": 13128, + "name": "Corbii din Vale", + "county": "Valcea" + }, + { + "id": 13129, + "name": "Dosu Raului", + "county": "Valcea" + }, + { + "id": 13130, + "name": "Ginerica", + "county": "Valcea" + }, + { + "id": 13131, + "name": "Galtofani", + "county": "Valcea" + }, + { + "id": 13132, + "name": "Linia Hanului", + "county": "Valcea" + }, + { + "id": 13133, + "name": "Mazararu", + "county": "Valcea" + }, + { + "id": 13134, + "name": "Mangureni", + "county": "Valcea" + }, + { + "id": 13135, + "name": "Plesoiu", + "county": "Valcea" + }, + { + "id": 13136, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13137, + "name": "Predesti", + "county": "Valcea" + }, + { + "id": 13138, + "name": "Schitu", + "county": "Valcea" + }, + { + "id": 13139, + "name": "Serbaneasa", + "county": "Valcea" + }, + { + "id": 13140, + "name": "Tufanii", + "county": "Valcea" + }, + { + "id": 13141, + "name": "Valea Balceasca", + "county": "Valcea" + }, + { + "id": 13142, + "name": "Valea Viei", + "county": "Valcea" + }, + { + "id": 13143, + "name": "Olanu", + "county": "Valcea" + }, + { + "id": 13144, + "name": "Casa Veche", + "county": "Valcea" + }, + { + "id": 13145, + "name": "Cioboti", + "county": "Valcea" + }, + { + "id": 13146, + "name": "Dragioiu", + "county": "Valcea" + }, + { + "id": 13147, + "name": "Nicolesti", + "county": "Valcea" + }, + { + "id": 13148, + "name": "Stoicanesti", + "county": "Valcea" + }, + { + "id": 13149, + "name": "Orlesti", + "county": "Valcea" + }, + { + "id": 13150, + "name": "Auresti", + "county": "Valcea" + }, + { + "id": 13151, + "name": "Procopoaia", + "county": "Valcea" + }, + { + "id": 13152, + "name": "Scaiosi", + "county": "Valcea" + }, + { + "id": 13153, + "name": "Silea", + "county": "Valcea" + }, + { + "id": 13154, + "name": "Otesani", + "county": "Valcea" + }, + { + "id": 13155, + "name": "Bogdanesti", + "county": "Valcea" + }, + { + "id": 13156, + "name": "Carstanesti", + "county": "Valcea" + }, + { + "id": 13157, + "name": "Cucesti", + "county": "Valcea" + }, + { + "id": 13158, + "name": "Sub Deal", + "county": "Valcea" + }, + { + "id": 13159, + "name": "Pausesti", + "county": "Valcea" + }, + { + "id": 13160, + "name": "Barcanele", + "county": "Valcea" + }, + { + "id": 13161, + "name": "Buzdugan", + "county": "Valcea" + }, + { + "id": 13162, + "name": "Cernelele", + "county": "Valcea" + }, + { + "id": 13163, + "name": "Pausesti-Otasau", + "county": "Valcea" + }, + { + "id": 13164, + "name": "Serbanesti", + "county": "Valcea" + }, + { + "id": 13165, + "name": "Solicesti", + "county": "Valcea" + }, + { + "id": 13166, + "name": "Valeni", + "county": "Valcea" + }, + { + "id": 13167, + "name": "Pausesti-Maglasi", + "county": "Valcea" + }, + { + "id": 13168, + "name": "Coasta", + "county": "Valcea" + }, + { + "id": 13169, + "name": "Pietrari", + "county": "Valcea" + }, + { + "id": 13170, + "name": "Ulmetel", + "county": "Valcea" + }, + { + "id": 13171, + "name": "Valea Cheii", + "county": "Valcea" + }, + { + "id": 13172, + "name": "Vladuceni", + "county": "Valcea" + }, + { + "id": 13173, + "name": "Perisani", + "county": "Valcea" + }, + { + "id": 13174, + "name": "Baiasu", + "county": "Valcea" + }, + { + "id": 13175, + "name": "Bratovesti", + "county": "Valcea" + }, + { + "id": 13176, + "name": "Cucoiu", + "county": "Valcea" + }, + { + "id": 13177, + "name": "Mlaceni", + "county": "Valcea" + }, + { + "id": 13178, + "name": "Podeni", + "county": "Valcea" + }, + { + "id": 13179, + "name": "Poiana", + "county": "Valcea" + }, + { + "id": 13180, + "name": "Pripoare", + "county": "Valcea" + }, + { + "id": 13181, + "name": "Spinu", + "county": "Valcea" + }, + { + "id": 13182, + "name": "Surdoiu", + "county": "Valcea" + }, + { + "id": 13183, + "name": "Titesti", + "county": "Valcea" + }, + { + "id": 13184, + "name": "Pesceana", + "county": "Valcea" + }, + { + "id": 13185, + "name": "Cermegesti", + "county": "Valcea" + }, + { + "id": 13186, + "name": "Lupoaia", + "county": "Valcea" + }, + { + "id": 13187, + "name": "Negraia", + "county": "Valcea" + }, + { + "id": 13188, + "name": "Roesti", + "county": "Valcea" + }, + { + "id": 13189, + "name": "Ursoaia", + "county": "Valcea" + }, + { + "id": 13190, + "name": "Pietrari", + "county": "Valcea" + }, + { + "id": 13191, + "name": "Pietrarii de Sus", + "county": "Valcea" + }, + { + "id": 13192, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13193, + "name": "Curtea", + "county": "Valcea" + }, + { + "id": 13194, + "name": "Daesti", + "county": "Valcea" + }, + { + "id": 13195, + "name": "Firijba", + "county": "Valcea" + }, + { + "id": 13196, + "name": "Meieni", + "county": "Valcea" + }, + { + "id": 13197, + "name": "Ursi", + "county": "Valcea" + }, + { + "id": 13198, + "name": "Valea Caselor", + "county": "Valcea" + }, + { + "id": 13199, + "name": "Prundeni", + "county": "Valcea" + }, + { + "id": 13200, + "name": "Barbuceni", + "county": "Valcea" + }, + { + "id": 13201, + "name": "Calina", + "county": "Valcea" + }, + { + "id": 13202, + "name": "Zavideni", + "county": "Valcea" + }, + { + "id": 13203, + "name": "Racovita", + "county": "Valcea" + }, + { + "id": 13204, + "name": "Balota", + "county": "Valcea" + }, + { + "id": 13205, + "name": "Blanoiu", + "county": "Valcea" + }, + { + "id": 13206, + "name": "Bradu-Clocotici", + "county": "Valcea" + }, + { + "id": 13207, + "name": "Copaceni", + "county": "Valcea" + }, + { + "id": 13208, + "name": "Gruiu Lupului", + "county": "Valcea" + }, + { + "id": 13209, + "name": "Tutulesti", + "county": "Valcea" + }, + { + "id": 13210, + "name": "Roesti", + "county": "Valcea" + }, + { + "id": 13211, + "name": "Baiasa", + "county": "Valcea" + }, + { + "id": 13212, + "name": "Bajenari", + "county": "Valcea" + }, + { + "id": 13213, + "name": "Barbarigeni", + "county": "Valcea" + }, + { + "id": 13214, + "name": "Ciocaltei", + "county": "Valcea" + }, + { + "id": 13215, + "name": "Cueni", + "county": "Valcea" + }, + { + "id": 13216, + "name": "Frasina", + "county": "Valcea" + }, + { + "id": 13217, + "name": "Piscu Scoartei", + "county": "Valcea" + }, + { + "id": 13218, + "name": "Rapa Caramizii", + "county": "Valcea" + }, + { + "id": 13219, + "name": "Saioci", + "county": "Valcea" + }, + { + "id": 13220, + "name": "Rosiile", + "county": "Valcea" + }, + { + "id": 13221, + "name": "Balaciu", + "county": "Valcea" + }, + { + "id": 13222, + "name": "Cherasti", + "county": "Valcea" + }, + { + "id": 13223, + "name": "Hotaroaia", + "county": "Valcea" + }, + { + "id": 13224, + "name": "Lupuiesti", + "county": "Valcea" + }, + { + "id": 13225, + "name": "Pasarei", + "county": "Valcea" + }, + { + "id": 13226, + "name": "Pertesti", + "county": "Valcea" + }, + { + "id": 13227, + "name": "Plesesti", + "county": "Valcea" + }, + { + "id": 13228, + "name": "Ratalesti", + "county": "Valcea" + }, + { + "id": 13229, + "name": "Romanesti", + "county": "Valcea" + }, + { + "id": 13230, + "name": "Zgubea", + "county": "Valcea" + }, + { + "id": 13231, + "name": "Runcu", + "county": "Valcea" + }, + { + "id": 13232, + "name": "Caligi", + "county": "Valcea" + }, + { + "id": 13233, + "name": "Gropeni", + "county": "Valcea" + }, + { + "id": 13234, + "name": "Snamana", + "county": "Valcea" + }, + { + "id": 13235, + "name": "Surpati", + "county": "Valcea" + }, + { + "id": 13236, + "name": "Valea Babei", + "county": "Valcea" + }, + { + "id": 13237, + "name": "Varateci", + "county": "Valcea" + }, + { + "id": 13238, + "name": "Salatrucel", + "county": "Valcea" + }, + { + "id": 13239, + "name": "Patesti", + "county": "Valcea" + }, + { + "id": 13240, + "name": "Seaca", + "county": "Valcea" + }, + { + "id": 13241, + "name": "Serbanesti", + "county": "Valcea" + }, + { + "id": 13242, + "name": "Scundu", + "county": "Valcea" + }, + { + "id": 13243, + "name": "Avramesti", + "county": "Valcea" + }, + { + "id": 13244, + "name": "Blejani", + "county": "Valcea" + }, + { + "id": 13245, + "name": "Crangu", + "county": "Valcea" + }, + { + "id": 13246, + "name": "Sinesti", + "county": "Valcea" + }, + { + "id": 13247, + "name": "Ciucheti", + "county": "Valcea" + }, + { + "id": 13248, + "name": "Dealu Bisericii", + "county": "Valcea" + }, + { + "id": 13249, + "name": "Mijlocu", + "county": "Valcea" + }, + { + "id": 13250, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13251, + "name": "Urzica", + "county": "Valcea" + }, + { + "id": 13252, + "name": "Slatioara", + "county": "Valcea" + }, + { + "id": 13253, + "name": "Coasta Cerbului", + "county": "Valcea" + }, + { + "id": 13254, + "name": "Gorunesti", + "county": "Valcea" + }, + { + "id": 13255, + "name": "Milostea", + "county": "Valcea" + }, + { + "id": 13256, + "name": "Mogesti", + "county": "Valcea" + }, + { + "id": 13257, + "name": "Rugetu", + "county": "Valcea" + }, + { + "id": 13258, + "name": "Stanesti", + "county": "Valcea" + }, + { + "id": 13259, + "name": "Barcanesti", + "county": "Valcea" + }, + { + "id": 13260, + "name": "Cioponesti", + "county": "Valcea" + }, + { + "id": 13261, + "name": "Cuculesti", + "county": "Valcea" + }, + { + "id": 13262, + "name": "Garnicetu", + "county": "Valcea" + }, + { + "id": 13263, + "name": "Linia Dealului", + "county": "Valcea" + }, + { + "id": 13264, + "name": "Suiesti", + "county": "Valcea" + }, + { + "id": 13265, + "name": "Valea Lunga", + "county": "Valcea" + }, + { + "id": 13266, + "name": "Varleni", + "county": "Valcea" + }, + { + "id": 13267, + "name": "Stoenesti", + "county": "Valcea" + }, + { + "id": 13268, + "name": "Barlogu", + "county": "Valcea" + }, + { + "id": 13269, + "name": "Budurasti", + "county": "Valcea" + }, + { + "id": 13270, + "name": "Deleni", + "county": "Valcea" + }, + { + "id": 13271, + "name": "Dobriceni", + "county": "Valcea" + }, + { + "id": 13272, + "name": "Gruiu", + "county": "Valcea" + }, + { + "id": 13273, + "name": "Gruieri", + "county": "Valcea" + }, + { + "id": 13274, + "name": "Mogosesti", + "county": "Valcea" + }, + { + "id": 13275, + "name": "Neghinesti", + "county": "Valcea" + }, + { + "id": 13276, + "name": "Piscu Mare", + "county": "Valcea" + }, + { + "id": 13277, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13278, + "name": "Suseni", + "county": "Valcea" + }, + { + "id": 13279, + "name": "Zmeuratu", + "county": "Valcea" + }, + { + "id": 13280, + "name": "Stoilesti", + "county": "Valcea" + }, + { + "id": 13281, + "name": "Balomireasa", + "county": "Valcea" + }, + { + "id": 13282, + "name": "Barsoiu", + "county": "Valcea" + }, + { + "id": 13283, + "name": "Bulagei", + "county": "Valcea" + }, + { + "id": 13284, + "name": "Delureni", + "county": "Valcea" + }, + { + "id": 13285, + "name": "Geamana", + "county": "Valcea" + }, + { + "id": 13286, + "name": "Ghiobesti", + "county": "Valcea" + }, + { + "id": 13287, + "name": "Giuroiu", + "county": "Valcea" + }, + { + "id": 13288, + "name": "Izvoru Rece", + "county": "Valcea" + }, + { + "id": 13289, + "name": "Malu", + "county": "Valcea" + }, + { + "id": 13290, + "name": "Netesti", + "county": "Valcea" + }, + { + "id": 13291, + "name": "Obogeni", + "county": "Valcea" + }, + { + "id": 13292, + "name": "Stanesti", + "county": "Valcea" + }, + { + "id": 13293, + "name": "Ursi", + "county": "Valcea" + }, + { + "id": 13294, + "name": "Vladulesti", + "county": "Valcea" + }, + { + "id": 13295, + "name": "Stroesti", + "county": "Valcea" + }, + { + "id": 13296, + "name": "Ciresu", + "county": "Valcea" + }, + { + "id": 13297, + "name": "Dianu", + "county": "Valcea" + }, + { + "id": 13298, + "name": "Obrocesti", + "county": "Valcea" + }, + { + "id": 13299, + "name": "Pojogi-Cerna", + "county": "Valcea" + }, + { + "id": 13300, + "name": "Sutesti", + "county": "Valcea" + }, + { + "id": 13301, + "name": "Borosesti", + "county": "Valcea" + }, + { + "id": 13302, + "name": "Cetateaua", + "county": "Valcea" + }, + { + "id": 13303, + "name": "Izvorasu", + "county": "Valcea" + }, + { + "id": 13304, + "name": "Mazili", + "county": "Valcea" + }, + { + "id": 13305, + "name": "Mitrofani", + "county": "Valcea" + }, + { + "id": 13306, + "name": "Racu", + "county": "Valcea" + }, + { + "id": 13307, + "name": "Verdea", + "county": "Valcea" + }, + { + "id": 13308, + "name": "Sirineasa", + "county": "Valcea" + }, + { + "id": 13309, + "name": "Aricioaia", + "county": "Valcea" + }, + { + "id": 13310, + "name": "Ciorasti", + "county": "Valcea" + }, + { + "id": 13311, + "name": "Slavitesti", + "county": "Valcea" + }, + { + "id": 13312, + "name": "Valea Alunisului", + "county": "Valcea" + }, + { + "id": 13313, + "name": "Stefanesti", + "county": "Valcea" + }, + { + "id": 13314, + "name": "Condoiesti", + "county": "Valcea" + }, + { + "id": 13315, + "name": "Dobrusa", + "county": "Valcea" + }, + { + "id": 13316, + "name": "Serbanesti", + "county": "Valcea" + }, + { + "id": 13317, + "name": "Susani", + "county": "Valcea" + }, + { + "id": 13318, + "name": "Ramesti", + "county": "Valcea" + }, + { + "id": 13319, + "name": "Sarbi", + "county": "Valcea" + }, + { + "id": 13320, + "name": "Stoiculesti", + "county": "Valcea" + }, + { + "id": 13321, + "name": "Usurei", + "county": "Valcea" + }, + { + "id": 13322, + "name": "Tetoiu", + "county": "Valcea" + }, + { + "id": 13323, + "name": "Baroiu", + "county": "Valcea" + }, + { + "id": 13324, + "name": "Budele", + "county": "Valcea" + }, + { + "id": 13325, + "name": "Maneasa", + "county": "Valcea" + }, + { + "id": 13326, + "name": "Nenciulesti", + "county": "Valcea" + }, + { + "id": 13327, + "name": "Popesti", + "county": "Valcea" + }, + { + "id": 13328, + "name": "Tepesti", + "county": "Valcea" + }, + { + "id": 13329, + "name": "Tomsani", + "county": "Valcea" + }, + { + "id": 13330, + "name": "Baltateni", + "county": "Valcea" + }, + { + "id": 13331, + "name": "Bogdanesti", + "county": "Valcea" + }, + { + "id": 13332, + "name": "Chiceni", + "county": "Valcea" + }, + { + "id": 13333, + "name": "Dumbravesti", + "county": "Valcea" + }, + { + "id": 13334, + "name": "Folestii de Jos", + "county": "Valcea" + }, + { + "id": 13335, + "name": "Folestii de Sus", + "county": "Valcea" + }, + { + "id": 13336, + "name": "Miresti", + "county": "Valcea" + }, + { + "id": 13337, + "name": "Vaideeni", + "county": "Valcea" + }, + { + "id": 13338, + "name": "Cerna", + "county": "Valcea" + }, + { + "id": 13339, + "name": "Cornet", + "county": "Valcea" + }, + { + "id": 13340, + "name": "Izvoru Rece", + "county": "Valcea" + }, + { + "id": 13341, + "name": "Marita", + "county": "Valcea" + }, + { + "id": 13342, + "name": "Valea Mare", + "county": "Valcea" + }, + { + "id": 13343, + "name": "Batasani", + "county": "Valcea" + }, + { + "id": 13344, + "name": "Delureni", + "county": "Valcea" + }, + { + "id": 13345, + "name": "Draganu", + "county": "Valcea" + }, + { + "id": 13346, + "name": "Margineni", + "county": "Valcea" + }, + { + "id": 13347, + "name": "Pietroasa", + "county": "Valcea" + }, + { + "id": 13348, + "name": "Vladesti", + "county": "Valcea" + }, + { + "id": 13349, + "name": "Fundatura", + "county": "Valcea" + }, + { + "id": 13350, + "name": "Pleasa", + "county": "Valcea" + }, + { + "id": 13351, + "name": "Priporu", + "county": "Valcea" + }, + { + "id": 13352, + "name": "Trundin", + "county": "Valcea" + }, + { + "id": 13353, + "name": "Voicesti", + "county": "Valcea" + }, + { + "id": 13354, + "name": "Tighina", + "county": "Valcea" + }, + { + "id": 13355, + "name": "Voicestii din Vale", + "county": "Valcea" + }, + { + "id": 13356, + "name": "Voineasa", + "county": "Valcea" + }, + { + "id": 13357, + "name": "Valea Macesului", + "county": "Valcea" + }, + { + "id": 13358, + "name": "Voinesita", + "county": "Valcea" + }, + { + "id": 13359, + "name": "Zatreni", + "county": "Valcea" + }, + { + "id": 13360, + "name": "Butanu", + "county": "Valcea" + }, + { + "id": 13361, + "name": "Ciortesti", + "county": "Valcea" + }, + { + "id": 13362, + "name": "Contea", + "county": "Valcea" + }, + { + "id": 13363, + "name": "Dealu Glameia", + "county": "Valcea" + }, + { + "id": 13364, + "name": "Dealu Valeni", + "county": "Valcea" + }, + { + "id": 13365, + "name": "Fauresti", + "county": "Valcea" + }, + { + "id": 13366, + "name": "Ganesti", + "county": "Valcea" + }, + { + "id": 13367, + "name": "Lacusteni", + "county": "Valcea" + }, + { + "id": 13368, + "name": "Lacustenii de Jos", + "county": "Valcea" + }, + { + "id": 13369, + "name": "Lacustenii de Sus", + "county": "Valcea" + }, + { + "id": 13370, + "name": "Manicea", + "county": "Valcea" + }, + { + "id": 13371, + "name": "Mecea", + "county": "Valcea" + }, + { + "id": 13372, + "name": "Oltetu", + "county": "Valcea" + }, + { + "id": 13373, + "name": "Sascioara", + "county": "Valcea" + }, + { + "id": 13374, + "name": "Stanomiru", + "county": "Valcea" + }, + { + "id": 13375, + "name": "Valea Valeni", + "county": "Valcea" + }, + { + "id": 13376, + "name": "Valeni", + "county": "Valcea" + }, + { + "id": 13377, + "name": "Zatrenii de Sus", + "county": "Valcea" + }, + { + "id": 13378, + "name": "Focsani", + "county": "Vrancea" + }, + { + "id": 13379, + "name": "Mandresti-Moldova", + "county": "Vrancea" + }, + { + "id": 13380, + "name": "Mandresti-Munteni", + "county": "Vrancea" + }, + { + "id": 13381, + "name": "Campineanca", + "county": "Vrancea" + }, + { + "id": 13382, + "name": "Pietroasa", + "county": "Vrancea" + }, + { + "id": 13383, + "name": "Valcele", + "county": "Vrancea" + }, + { + "id": 13384, + "name": "Golesti", + "county": "Vrancea" + }, + { + "id": 13385, + "name": "Ceardac", + "county": "Vrancea" + }, + { + "id": 13386, + "name": "Adjud", + "county": "Vrancea" + }, + { + "id": 13387, + "name": "Burcioaia", + "county": "Vrancea" + }, + { + "id": 13388, + "name": "Adjudu Vechi", + "county": "Vrancea" + }, + { + "id": 13389, + "name": "Siscani", + "county": "Vrancea" + }, + { + "id": 13390, + "name": "Marasesti", + "county": "Vrancea" + }, + { + "id": 13391, + "name": "Siretu", + "county": "Vrancea" + }, + { + "id": 13392, + "name": "Tisita", + "county": "Vrancea" + }, + { + "id": 13393, + "name": "Haret", + "county": "Vrancea" + }, + { + "id": 13394, + "name": "Calimanesti", + "county": "Vrancea" + }, + { + "id": 13395, + "name": "Modruzeni", + "county": "Vrancea" + }, + { + "id": 13396, + "name": "Padureni", + "county": "Vrancea" + }, + { + "id": 13397, + "name": "Odobesti", + "county": "Vrancea" + }, + { + "id": 13398, + "name": "Unirea", + "county": "Vrancea" + }, + { + "id": 13399, + "name": "Panciu", + "county": "Vrancea" + }, + { + "id": 13400, + "name": "Crucea de Jos", + "county": "Vrancea" + }, + { + "id": 13401, + "name": "Crucea de Sus", + "county": "Vrancea" + }, + { + "id": 13402, + "name": "Dumbrava", + "county": "Vrancea" + }, + { + "id": 13403, + "name": "Neicu", + "county": "Vrancea" + }, + { + "id": 13404, + "name": "Satu Nou", + "county": "Vrancea" + }, + { + "id": 13405, + "name": "Andreiasu de Jos", + "county": "Vrancea" + }, + { + "id": 13406, + "name": "Andreiasu de Sus", + "county": "Vrancea" + }, + { + "id": 13407, + "name": "Arsita", + "county": "Vrancea" + }, + { + "id": 13408, + "name": "Fetig", + "county": "Vrancea" + }, + { + "id": 13409, + "name": "Hotaru", + "county": "Vrancea" + }, + { + "id": 13410, + "name": "Rachitasu", + "county": "Vrancea" + }, + { + "id": 13411, + "name": "Titila", + "county": "Vrancea" + }, + { + "id": 13412, + "name": "Balesti", + "county": "Vrancea" + }, + { + "id": 13413, + "name": "Barsesti", + "county": "Vrancea" + }, + { + "id": 13414, + "name": "Negrilesti", + "county": "Vrancea" + }, + { + "id": 13415, + "name": "Topesti", + "county": "Vrancea" + }, + { + "id": 13416, + "name": "Boghesti", + "county": "Vrancea" + }, + { + "id": 13417, + "name": "Bichesti", + "county": "Vrancea" + }, + { + "id": 13418, + "name": "Boghestii de Sus", + "county": "Vrancea" + }, + { + "id": 13419, + "name": "Chitcani", + "county": "Vrancea" + }, + { + "id": 13420, + "name": "Iugani", + "county": "Vrancea" + }, + { + "id": 13421, + "name": "Placinteni", + "county": "Vrancea" + }, + { + "id": 13422, + "name": "Plesesti", + "county": "Vrancea" + }, + { + "id": 13423, + "name": "Prisecani", + "county": "Vrancea" + }, + { + "id": 13424, + "name": "Tabucesti", + "county": "Vrancea" + }, + { + "id": 13425, + "name": "Bolotesti", + "county": "Vrancea" + }, + { + "id": 13426, + "name": "Gagesti", + "county": "Vrancea" + }, + { + "id": 13427, + "name": "Ivancesti", + "county": "Vrancea" + }, + { + "id": 13428, + "name": "Pietroasa", + "county": "Vrancea" + }, + { + "id": 13429, + "name": "Putna", + "county": "Vrancea" + }, + { + "id": 13430, + "name": "Vitanestii de Sub Magura", + "county": "Vrancea" + }, + { + "id": 13431, + "name": "Bordesti", + "county": "Vrancea" + }, + { + "id": 13432, + "name": "Bordestii de Jos", + "county": "Vrancea" + }, + { + "id": 13433, + "name": "Brosteni", + "county": "Vrancea" + }, + { + "id": 13434, + "name": "Arva", + "county": "Vrancea" + }, + { + "id": 13435, + "name": "Pitulusa", + "county": "Vrancea" + }, + { + "id": 13436, + "name": "Chiojdeni", + "county": "Vrancea" + }, + { + "id": 13437, + "name": "Catauti", + "county": "Vrancea" + }, + { + "id": 13438, + "name": "Lojnita", + "county": "Vrancea" + }, + { + "id": 13439, + "name": "Luncile", + "county": "Vrancea" + }, + { + "id": 13440, + "name": "Maracini", + "county": "Vrancea" + }, + { + "id": 13441, + "name": "Podurile", + "county": "Vrancea" + }, + { + "id": 13442, + "name": "Seciu", + "county": "Vrancea" + }, + { + "id": 13443, + "name": "Tulburea", + "county": "Vrancea" + }, + { + "id": 13444, + "name": "Ciorasti", + "county": "Vrancea" + }, + { + "id": 13445, + "name": "Codresti", + "county": "Vrancea" + }, + { + "id": 13446, + "name": "Mihalceni", + "county": "Vrancea" + }, + { + "id": 13447, + "name": "Salcia Noua", + "county": "Vrancea" + }, + { + "id": 13448, + "name": "Salcia Veche", + "county": "Vrancea" + }, + { + "id": 13449, + "name": "Satu Nou", + "county": "Vrancea" + }, + { + "id": 13450, + "name": "Spatareasa", + "county": "Vrancea" + }, + { + "id": 13451, + "name": "Campuri", + "county": "Vrancea" + }, + { + "id": 13452, + "name": "Fetesti", + "county": "Vrancea" + }, + { + "id": 13453, + "name": "Gura Vaii", + "county": "Vrancea" + }, + { + "id": 13454, + "name": "Rotilestii Mari", + "county": "Vrancea" + }, + { + "id": 13455, + "name": "Rotilestii Mici", + "county": "Vrancea" + }, + { + "id": 13456, + "name": "Carligele", + "county": "Vrancea" + }, + { + "id": 13457, + "name": "Blidari", + "county": "Vrancea" + }, + { + "id": 13458, + "name": "Bontesti", + "county": "Vrancea" + }, + { + "id": 13459, + "name": "Dalhauti", + "county": "Vrancea" + }, + { + "id": 13460, + "name": "Serbanesti", + "county": "Vrancea" + }, + { + "id": 13461, + "name": "Buda", + "county": "Vrancea" + }, + { + "id": 13462, + "name": "Corbita", + "county": "Vrancea" + }, + { + "id": 13463, + "name": "Izvoarele", + "county": "Vrancea" + }, + { + "id": 13464, + "name": "Largaseni", + "county": "Vrancea" + }, + { + "id": 13465, + "name": "Ochesesti", + "county": "Vrancea" + }, + { + "id": 13466, + "name": "Radacinesti", + "county": "Vrancea" + }, + { + "id": 13467, + "name": "Tutu", + "county": "Vrancea" + }, + { + "id": 13468, + "name": "Valcelele", + "county": "Vrancea" + }, + { + "id": 13469, + "name": "Cotesti", + "county": "Vrancea" + }, + { + "id": 13470, + "name": "Budesti", + "county": "Vrancea" + }, + { + "id": 13471, + "name": "Golestii de Sus", + "county": "Vrancea" + }, + { + "id": 13472, + "name": "Valea Cotesti", + "county": "Vrancea" + }, + { + "id": 13473, + "name": "Dumbraveni", + "county": "Vrancea" + }, + { + "id": 13474, + "name": "Alexandru Vlahuta", + "county": "Vrancea" + }, + { + "id": 13475, + "name": "Candesti", + "county": "Vrancea" + }, + { + "id": 13476, + "name": "Dragosloveni", + "county": "Vrancea" + }, + { + "id": 13477, + "name": "Dumitresti", + "county": "Vrancea" + }, + { + "id": 13478, + "name": "Bicestii de Jos", + "county": "Vrancea" + }, + { + "id": 13479, + "name": "Bicestii de Sus", + "county": "Vrancea" + }, + { + "id": 13480, + "name": "Blidari", + "county": "Vrancea" + }, + { + "id": 13481, + "name": "Dumitrestii-Fata", + "county": "Vrancea" + }, + { + "id": 13482, + "name": "Dumitrestii de Sus", + "county": "Vrancea" + }, + { + "id": 13483, + "name": "Galoiesti", + "county": "Vrancea" + }, + { + "id": 13484, + "name": "Lastuni", + "county": "Vrancea" + }, + { + "id": 13485, + "name": "Lupoaia", + "county": "Vrancea" + }, + { + "id": 13486, + "name": "Motnau", + "county": "Vrancea" + }, + { + "id": 13487, + "name": "Poienita", + "county": "Vrancea" + }, + { + "id": 13488, + "name": "Roscari", + "county": "Vrancea" + }, + { + "id": 13489, + "name": "Siminoc", + "county": "Vrancea" + }, + { + "id": 13490, + "name": "Tinoasa", + "county": "Vrancea" + }, + { + "id": 13491, + "name": "Trestia", + "county": "Vrancea" + }, + { + "id": 13492, + "name": "Valea Mica", + "county": "Vrancea" + }, + { + "id": 13493, + "name": "Fitionesti", + "county": "Vrancea" + }, + { + "id": 13494, + "name": "Ciolanesti", + "county": "Vrancea" + }, + { + "id": 13495, + "name": "Ghimicesti", + "county": "Vrancea" + }, + { + "id": 13496, + "name": "Holbanesti", + "county": "Vrancea" + }, + { + "id": 13497, + "name": "Manastioara", + "county": "Vrancea" + }, + { + "id": 13498, + "name": "Garoafa", + "county": "Vrancea" + }, + { + "id": 13499, + "name": "Bizighesti", + "county": "Vrancea" + }, + { + "id": 13500, + "name": "Ciuslea", + "county": "Vrancea" + }, + { + "id": 13501, + "name": "Doaga", + "county": "Vrancea" + }, + { + "id": 13502, + "name": "Faurei", + "county": "Vrancea" + }, + { + "id": 13503, + "name": "Precistanu", + "county": "Vrancea" + }, + { + "id": 13504, + "name": "Rachitosu", + "county": "Vrancea" + }, + { + "id": 13505, + "name": "Strajescu", + "county": "Vrancea" + }, + { + "id": 13506, + "name": "Gugesti", + "county": "Vrancea" + }, + { + "id": 13507, + "name": "Oreavu", + "county": "Vrancea" + }, + { + "id": 13508, + "name": "Gura Calitei", + "county": "Vrancea" + }, + { + "id": 13509, + "name": "Balanesti", + "county": "Vrancea" + }, + { + "id": 13510, + "name": "Cocosari", + "county": "Vrancea" + }, + { + "id": 13511, + "name": "Dealul Lung", + "county": "Vrancea" + }, + { + "id": 13512, + "name": "Groapa Tufei", + "county": "Vrancea" + }, + { + "id": 13513, + "name": "Lacu lui Baban", + "county": "Vrancea" + }, + { + "id": 13514, + "name": "Plopu", + "county": "Vrancea" + }, + { + "id": 13515, + "name": "Poenile", + "county": "Vrancea" + }, + { + "id": 13516, + "name": "Rasca", + "county": "Vrancea" + }, + { + "id": 13517, + "name": "Sotarcari", + "county": "Vrancea" + }, + { + "id": 13518, + "name": "Homocea", + "county": "Vrancea" + }, + { + "id": 13519, + "name": "Argea", + "county": "Vrancea" + }, + { + "id": 13520, + "name": "Costisa", + "county": "Vrancea" + }, + { + "id": 13521, + "name": "Lespezi", + "county": "Vrancea" + }, + { + "id": 13522, + "name": "Ploscuteni", + "county": "Vrancea" + }, + { + "id": 13523, + "name": "Jaristea", + "county": "Vrancea" + }, + { + "id": 13524, + "name": "Padureni", + "county": "Vrancea" + }, + { + "id": 13525, + "name": "Scanteia", + "county": "Vrancea" + }, + { + "id": 13526, + "name": "Varsatura", + "county": "Vrancea" + }, + { + "id": 13527, + "name": "Jitia", + "county": "Vrancea" + }, + { + "id": 13528, + "name": "Cerbu", + "county": "Vrancea" + }, + { + "id": 13529, + "name": "Dealu Sarii", + "county": "Vrancea" + }, + { + "id": 13530, + "name": "Jitia de Jos", + "county": "Vrancea" + }, + { + "id": 13531, + "name": "Magura", + "county": "Vrancea" + }, + { + "id": 13532, + "name": "Maicanesti", + "county": "Vrancea" + }, + { + "id": 13533, + "name": "Belciugele", + "county": "Vrancea" + }, + { + "id": 13534, + "name": "Ramniceni", + "county": "Vrancea" + }, + { + "id": 13535, + "name": "Slobozia Botesti", + "county": "Vrancea" + }, + { + "id": 13536, + "name": "Stupina", + "county": "Vrancea" + }, + { + "id": 13537, + "name": "Tataru", + "county": "Vrancea" + }, + { + "id": 13538, + "name": "Mera", + "county": "Vrancea" + }, + { + "id": 13539, + "name": "Livada", + "county": "Vrancea" + }, + { + "id": 13540, + "name": "Milcovel", + "county": "Vrancea" + }, + { + "id": 13541, + "name": "Rosioara", + "county": "Vrancea" + }, + { + "id": 13542, + "name": "Vulcaneasa", + "county": "Vrancea" + }, + { + "id": 13543, + "name": "Milcovul", + "county": "Vrancea" + }, + { + "id": 13544, + "name": "Gologanu", + "county": "Vrancea" + }, + { + "id": 13545, + "name": "Lamotesti", + "county": "Vrancea" + }, + { + "id": 13546, + "name": "Rastoaca", + "county": "Vrancea" + }, + { + "id": 13547, + "name": "Movilita", + "county": "Vrancea" + }, + { + "id": 13548, + "name": "Diochetirediu", + "county": "Vrancea" + }, + { + "id": 13549, + "name": "Frecatei", + "county": "Vrancea" + }, + { + "id": 13550, + "name": "Trotusanu", + "county": "Vrancea" + }, + { + "id": 13551, + "name": "Valeni", + "county": "Vrancea" + }, + { + "id": 13552, + "name": "Nanesti", + "county": "Vrancea" + }, + { + "id": 13553, + "name": "Calienii Noi", + "county": "Vrancea" + }, + { + "id": 13554, + "name": "Calienii Vechi", + "county": "Vrancea" + }, + { + "id": 13555, + "name": "Naruja", + "county": "Vrancea" + }, + { + "id": 13556, + "name": "Podu Narujei", + "county": "Vrancea" + }, + { + "id": 13557, + "name": "Podu Stoica", + "county": "Vrancea" + }, + { + "id": 13558, + "name": "Rebegari", + "county": "Vrancea" + }, + { + "id": 13559, + "name": "Nereju", + "county": "Vrancea" + }, + { + "id": 13560, + "name": "Bradacesti", + "county": "Vrancea" + }, + { + "id": 13561, + "name": "Chiricani", + "county": "Vrancea" + }, + { + "id": 13562, + "name": "Nereju Mic", + "county": "Vrancea" + }, + { + "id": 13563, + "name": "Sahastru", + "county": "Vrancea" + }, + { + "id": 13564, + "name": "Nistoresti", + "county": "Vrancea" + }, + { + "id": 13565, + "name": "Batcari", + "county": "Vrancea" + }, + { + "id": 13566, + "name": "Bradetu", + "county": "Vrancea" + }, + { + "id": 13567, + "name": "Fagetu", + "county": "Vrancea" + }, + { + "id": 13568, + "name": "Podu Schiopului", + "county": "Vrancea" + }, + { + "id": 13569, + "name": "Romanesti", + "county": "Vrancea" + }, + { + "id": 13570, + "name": "Ungureni", + "county": "Vrancea" + }, + { + "id": 13571, + "name": "Valea Neagra", + "county": "Vrancea" + }, + { + "id": 13572, + "name": "Vetresti-Herastrau", + "county": "Vrancea" + }, + { + "id": 13573, + "name": "Paltin", + "county": "Vrancea" + }, + { + "id": 13574, + "name": "Carsochesti-Corabita", + "county": "Vrancea" + }, + { + "id": 13575, + "name": "Ghebari", + "county": "Vrancea" + }, + { + "id": 13576, + "name": "Moraresti", + "county": "Vrancea" + }, + { + "id": 13577, + "name": "Pavalari", + "county": "Vrancea" + }, + { + "id": 13578, + "name": "Prahuda", + "county": "Vrancea" + }, + { + "id": 13579, + "name": "Spulber", + "county": "Vrancea" + }, + { + "id": 13580, + "name": "Tojanii de Jos", + "county": "Vrancea" + }, + { + "id": 13581, + "name": "Tojanii de Sus", + "county": "Vrancea" + }, + { + "id": 13582, + "name": "Tepa", + "county": "Vrancea" + }, + { + "id": 13583, + "name": "Tipau", + "county": "Vrancea" + }, + { + "id": 13584, + "name": "Valcani", + "county": "Vrancea" + }, + { + "id": 13585, + "name": "Paunesti", + "county": "Vrancea" + }, + { + "id": 13586, + "name": "Viisoara", + "county": "Vrancea" + }, + { + "id": 13587, + "name": "Poiana Cristei", + "county": "Vrancea" + }, + { + "id": 13588, + "name": "Dealu Cucului", + "county": "Vrancea" + }, + { + "id": 13589, + "name": "Dumbrava", + "county": "Vrancea" + }, + { + "id": 13590, + "name": "Mahriu", + "county": "Vrancea" + }, + { + "id": 13591, + "name": "Odobasca", + "county": "Vrancea" + }, + { + "id": 13592, + "name": "Petreanu", + "county": "Vrancea" + }, + { + "id": 13593, + "name": "Podu Lacului", + "county": "Vrancea" + }, + { + "id": 13594, + "name": "Taratu", + "county": "Vrancea" + }, + { + "id": 13595, + "name": "Pufesti", + "county": "Vrancea" + }, + { + "id": 13596, + "name": "Ciorani", + "county": "Vrancea" + }, + { + "id": 13597, + "name": "Domnesti-Sat", + "county": "Vrancea" + }, + { + "id": 13598, + "name": "Domnesti-Targ", + "county": "Vrancea" + }, + { + "id": 13599, + "name": "Racoasa", + "county": "Vrancea" + }, + { + "id": 13600, + "name": "Gogoiu", + "county": "Vrancea" + }, + { + "id": 13601, + "name": "Marasti", + "county": "Vrancea" + }, + { + "id": 13602, + "name": "Varnita", + "county": "Vrancea" + }, + { + "id": 13603, + "name": "Verdea", + "county": "Vrancea" + }, + { + "id": 13604, + "name": "Reghiu", + "county": "Vrancea" + }, + { + "id": 13605, + "name": "Farcas", + "county": "Vrancea" + }, + { + "id": 13606, + "name": "Jgheaburi", + "county": "Vrancea" + }, + { + "id": 13607, + "name": "Piscu Reghiului", + "county": "Vrancea" + }, + { + "id": 13608, + "name": "Raiuti", + "county": "Vrancea" + }, + { + "id": 13609, + "name": "Sindrilari", + "county": "Vrancea" + }, + { + "id": 13610, + "name": "Ursoaia", + "county": "Vrancea" + }, + { + "id": 13611, + "name": "Valea Milcovului", + "county": "Vrancea" + }, + { + "id": 13612, + "name": "Ruginesti", + "county": "Vrancea" + }, + { + "id": 13613, + "name": "Anghelesti", + "county": "Vrancea" + }, + { + "id": 13614, + "name": "Copacesti", + "county": "Vrancea" + }, + { + "id": 13615, + "name": "Valeni", + "county": "Vrancea" + }, + { + "id": 13616, + "name": "Sihlea", + "county": "Vrancea" + }, + { + "id": 13617, + "name": "Bogza", + "county": "Vrancea" + }, + { + "id": 13618, + "name": "Caiata", + "county": "Vrancea" + }, + { + "id": 13619, + "name": "Voetin", + "county": "Vrancea" + }, + { + "id": 13620, + "name": "Slobozia Bradului", + "county": "Vrancea" + }, + { + "id": 13621, + "name": "Cornetu", + "county": "Vrancea" + }, + { + "id": 13622, + "name": "Coroteni", + "county": "Vrancea" + }, + { + "id": 13623, + "name": "Liesti", + "county": "Vrancea" + }, + { + "id": 13624, + "name": "Olareni", + "county": "Vrancea" + }, + { + "id": 13625, + "name": "Valea Beciului", + "county": "Vrancea" + }, + { + "id": 13626, + "name": "Slobozia Ciorasti", + "county": "Vrancea" + }, + { + "id": 13627, + "name": "Armeni", + "county": "Vrancea" + }, + { + "id": 13628, + "name": "Jiliste", + "county": "Vrancea" + }, + { + "id": 13629, + "name": "Dragosloveni", + "county": "Vrancea" + }, + { + "id": 13630, + "name": "Rucareni", + "county": "Vrancea" + }, + { + "id": 13631, + "name": "Straoane", + "county": "Vrancea" + }, + { + "id": 13632, + "name": "Muncelu", + "county": "Vrancea" + }, + { + "id": 13633, + "name": "Repedea", + "county": "Vrancea" + }, + { + "id": 13634, + "name": "Valeni", + "county": "Vrancea" + }, + { + "id": 13635, + "name": "Suraia", + "county": "Vrancea" + }, + { + "id": 13636, + "name": "Biliesti", + "county": "Vrancea" + }, + { + "id": 13637, + "name": "Tanasoaia", + "county": "Vrancea" + }, + { + "id": 13638, + "name": "Calimaneasa", + "county": "Vrancea" + }, + { + "id": 13639, + "name": "Costisa", + "county": "Vrancea" + }, + { + "id": 13640, + "name": "Costisa de Sus", + "county": "Vrancea" + }, + { + "id": 13641, + "name": "Covrag", + "county": "Vrancea" + }, + { + "id": 13642, + "name": "Feldioara", + "county": "Vrancea" + }, + { + "id": 13643, + "name": "Galbeni", + "county": "Vrancea" + }, + { + "id": 13644, + "name": "Nanesti", + "county": "Vrancea" + }, + { + "id": 13645, + "name": "Vladnicu de Jos", + "county": "Vrancea" + }, + { + "id": 13646, + "name": "Vladnicu de Sus", + "county": "Vrancea" + }, + { + "id": 13647, + "name": "Tataranu", + "county": "Vrancea" + }, + { + "id": 13648, + "name": "Bordeasca Noua", + "county": "Vrancea" + }, + { + "id": 13649, + "name": "Bordeasca Veche", + "county": "Vrancea" + }, + { + "id": 13650, + "name": "Martinesti", + "county": "Vrancea" + }, + { + "id": 13651, + "name": "Vajaitoarea", + "county": "Vrancea" + }, + { + "id": 13652, + "name": "Tamboesti", + "county": "Vrancea" + }, + { + "id": 13653, + "name": "Obrejita", + "county": "Vrancea" + }, + { + "id": 13654, + "name": "Padureni", + "county": "Vrancea" + }, + { + "id": 13655, + "name": "Pietroasa", + "county": "Vrancea" + }, + { + "id": 13656, + "name": "Slimnic", + "county": "Vrancea" + }, + { + "id": 13657, + "name": "Trestieni", + "county": "Vrancea" + }, + { + "id": 13658, + "name": "Tulnici", + "county": "Vrancea" + }, + { + "id": 13659, + "name": "Coza", + "county": "Vrancea" + }, + { + "id": 13660, + "name": "Gresu", + "county": "Vrancea" + }, + { + "id": 13661, + "name": "Haulisca", + "county": "Vrancea" + }, + { + "id": 13662, + "name": "Lepsa", + "county": "Vrancea" + }, + { + "id": 13663, + "name": "Paulesti", + "county": "Vrancea" + }, + { + "id": 13664, + "name": "Tifesti", + "county": "Vrancea" + }, + { + "id": 13665, + "name": "Batinesti", + "county": "Vrancea" + }, + { + "id": 13666, + "name": "Clipicesti", + "county": "Vrancea" + }, + { + "id": 13667, + "name": "Igesti", + "county": "Vrancea" + }, + { + "id": 13668, + "name": "Olesesti", + "county": "Vrancea" + }, + { + "id": 13669, + "name": "Patrascani", + "county": "Vrancea" + }, + { + "id": 13670, + "name": "Sarbi", + "county": "Vrancea" + }, + { + "id": 13671, + "name": "Vitanesti", + "county": "Vrancea" + }, + { + "id": 13672, + "name": "Urechesti", + "county": "Vrancea" + }, + { + "id": 13673, + "name": "Popesti", + "county": "Vrancea" + }, + { + "id": 13674, + "name": "Terchesti", + "county": "Vrancea" + }, + { + "id": 13675, + "name": "Valea Sarii", + "county": "Vrancea" + }, + { + "id": 13676, + "name": "Colacu", + "county": "Vrancea" + }, + { + "id": 13677, + "name": "Matacina", + "county": "Vrancea" + }, + { + "id": 13678, + "name": "Poduri", + "county": "Vrancea" + }, + { + "id": 13679, + "name": "Prisaca", + "county": "Vrancea" + }, + { + "id": 13680, + "name": "Vidra", + "county": "Vrancea" + }, + { + "id": 13681, + "name": "Burca", + "county": "Vrancea" + }, + { + "id": 13682, + "name": "Iresti", + "county": "Vrancea" + }, + { + "id": 13683, + "name": "Ruget", + "county": "Vrancea" + }, + { + "id": 13684, + "name": "Scafari", + "county": "Vrancea" + }, + { + "id": 13685, + "name": "Serbesti", + "county": "Vrancea" + }, + { + "id": 13686, + "name": "Tichiris", + "county": "Vrancea" + }, + { + "id": 13687, + "name": "Viisoara", + "county": "Vrancea" + }, + { + "id": 13688, + "name": "Voloscani", + "county": "Vrancea" + }, + { + "id": 13689, + "name": "Vintileasca", + "county": "Vrancea" + }, + { + "id": 13690, + "name": "Bahnele", + "county": "Vrancea" + }, + { + "id": 13691, + "name": "Dupa Magura", + "county": "Vrancea" + }, + { + "id": 13692, + "name": "Neculele", + "county": "Vrancea" + }, + { + "id": 13693, + "name": "Poiana Stoichii", + "county": "Vrancea" + }, + { + "id": 13694, + "name": "Tanasari", + "county": "Vrancea" + }, + { + "id": 13695, + "name": "Livezile", + "county": "Vrancea" + }, + { + "id": 13696, + "name": "Mesteacanu", + "county": "Vrancea" + }, + { + "id": 13697, + "name": "Piscu Radului", + "county": "Vrancea" + }, + { + "id": 13698, + "name": "Vizantea Manastireasca", + "county": "Vrancea" + }, + { + "id": 13699, + "name": "Vizantea Razaseasca", + "county": "Vrancea" + }, + { + "id": 13700, + "name": "Vanatori", + "county": "Vrancea" + }, + { + "id": 13701, + "name": "Balta Ratei", + "county": "Vrancea" + }, + { + "id": 13702, + "name": "Jorasti", + "county": "Vrancea" + }, + { + "id": 13703, + "name": "Mircestii Noi", + "county": "Vrancea" + }, + { + "id": 13704, + "name": "Mircestii Vechi", + "county": "Vrancea" + }, + { + "id": 13705, + "name": "Petresti", + "county": "Vrancea" + }, + { + "id": 13706, + "name": "Radulesti", + "county": "Vrancea" + }, + { + "id": 13707, + "name": "Vartescoiu", + "county": "Vrancea" + }, + { + "id": 13708, + "name": "Beciu", + "county": "Vrancea" + }, + { + "id": 13709, + "name": "Faraoanele", + "county": "Vrancea" + }, + { + "id": 13710, + "name": "Olteni", + "county": "Vrancea" + }, + { + "id": 13711, + "name": "Pietroasa", + "county": "Vrancea" + }, + { + "id": 13712, + "name": "Ramniceanca", + "county": "Vrancea" + }, + { + "id": 13713, + "name": "Vrancioaia", + "county": "Vrancea" + }, + { + "id": 13714, + "name": "Bodesti", + "county": "Vrancea" + }, + { + "id": 13715, + "name": "Muncei", + "county": "Vrancea" + }, + { + "id": 13716, + "name": "Plostina", + "county": "Vrancea" + }, + { + "id": 13717, + "name": "Poiana", + "county": "Vrancea" + }, + { + "id": 13718, + "name": "Spinesti", + "county": "Vrancea" + }, + { + "id": 13719, + "name": "Vulturu", + "county": "Vrancea" + }, + { + "id": 13720, + "name": "Botarlau", + "county": "Vrancea" + }, + { + "id": 13721, + "name": "Hangulesti", + "county": "Vrancea" + }, + { + "id": 13722, + "name": "Maluri", + "county": "Vrancea" + }, + { + "id": 13723, + "name": "Vadu Rosca", + "county": "Vrancea" + }, + { + "id": 13724, + "name": "Municipiul Bucuresti", + "county": "Bucuresti" + }, + { + "id": 13725, + "name": "Bragadiru", + "county": "Ilfov" + }, + { + "id": 13726, + "name": "Chiajna", + "county": "Ilfov" + }, + { + "id": 13727, + "name": "Dudu", + "county": "Ilfov" + }, + { + "id": 13728, + "name": "Rosu", + "county": "Ilfov" + }, + { + "id": 13729, + "name": "Chitila", + "county": "Ilfov" + }, + { + "id": 13730, + "name": "Rudeni", + "county": "Ilfov" + }, + { + "id": 13731, + "name": "Dobroesti", + "county": "Ilfov" + }, + { + "id": 13732, + "name": "Fundeni", + "county": "Ilfov" + }, + { + "id": 13733, + "name": "Glina", + "county": "Ilfov" + }, + { + "id": 13734, + "name": "Catelu", + "county": "Ilfov" + }, + { + "id": 13735, + "name": "Manolache", + "county": "Ilfov" + }, + { + "id": 13736, + "name": "Jilava", + "county": "Ilfov" + }, + { + "id": 13737, + "name": "Magurele", + "county": "Ilfov" + }, + { + "id": 13738, + "name": "Alunisu", + "county": "Ilfov" + }, + { + "id": 13739, + "name": "Dumitrana", + "county": "Ilfov" + }, + { + "id": 13740, + "name": "Pruni", + "county": "Ilfov" + }, + { + "id": 13741, + "name": "Varteju", + "county": "Ilfov" + }, + { + "id": 13742, + "name": "Mogosoaia", + "county": "Ilfov" + }, + { + "id": 13743, + "name": "Otopeni", + "county": "Ilfov" + }, + { + "id": 13744, + "name": "Odaile", + "county": "Ilfov" + }, + { + "id": 13745, + "name": "Pantelimon", + "county": "Ilfov" + }, + { + "id": 13746, + "name": "Popesti Leordeni", + "county": "Ilfov" + }, + { + "id": 13747, + "name": "Voluntari", + "county": "Ilfov" + }, + { + "id": 13748, + "name": "Salta", + "county": "Maramures" + }, + { + "id": 13749, + "name": "Comasca", + "county": "Giurgiu" + } +] \ No newline at end of file diff --git a/src/assets/json/counties.json b/src/assets/json/counties.json new file mode 100644 index 0000000..13dc608 --- /dev/null +++ b/src/assets/json/counties.json @@ -0,0 +1,170 @@ +[ + { + "id": 1, + "name": "Alba" + }, + { + "id": 2, + "name": "Arad" + }, + { + "id": 3, + "name": "Arges" + }, + { + "id": 4, + "name": "Bacau" + }, + { + "id": 5, + "name": "Bihor" + }, + { + "id": 6, + "name": "Bistrita-Nasaud" + }, + { + "id": 7, + "name": "Botosani" + }, + { + "id": 9, + "name": "Braila" + }, + { + "id": 8, + "name": "Brasov" + }, + { + "id": 10, + "name": "Buzau" + }, + { + "id": 51, + "name": "Calarasi" + }, + { + "id": 11, + "name": "Caras-Severin" + }, + { + "id": 12, + "name": "Cluj" + }, + { + "id": 13, + "name": "Constanta" + }, + { + "id": 14, + "name": "Covasna" + }, + { + "id": 15, + "name": "Dimbovita" + }, + { + "id": 16, + "name": "Dolj" + }, + { + "id": 17, + "name": "Galati" + }, + { + "id": 52, + "name": "Giurgiu" + }, + { + "id": 18, + "name": "Gorj" + }, + { + "id": 19, + "name": "Harghita" + }, + { + "id": 20, + "name": "Hunedoara" + }, + { + "id": 21, + "name": "Ialomita" + }, + { + "id": 22, + "name": "Iasi" + }, + { + "id": 23, + "name": "Ilfov" + }, + { + "id": 24, + "name": "Maramures" + }, + { + "id": 25, + "name": "Mehedinti" + }, + { + "id": 26, + "name": "Mures" + }, + { + "id": 27, + "name": "Neamt" + }, + { + "id": 0, + "name": "Necunoscut" + }, + { + "id": 28, + "name": "Olt" + }, + { + "id": 29, + "name": "Prahova" + }, + { + "id": 31, + "name": "Salaj" + }, + { + "id": 30, + "name": "Satu Mare" + }, + { + "id": 32, + "name": "Sibiu" + }, + { + "id": 33, + "name": "Suceava" + }, + { + "id": 34, + "name": "Teleorman" + }, + { + "id": 35, + "name": "Timis" + }, + { + "id": 36, + "name": "Tulcea" + }, + { + "id": 37, + "name": "Vaslui" + }, + { + "id": 38, + "name": "Vilcea" + }, + { + "id": 39, + "name": "Vrancea" + } +] \ No newline at end of file diff --git a/src/assets/json/subcategories.json b/src/assets/json/subcategories.json new file mode 100644 index 0000000..ee68360 --- /dev/null +++ b/src/assets/json/subcategories.json @@ -0,0 +1,12 @@ +[ +{"name":"Textile (ex pături, asternuturi)","category":"1"}, +{"name":"Mobilier (ex: paturi de campanie, patut de copil, saltele etc)","category":"1"}, +{"name":"Corturi","category":"1"}, +{"name":"Spatii de cazare","category":"1"}, +{"name":"Echipamente electrice (ex: motopompe, generatoare curent, pompa apa, drone etc)","category":"2"}, +{"name":"Echipamente utilitare (ex: rucsac de supravietuire, lanterne, lampi, instalatii de iluminat, bucatarie de campanie, reșouri etc)","category":"2"}, +{"name":"Masini (ex: duba 7 locuri, microbuz, masini 44, masini mici)","category":"4"}, +{"name":"Motociclete (ex: motociclete, scutere, alte vehicule motorizate)","category":"4"}, +{"name":"Rulote","category":"4"}, +{"name":"Masini specializate (ex: ambulanta)","category":"4"} +] \ No newline at end of file diff --git a/src/environments/environment.dev.ts b/src/environments/environment.dev.ts index b3d3b5b..e786074 100755 --- a/src/environments/environment.dev.ts +++ b/src/environments/environment.dev.ts @@ -1,6 +1,6 @@ export const environment = { env: 'DEV', production: false, - serverBaseUrl: 'http://192.168.0.107', - serverUrl: 'http://192.168.0.107/api' + serverBaseUrl: 'https://rvm-api.lxhost.ro', + serverUrl: 'https://rvm-api.lxhost.ro/api' }; diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts new file mode 100644 index 0000000..8d58254 --- /dev/null +++ b/src/environments/environment.local.ts @@ -0,0 +1,8 @@ +export const environment = { + env: 'LOCAL', + production: false, + serverBaseUrl: 'http://192.168.0.115', + serverUrl: 'http://192.168.0.115/api' + // serverBaseUrl: 'https://rvm-api.lxhost.ro', + // serverUrl: 'https://rvm-api.lxhost.ro/api' +}; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 5047cb0..0fd2358 100755 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,6 +1,6 @@ export const environment = { - env: 'PROD', - production: true, - serverBaseUrl: 'http://productionurl.com', - serverUrl: 'http://productionurl.com' + env: 'PROD', + production: true, + serverBaseUrl: 'https://rvm-api.lxhost.ro', + serverUrl: 'https://rvm-api.lxhost.ro/api' }; diff --git a/src/environments/environment.stage.ts b/src/environments/environment.stage.ts new file mode 100644 index 0000000..ca7fb29 --- /dev/null +++ b/src/environments/environment.stage.ts @@ -0,0 +1,6 @@ +export const environment = { + env: 'STAGE', + production: false, + serverBaseUrl: 'SERVER_BASE_URL', + serverUrl: 'SERVER_URL' +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index dd6e560..2518434 100755 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -5,8 +5,8 @@ export const environment = { env: 'DEFAULT', production: false, - serverBaseUrl: 'http://192.168.0.107', - serverUrl: 'http://192.168.0.107/api' + serverBaseUrl: '', + serverUrl: '' }; /* diff --git a/src/index.html b/src/index.html index b224d71..c9a44da 100755 --- a/src/index.html +++ b/src/index.html @@ -10,7 +10,7 @@ - + diff --git a/src/styles.scss b/src/styles.scss index b840e9a..8dcf2e0 100755 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,10 +1,9 @@ - // Custom Theming for Angular Material // For more information: https://material.angular.io/guide/theming @import '~@angular/material/theming'; // Plus imports for other components in your app. -$fa-font-path: "../node_modules/font-awesome/fonts"; -@import "../node_modules/font-awesome/scss/font-awesome.scss"; +$fa-font-path: '../node_modules/font-awesome/fonts'; +@import '../node_modules/font-awesome/scss/font-awesome.scss'; // Include the common styles for Angular Material. We include this here so that you only // have to load a single css file for Angular Material in your app. // Be sure that you only ever include this mixin once! @@ -20,7 +19,11 @@ $rvm-client-accent: mat-palette($mat-pink, A200, A100, A400); $rvm-client-warn: mat-palette($mat-red); // Create the theme object (a Sass map containing all of the palettes). -$rvm-client-theme: mat-light-theme($rvm-client-primary, $rvm-client-accent, $rvm-client-warn); +$rvm-client-theme: mat-light-theme( + $rvm-client-primary, + $rvm-client-accent, + $rvm-client-warn +); // Include theme styles for core and each component used in your app. // Alternatively, you can import and @include the theme mixins for each component @@ -28,20 +31,480 @@ $rvm-client-theme: mat-light-theme($rvm-client-primary, $rvm-client-accent, $rvm @include angular-material-theme($rvm-client-theme); /* You can add global styles to this file, and also import other style files */ -html, body { - height: 100%; +html, +body { + height: 100%; +} +body { + margin: 0; + font-family: Roboto, 'Helvetica Neue', sans-serif; } -html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } .page-title { - font-size: 26px; - font-weight: 400; - color: black; - + font-size: 26px; + font-weight: 400; + color: black; +} +.navtitle { + text-decoration: underline; +} + +.note { + background-color: #bec9e1; + padding: 5px; + color: black; +} + +.note a { + color: black; + text-decoration: underline; +} + +.form-control:focus { + box-shadow: none !important; + border-color: #ced4da !important; +} + +.logo-container { + margin-top: 50px; + margin-bottom: 50px; + + img { + border-radius: 50%; + display: block; + margin: auto; + height: 250px; + border: 15px solid white; + background: #FDCA18; + } +} + +@media (min-width: 1600px){ + .wide-container{ + max-width: 1540px; + } +} + +.login-register { + min-height: 100vh; + display: flex; + flex-direction: column; + background-color: rgb(38, 73, 152); +} + +.login-register .form-horizontal label { + margin-left: 5px; +} + +.login-register .button-login { + margin-top: 20px; + background-color: rgb(255, 204, 0); + color: black; +} + +.login-register .login-box .card-body { + flex: 1 1 auto; + flex-wrap: wrap; + padding: 1.25rem; + margin-left: auto; + margin-right: auto; + max-width: 550px; +} + +.login-register .login-box input:-webkit-autofill { + -webkit-box-shadow: 0 0 0px 1000px white inset; + box-shadow: 0 0 0px 1000px white inset; +} + +.login-box .card-body .form-group { + background-color: transparent; +} +.form-group .dropdown-menu.show{ + max-height: 150px; + overflow: auto; +} + +.login-box .card-body .form-control { + border: none; + color: white; + background-color: transparent; + border-bottom: 1px solid white; + border-radius: 0px; +} + +.login-box .card-body:focus { + outline: none; +} + +.login-box .card-body::placeholder { + color: white; +} + +.navtitle { + text-decoration: underline; +} + +.sort { + + &.asc::after { + content: '\f062'; + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + margin:0px 0px 0px 10px; + text-decoration:none; + } + + &.desc::after { + content: '\f063'; + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + margin:0px 0px 0px 10px; + text-decoration:none; + } +} + +.filterbutton { + .ngx-dropdown-container .select-all { + white-space: nowrap; + margin: 10px 15px 0 15px; + } + .ngx-dropdown-button{ + border:none !important; + min-width: 100px; + } + .ngx-dropdown-button:focus{ + outline:none !important; + } + .nsdicon-angle-down:before{ + content:'\F107'; + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + margin:0px 0px 0px 10px; + text-decoration:none; + } + .ngx-dropdown-list-container{ + width: fit-content !important; + } } -::ng-deep input{ - box-shadow: none; + +.btn-right { + margin-left: auto; + margin-right: 0; + display: block!important; +} + +.px-15 { + padding-left:15px; + padding-right:15px; +} + +.resource-list { + margin-top:15px; + + .nav-item .nav-link.active { + color:blue; + text-decoration: underline; + background-color: transparent; + } + + .nav-item .nav-link { + color:gray; + text-decoration: underline; + background-color: transparent; + } +} + + +.table.customTable { + + overflow-y:auto; + th { + padding: 15px; + border:none; + border-bottom: 1px solid black; + cursor: pointer; + } + + td { + padding: 15px; + border-top: 1px solid black; + word-break: break-all; + max-width: 250px; + } +} + +@media (min-width: 768px){ + .responsive-btn{ + margin-left:15px; + } +} + +@media (max-width: 767px){ + .responsive-btn{ + float: right; + white-space: normal; + margin: 25px; + width: min-content; + } +} + +.dropup, .dropright, .dropdown, .dropleft { + cursor: pointer; +} + +.btn-primary { + cursor: pointer; } -.navtitle{ - text-decoration: underline; + + +.btn-group{ + height: 47px; + + .btn-primary { + background-color: #ffffff; + color: #4c2bee; + border-color: #dddddd; + } + + .btn-primary.focus, .btn-primary.active{ + background-color: #4c2bee; + color: #ffffff; + border-color: #421fed; + } +} + +.filters { + + .padding-rem { + padding: 0.375rem 0.75rem + } + + .vertical-bar { + background-color: #67757c; + width: 2px; + margin-left: 10px; + margin-right: 10px; + } +} + +.login-register { + .navigation { + margin: auto; + color: white; + } + + + .navigation:hover { + text-decoration: underline; + } + + .error-message { + color: white; + background-color: red; + border: none; + } +} + +@media (max-width: 1199px) { + .btn-adjusting { + width: min-content; + } +} + +.navbar .add-btn{ + white-space: normal; + height: auto; +} +@media (max-width: 767px) { + + .hidden-radio { + display: none !important; + } +} + +.card-title { + height: 50px; + line-height: 25px; + overflow: hidden; +} + +.card-body p { + color: black; +} + +.card-body a { + max-width: 100%; +} + + +.card { + cursor: pointer; +} + +.error { + border: 1px solid red !important; +} + +.container{ + margin-bottom: 35px; +} + +.error-message { + color: red; + font-size: 12px; +} + +.card-text { + + span { + line-height: 15px; + height: 17px; + display: block; + overflow: hidden; + overflow-wrap: break-word; + word-break: break-all; + } + + i { + margin-right: 2px; + } +} + +.filters.mx-30px{ + margin-left: 30px; + margin-right: 30px; +} + +.mx-30px{ + margin-left: 30px; + margin-right: 30px; +} + +.text-green { + color: #53bb70; +} + +.input-loader { + position: absolute; + top: 43px; + left: 367px; + height: 1em!important; + width: 1em!important; +} +.none-selected{ + -webkit-text-fill-color: transparent !important; + position: relative !important; + color: transparent !important; +} +.none-selected:before { + content: 'Nimic selectat'; + color: #000; + display: block; + position: absolute; + left: 0; + top: 0; + -webkit-text-fill-color: #000; +} +.mat-multiselect{ + .multiselect-wrapper{ + width:100% !important; + max-width:300px !important; + .listing-wrapper{ + max-width: 300px; + } + + .dropdown-button{ + .selection{ + padding: 0; + border:none !important; + .none-selected{ + -webkit-text-fill-color: transparent !important; + position: relative !important; + color: transparent !important; + + } + .none-selected:before { + content: 'Locație'; + color: #000; + display: block; + position: absolute; + left: 0; + font-size: 14px; + top: -2px; + -webkit-text-fill-color: #000; + } + .none-selected, .selected{ + margin-right: 15px; + } + } + } + } + + .helper-buttons fieldset{ + .helper-button { + margin: 0px 10px; + -webkit-text-fill-color: transparent !important; + position: relative !important; + color: transparent !important; + font-size: 0 !important; + + &:before { + content: ""; + color: #000; + display: block; + font-size: 12px !important; + -webkit-text-fill-color: #000; + padding: 0 5px; + } + + &:nth-child(1) { + &:before { + content: "✓ Toate"; + } + } + + &:nth-child(2) { + &:before { + content: "× Niciunul"; + } + } + + &:nth-child(3) { + display: none !important; + &:before { + content: "↶ Reset"; + } + } + } + } +} + +.clickable { + cursor: pointer; +} + +.import-csv { + cursor: pointer; + position: absolute; + opacity: 0; + z-index: 100; + left: 0; + top: 50px;; +} + +.btn-import { + z-index: 99; + position: absolute; + left: 0; + top: 20px; +} + +.import-box { + position: relative; +} + +.non-clickable{ + cursor: default !important; } \ No newline at end of file diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json index 8ea061e..be0ceae 100755 --- a/src/tsconfig.app.json +++ b/src/tsconfig.app.json @@ -5,7 +5,9 @@ "types": [] }, "exclude": [ - "src/test.ts", + "test.ts", + "environments/*", + "assets/**/*", "**/*.spec.ts" ] }