Project

General

Profile

« Previous | Next » 

Revision 58874

[Trunk | Library]:
1. src/assets/common-assets/common/custom.css: Add 'font-display: swap;' in '@font-face' css rules - improve performance.
2. dataProvider.component.html & organizations.component.html & project.component.html & resultLanding.component.html: Add check if 'indexUpdateDate' is initialized.
3. dataProvider.component.ts & organization.component.ts & project.component.ts & resultLanding.component.ts:
Initialize 'indexUpdateDate' and tabs counts only if "typeof document !== 'undefined'" (javascript is enabled) - improve performance.
4. resultLanding.component.ts: Get "provenanceActionVocabulary" and "altMetrics" only if "typeof document !== 'undefined'" (javascript is enabled) - improve performance.
5. organization.component.ts: [Bug fix] Get 'indexUpdateDate' from service (not properties) if available.
6. project.component.ts: [Bug fix] Call 'getProjectInfo()' only once (was called twice).
7. project.service.ts: [Bug fix] Add check for rels.rel.to.class=="hasParticipant" (when not array).
8. metrics.component.ts: Get metrics if "typeof document !== 'undefined'" (javascript is enabled) | Show charts only if user clicked on metrics badge | Do not set "width" for <i-frame> elements.
9. iframe.component.ts: Add case when only height is sent as input.
10. searchDataProviders.component.ts & searchOrganizations.component.ts: [Bug fix] Set "firstLoad" to false after getting results (was asking refine filters in paging too).
11. search-tab.component.ts: [Bug fix]: In method "getEntityName()" add cases when 'entityType "project"' and 'entityType "dataprovider"' and fix case when 'entityType == "result"'.
12. navigationBar.component.ts: [Bug fix] Do not initialize navbar inside route.queryParams subscription - !!! check it carefully when deployed in all portals !!! .

View differences:

modules/uoa-services-library/trunk/ng-openaire-library/src/app/searchPages/searchDataProviders.component.ts
40 40
      [sort]="false">
41 41
      
42 42
    </new-search-page>
43
<!--    [filters]="filters"-->
43 44

  
44 45
    `
45 46
 })
......
129 130
    // console.log(this.refineFields)
130 131
    this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap,this.customFilter,params, "dataprovider");
131 132
    this.getResults(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(),  this.searchUtils.page, this.searchUtils.size, refine, this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
133
    firstLoad = false;
132 134
    });
133 135
  }
134 136
  ngOnDestroy() {
......
167 169
            this.results = data[1];
168 170
            //console.log(this.results);
169 171
           if (refine) {
170
             this.filters = this.searchPage.prepareFiltersToShow((this.type=="all" || this.type == "deposit")?data[2]:this.filters, this.searchUtils.totalResults);
172
             this.filters =
173
             this.searchPage.prepareFiltersToShow((this.type=="all" || this.type == "deposit")?data[2]:this.filters, this.searchUtils.totalResults);
171 174
           }else{
172 175
             this.searchPage.buildPageURLParameters(this.filters, [], false);
173 176
           }
modules/uoa-services-library/trunk/ng-openaire-library/src/app/searchPages/searchOrganizations.component.ts
121 121
      this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap,this.customFilter,params, "organization");
122 122

  
123 123
      this.getResults(this.searchPage.getSearchAPIQueryForAdvancedSearhFields(),  this.searchUtils.page, this.searchUtils.size, refine, this.searchPage.getSearchAPIQueryForRefineFields(params, firstLoad));
124

  
124
      firstLoad = false;
125 125
    });
126 126
  }
127 127
  ngOnDestroy() {
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/dataProvider/dataProvider.component.html
483 483
            <div class="uk-width-2-3@m uk-width-1-2">
484 484
              <img src="assets/common-assets/graph.svg" style="opacity: 0.4">
485 485
              <span class="uk-margin-small-left uk-text-baseline uk-text-muted">Powered by OpenAIRE Open Research Graph</span>
486
              <span class="uk-text-baseline uk-text-muted">
486
              <span *ngIf="indexUpdateDate" class="uk-text-baseline uk-text-muted">
487 487
                . Last update of records in OpenAIRE: {{indexUpdateDate | date: 'MMM dd, yyyy'}}
488 488
              </span>
489 489
            </div>
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/dataProvider/dataProvider.component.ts
154 154
    this.route.data
155 155
      .subscribe((data: { envSpecific: EnvProperties }) => {
156 156
        this.properties = data.envSpecific;
157
        this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
158
          if(lastIndexUpdate) {
159
            this.indexUpdateDate = new Date(lastIndexUpdate);
160
          } else if(this.properties.lastIndexUpdate) {
161
            this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
162
          }
163
        });
157
        if (typeof document !== 'undefined') {
158
          this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
159
            if (lastIndexUpdate) {
160
              this.indexUpdateDate = new Date(lastIndexUpdate);
161
            } else if (this.properties.lastIndexUpdate) {
162
              this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
163
            }
164
          });
165
        }
164 166
        //this.getDivContents();
165 167
        this.getPageContents();
166 168
        this.updateUrl(data.envSpecific.baseLink + this._router.url);
......
252 254
          } else {
253 255
            this.aggregationStatusIsInitialized = true;
254 256
          }
255
          this.initTabs();
257
          if (typeof document !== 'undefined') {
258
            this.initTabs();
259
          }
256 260
          this.showTabs = true;
257 261
          this.updateTitle(this.dataProviderInfo.title.name);
258 262
          this.updateDescription("Content provider, " + this.dataProviderInfo.title.name);
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/organization/organization.component.html
253 253
              <div class="uk-width-2-3@m uk-width-1-2">
254 254
                <img src="assets/common-assets/graph.svg" style="opacity: 0.4">
255 255
                <span class="uk-margin-small-left uk-text-baseline uk-text-muted">Powered by OpenAIRE Open Research Graph</span>
256
                <span class="uk-text-baseline uk-text-muted">
256
                <span *ngIf="indexUpdateDate" class="uk-text-baseline uk-text-muted">
257 257
                . Last update of records in OpenAIRE: {{indexUpdateDate | date: 'MMM dd, yyyy'}}
258 258
              </span>
259 259
              </div>
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/organization/organization.component.ts
21 21
import {Location} from "@angular/common";
22 22
import {FetchResearchResults} from "../../utils/fetchEntitiesClasses/fetchResearchResults.class";
23 23
import {FetchDataproviders} from "../../utils/fetchEntitiesClasses/fetchDataproviders.class";
24
import {IndexInfoService} from "../../utils/indexInfo.service";
24 25

  
25 26
@Component({
26 27
  selector: 'organization',
......
124 125
              private _router: Router,
125 126
              private helper: HelperService,
126 127
              private seoService: SEOService,
127
              private _location: Location) {
128
              private _location: Location,
129
              private indexInfoService: IndexInfoService) {
128 130
    this.fetchProjects = new FetchProjects(this._searchProjectsService);
129 131
    this.fetchDataproviders = new FetchDataproviders(this._searchDataprovidersService);
130 132
    this.fetchPublications = new FetchResearchResults(this._searchResearchResultsService);
......
137 139
    this.route.data
138 140
      .subscribe((data: { envSpecific: EnvProperties }) => {
139 141
        this.properties = data.envSpecific;
140
        if (this.properties.lastIndexUpdate) {
141
          this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
142
        if (typeof document !== 'undefined') {
143
          this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
144
            if (lastIndexUpdate) {
145
              this.indexUpdateDate = new Date(lastIndexUpdate);
146
            } else if (this.properties.lastIndexUpdate) {
147
              this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
148
            }
149
          });
142 150
        }
143 151
        //this.getDivContents();
144 152
        this.getPageContents();
......
330 338
            this.piwiksub = this._piwikService.trackView(this.properties, this.organizationInfo.title.name, this.piwikSiteId).subscribe();
331 339
          }
332 340
          var refineFields: string [] = ["funder"];
333
          this.getTotalResearchResults();
334
          this.getTotalDataproviders();
341

  
342
          if (typeof document !== 'undefined') {
343
            this.getTotalResearchResults();
344
            this.getTotalDataproviders();
345
          }
346

  
335 347
          this.fetchProjects.getResultsForOrganizations(this.organizationId, "", 1, this.searchNumber, refineFields, this.properties);
336 348
          this.showLoading = false;
337 349
        }
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/project/project.component.html
689 689
            <div class="uk-width-2-3@m uk-width-1-2">
690 690
              <img src="assets/common-assets/graph.svg" style="opacity: 0.4">
691 691
              <span class="uk-margin-small-left uk-text-baseline uk-text-muted">Powered by OpenAIRE Open Research Graph</span>
692
              <span class="uk-text-baseline uk-text-muted">
692
              <span *ngIf="indexUpdateDate" class="uk-text-baseline uk-text-muted">
693 693
                . Last update of records in OpenAIRE: {{indexUpdateDate | date: 'MMM dd, yyyy'}}
694 694
              </span>
695 695
            </div>
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/project/project.service.ts
179 179
            let id: string = "";
180 180

  
181 181
            if(!Array.isArray(data[2])) {
182
                if(data[2].hasOwnProperty("legalshortname")) {
182
              if(data[2].hasOwnProperty("to") && data[2]['to'].class == "hasParticipant") {
183

  
184
                if (data[2].hasOwnProperty("legalshortname")) {
183 185
                  acronym = data[2].legalshortname;
184 186
                }
185
                if(data[2].hasOwnProperty("legalname")) {
187
                if (data[2].hasOwnProperty("legalname")) {
186 188
                  name = data[2].legalname;
187 189
                }
188
                if(!acronym && !name){
190
                if (!acronym && !name) {
189 191
                  // acronym is displayed with link and name only in tooltip
190 192
                  acronym = "[no title available]";
191 193
                }
192 194

  
193
                if(data[2].hasOwnProperty("to")) {
194
                    id = data[2]['to'].content;
195
                if (data[2].hasOwnProperty("to")) {
196
                  id = data[2]['to'].content;
195 197
                }
196 198

  
197 199
                this.projectInfo.organizations.push({"acronym": acronym, "name": name, "id": id});
200
              }
198 201
            } else {
199 202
                for(let i=0; i<data[2].length; i++) {
200 203
                    if(data[2][i].hasOwnProperty("to") && data[2][i]['to'].class == "hasParticipant") {
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/project/project.component.ts
152 152
    this.route.data
153 153
      .subscribe((data: { envSpecific: EnvProperties }) => {
154 154
        this.properties = data.envSpecific;
155
        this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
156
          if(lastIndexUpdate) {
157
            this.indexUpdateDate = new Date(lastIndexUpdate);
158
          } else if(this.properties.lastIndexUpdate) {
159
            this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
160
          }
161
        });
155
        if (typeof document !== 'undefined') {
156
          this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
157
            if (lastIndexUpdate) {
158
              this.indexUpdateDate = new Date(lastIndexUpdate);
159
            } else if (this.properties.lastIndexUpdate) {
160
              this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
161
            }
162
          });
163
        }
162 164
        //this.getDivContents();
163 165
        this.getPageContents();
164 166
        this.updateUrl(data.envSpecific.baseLink + this._router.url);
......
251 253
  }
252 254

  
253 255
  actionsAfterLoadId() {
254
    this.getProjectInfo(this.projectId);
256
    //this.getProjectInfo(this.projectId);
255 257
    //this.searchPublications();
256
    this.fetchPublications.getNumForEntity("publication", "project", this.projectId, this.properties);
257
    this.fetchDatasets.getNumForEntity("dataset", "project", this.projectId, this.properties);
258
    this.fetchSoftware.getNumForEntity("software", "project", this.projectId, this.properties);
259
    this.fetchOrps.getNumForEntity("other", "project", this.projectId, this.properties);
258

  
259
    if (typeof document !== 'undefined') {
260
      this.fetchPublications.getNumForEntity("publication", "project", this.projectId, this.properties);
261
      this.fetchDatasets.getNumForEntity("dataset", "project", this.projectId, this.properties);
262
      this.fetchSoftware.getNumForEntity("software", "project", this.projectId, this.properties);
263
      this.fetchOrps.getNumForEntity("other", "project", this.projectId, this.properties);
264
    }
260 265
  }
261 266

  
262 267
  ngOnDestroy() {
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/landing-utils/metrics/metrics.component.ts
45 45
                 class="charts uk-visible-toggle" tabindex="-1" uk-slider>
46 46
              <ul class="uk-slider-items uk-child-width-1-1">
47 47
                <li #element>
48
                  <i-frame *ngIf="metrics.totalViews > 0 && viewsFrameUrl"
49
                           [width]="element.offsetWidth" [height]="200"
48
<!--                  [width]="element.offsetWidth"-->
49
                  <i-frame *ngIf="metricsClicked && metrics.totalViews > 0 && viewsFrameUrl"
50
                           [height]="200"
50 51
                           [url]=viewsFrameUrl>
51 52
                  </i-frame>
52 53
                </li>
53 54
                <li #element>
54
                  <i-frame *ngIf="metrics.totalDownloads > 0 && downloadsFrameUrl"
55
                           [width]="element.offsetWidth" [height]="200"
55
<!--                  [width]="element.offsetWidth"-->
56
                  <i-frame *ngIf="metricsClicked && metrics.totalDownloads > 0 && downloadsFrameUrl"
57
                           [height]="200"
56 58
                           [url]=downloadsFrameUrl>
57 59
                  </i-frame>
58 60
                </li>
......
164 166
  public errorCodes: ErrorCodes;
165 167
  private sub: Subscription;
166 168
  private timeouts: any[] = [];
167
  
169

  
170
  public metricsClicked: boolean = false;
171

  
168 172
  public status: number;
169 173
  public state: number = -1;
170 174
  
......
173 177
  
174 178
  ngOnInit() {
175 179
    this.errorCodes = new ErrorCodes();
176
    this.status = this.errorCodes.LOADING;
177
    this.getMetrics();
180
    if (typeof document !== 'undefined') {
181
      this.status = this.errorCodes.LOADING;
182
      this.getMetrics();
183
    }
178 184
  }
179 185
  
180 186
  ngOnDestroy() {
181
    this.sub.unsubscribe();
187
    if(this.sub) {
188
      this.sub.unsubscribe();
189
    }
182 190
  }
183 191
  
184 192
  public get total(): number {
......
225 233
  
226 234
  
227 235
  public toggle(event) {
236
    this.metricsClicked = true;
237

  
228 238
    event.stopPropagation();
229 239
    if(this.state !== -1) {
230 240
      this.timeouts.forEach(timeout => {
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/result/resultLanding.component.html
468 468
              <div class="uk-width-2-3@m uk-width-1-2">
469 469
                <img src="assets/common-assets/graph.svg" style="opacity: 0.4">
470 470
                <span class="uk-margin-small-left uk-text-baseline uk-text-muted">Powered by OpenAIRE Open Research Graph</span>
471
                <span class="uk-text-baseline uk-text-muted">
471
                <span *ngIf="indexUpdateDate" class="uk-text-baseline uk-text-muted">
472 472
                . Last update of records in OpenAIRE: {{indexUpdateDate | date: 'MMM dd, yyyy'}}
473 473
              </span>
474 474
              </div>
modules/uoa-services-library/trunk/ng-openaire-library/src/app/landingPages/result/resultLanding.component.ts
116 116
    this.route.data
117 117
      .subscribe((data: { envSpecific: EnvProperties }) => {
118 118
        this.properties = data.envSpecific;
119
        this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
120
          if (lastIndexUpdate) {
121
            this.indexUpdateDate = new Date(lastIndexUpdate);
122
          } else if (this.properties.lastIndexUpdate) {
123
            this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
124
          }
125
        });
119
        if (typeof document !== 'undefined') {
120
          this.indexInfoService.getLastIndexDate(this.properties).subscribe(lastIndexUpdate => {
121
            if (lastIndexUpdate) {
122
              this.indexUpdateDate = new Date(lastIndexUpdate);
123
            } else if (this.properties.lastIndexUpdate) {
124
              this.indexUpdateDate = new Date(this.properties.lastIndexUpdate);
125
            }
126
          });
127
        }
126 128
        //this.getDivContents();
127 129
        this.getPageContents();
128 130
        this.updateUrl(data.envSpecific.baseLink + this._router.url);
......
248 250
    this.showLoading = true;
249 251
    
250 252
    this.resultLandingInfo = null;
253

  
254
    if (typeof document !== 'undefined') {
255
      this._resultLaningService.getProvenanceActionVocabulary(this.properties).subscribe(
256
        provenanceActionVocabulary => {
257
          this.getResultLandingInfo(provenanceActionVocabulary);
258
        }, err => {
259
          this.getResultLandingInfo(null);
260
          this.handleError("Error getting provenance action vocabulary for " + this.type + " with id: " + this.id, err);
261
        }
262
      );
263
    } else {
264
      this.getResultLandingInfo(null);
265
    }
251 266
    
252
    this._resultLaningService.getProvenanceActionVocabulary(this.properties).subscribe(
253
      provenanceActionVocabulary => {
254
        this.getResultLandingInfo(provenanceActionVocabulary);
255
      }, err => {
256
        this.getResultLandingInfo(null);
257
        this.handleError("Error getting provenance action vocabulary for " + this.type + " with id: " + this.id, err);
258
      }
259
    );
260
    
261 267
  }
262 268
  
263 269
  private setActiveTab() {
......
325 331
          });
326 332
        }
327 333
        this.bioentitiesNum = bioentitiesNum;
328
        if (this.resultLandingInfo.identifiers != undefined && this.resultLandingInfo.identifiers.has('doi')) {
329
          this.doi = this.resultLandingInfo.identifiers.get('doi')[0];
330
          this.metricsService.hasAltMetrics(this.properties.altMetricsAPIURL, this.doi).subscribe(hasAltMetrics => {
331
            this.hasAltMetrics = hasAltMetrics;
332
          }, error => {
333
            this.hasAltMetrics = false;
334
          });
334
        if(typeof document !== 'undefined') {
335
          if (this.resultLandingInfo.identifiers != undefined && this.resultLandingInfo.identifiers.has('doi')) {
336
            this.doi = this.resultLandingInfo.identifiers.get('doi')[0];
337
            this.metricsService.hasAltMetrics(this.properties.altMetricsAPIURL, this.doi).subscribe(hasAltMetrics => {
338
              this.hasAltMetrics = hasAltMetrics;
339
            }, error => {
340
              this.hasAltMetrics = false;
341
            });
342
          }
335 343
        }
336 344
        this.showLoading = false;
337 345
        this.setActiveTab();
modules/uoa-services-library/trunk/ng-openaire-library/src/app/utils/iframe.component.ts
27 27
      this.style = {
28 28
        "width.px": this.width,
29 29
        "height.px": this.height
30
      }
30
      };
31
    } else if(this.height) {
32
      this.style = {
33
        "height.px": this.height
34
      };
31 35
    }
32 36
  }
33 37
}
modules/uoa-services-library/trunk/ng-openaire-library/src/app/utils/tabs/contents/search-tab.component.ts
58 58
      } else if (entityType == "other") {
59 59
        return (full ? ("other research product" + (plural ? "s" : "")) : "other");
60 60
      } else if (entityType == "result") {
61
        return (full ? ("research outcome" + (plural ? "s" : "")) : "result");
61
        return ((full ? "research outcome" : "result") + (plural ? "s" : ""));
62
      } else if (entityType == "project") {
63
        return "project" + (plural ? "s" : "");
64
      } else if (entityType == "dataprovider") {
65
        return ((full ? "content provider" : "dataprovider") + (plural ? "s" : ""));
62 66
      }
63 67
    }
64 68
}
modules/uoa-services-library/trunk/ng-openaire-library/src/app/sharedComponents/navigationBar.component.ts
50 50

  
51 51
  ngOnInit() {
52 52
    this.activeRouteEnabled = false;
53
    this.sub = this.route.queryParams.subscribe(params => {
53
    //this.sub = this.route.queryParams.subscribe(params => {
54
      //console.log("params: ",params);
54 55
      this.initialize();
55
    });
56
    //});
56 57
  }
57 58

  
58 59
  ngOnDestroy() {
59
    this.sub.unsubscribe();
60
    if(this.sub) {
61
      this.sub.unsubscribe();
62
    }
60 63
  }
61 64

  
62 65
  initialize() {
modules/uoa-services-library/trunk/ng-openaire-library/src/assets/common/custom.css
16 16

  
17 17

  
18 18
/* Your local CSS File */
19
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 300; src: url('../fonts/open-sans-v17-latin-300.eot'); src: local('Open Sans Light'), local('OpenSans-Light'), url('../fonts/open-sans-v17-latin-300.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-300.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-300.woff') format('woff'), url('../fonts/open-sans-v17-latin-300.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-300.svg#OpenSans') format('svg'); }
19
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 300; src: url('../fonts/open-sans-v17-latin-300.eot'); src: local('Open Sans Light'), local('OpenSans-Light'), url('../fonts/open-sans-v17-latin-300.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-300.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-300.woff') format('woff'), url('../fonts/open-sans-v17-latin-300.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-300.svg#OpenSans') format('svg'); font-display: swap;}
20 20

  
21
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 300; src: url('../fonts/open-sans-v17-latin-300italic.eot'); src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url('../fonts/open-sans-v17-latin-300italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-300italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-300italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-300italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-300italic.svg#OpenSans') format('svg'); }
21
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 300; src: url('../fonts/open-sans-v17-latin-300italic.eot'); src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url('../fonts/open-sans-v17-latin-300italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-300italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-300italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-300italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-300italic.svg#OpenSans') format('svg'); font-display: swap;}
22 22

  
23
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; src: url('../fonts/open-sans-v17-latin-regular.eot'); src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/open-sans-v17-latin-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-regular.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-regular.woff') format('woff'), url('../fonts/open-sans-v17-latin-regular.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-regular.svg#OpenSans') format('svg'); }
23
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; src: url('../fonts/open-sans-v17-latin-regular.eot'); src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/open-sans-v17-latin-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-regular.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-regular.woff') format('woff'), url('../fonts/open-sans-v17-latin-regular.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-regular.svg#OpenSans') format('svg'); font-display: swap;}
24 24

  
25
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 400; src: url('../fonts/open-sans-v17-latin-italic.eot'); src: local('Open Sans Italic'), local('OpenSans-Italic'), url('../fonts/open-sans-v17-latin-italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-italic.svg#OpenSans') format('svg'); }
25
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 400; src: url('../fonts/open-sans-v17-latin-italic.eot'); src: local('Open Sans Italic'), local('OpenSans-Italic'), url('../fonts/open-sans-v17-latin-italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-italic.svg#OpenSans') format('svg'); font-display: swap;}
26 26

  
27
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 600; src: url('../fonts/open-sans-v17-latin-600.eot'); src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url('../fonts/open-sans-v17-latin-600.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-600.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-600.woff') format('woff'), url('../fonts/open-sans-v17-latin-600.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-600.svg#OpenSans') format('svg'); }
27
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 600; src: url('../fonts/open-sans-v17-latin-600.eot'); src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url('../fonts/open-sans-v17-latin-600.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-600.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-600.woff') format('woff'), url('../fonts/open-sans-v17-latin-600.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-600.svg#OpenSans') format('svg'); font-display: swap;}
28 28

  
29
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 600; src: url('../fonts/open-sans-v17-latin-600italic.eot'); src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url('../fonts/open-sans-v17-latin-600italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-600italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-600italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-600italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-600italic.svg#OpenSans') format('svg'); }
29
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 600; src: url('../fonts/open-sans-v17-latin-600italic.eot'); src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url('../fonts/open-sans-v17-latin-600italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-600italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-600italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-600italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-600italic.svg#OpenSans') format('svg'); font-display: swap;}
30 30

  
31
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 700; src: url('../fonts/open-sans-v17-latin-700.eot'); src: local('Open Sans Bold'), local('OpenSans-Bold'), url('../fonts/open-sans-v17-latin-700.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-700.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-700.woff') format('woff'), url('../fonts/open-sans-v17-latin-700.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-700.svg#OpenSans') format('svg'); }
31
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 700; src: url('../fonts/open-sans-v17-latin-700.eot'); src: local('Open Sans Bold'), local('OpenSans-Bold'), url('../fonts/open-sans-v17-latin-700.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-700.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-700.woff') format('woff'), url('../fonts/open-sans-v17-latin-700.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-700.svg#OpenSans') format('svg'); font-display: swap;}
32 32

  
33
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 700; src: url('../fonts/open-sans-v17-latin-700italic.eot'); src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url('../fonts/open-sans-v17-latin-700italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-700italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-700italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-700italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-700italic.svg#OpenSans') format('svg'); }
33
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 700; src: url('../fonts/open-sans-v17-latin-700italic.eot'); src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url('../fonts/open-sans-v17-latin-700italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-700italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-700italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-700italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-700italic.svg#OpenSans') format('svg'); font-display: swap;}
34 34

  
35
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 800; src: url('../fonts/open-sans-v17-latin-800.eot'); src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url('../fonts/open-sans-v17-latin-800.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-800.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-800.woff') format('woff'), url('../fonts/open-sans-v17-latin-800.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-800.svg#OpenSans') format('svg'); }
36
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 800; src: url('../fonts/open-sans-v17-latin-800italic.eot'); src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url('../fonts/open-sans-v17-latin-800italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-800italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-800italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-800italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-800italic.svg#OpenSans') format('svg'); }
35
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 800; src: url('../fonts/open-sans-v17-latin-800.eot'); src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url('../fonts/open-sans-v17-latin-800.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-800.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-800.woff') format('woff'), url('../fonts/open-sans-v17-latin-800.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-800.svg#OpenSans') format('svg'); font-display: swap;}
36
@font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 800; src: url('../fonts/open-sans-v17-latin-800italic.eot'); src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url('../fonts/open-sans-v17-latin-800italic.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-v17-latin-800italic.woff2') format('woff2'), url('../fonts/open-sans-v17-latin-800italic.woff') format('woff'), url('../fonts/open-sans-v17-latin-800italic.ttf') format('truetype'), url('../fonts/open-sans-v17-latin-800italic.svg#OpenSans') format('svg'); font-display: swap;}
37 37

  
38
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 100; src: url('../fonts/heebo-v5-latin-100.eot'); src: local('Heebo Thin'), local('Heebo-Thin'), url('../fonts/heebo-v5-latin-100.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-100.woff2') format('woff2'), url('../fonts/heebo-v5-latin-100.woff') format('woff'), url('../fonts/heebo-v5-latin-100.ttf') format('truetype'), url('../fonts/heebo-v5-latin-100.svg#Heebo') format('svg'); }
38
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 100; src: url('../fonts/heebo-v5-latin-100.eot'); src: local('Heebo Thin'), local('Heebo-Thin'), url('../fonts/heebo-v5-latin-100.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-100.woff2') format('woff2'), url('../fonts/heebo-v5-latin-100.woff') format('woff'), url('../fonts/heebo-v5-latin-100.ttf') format('truetype'), url('../fonts/heebo-v5-latin-100.svg#Heebo') format('svg'); font-display: swap;}
39 39

  
40
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 300; src: url('../fonts/heebo-v5-latin-300.eot'); src: local('Heebo Light'), local('Heebo-Light'), url('../fonts/heebo-v5-latin-300.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-300.woff2') format('woff2'), url('../fonts/heebo-v5-latin-300.woff') format('woff'), url('../fonts/heebo-v5-latin-300.ttf') format('truetype'), url('../fonts/heebo-v5-latin-300.svg#Heebo') format('svg'); }
40
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 300; src: url('../fonts/heebo-v5-latin-300.eot'); src: local('Heebo Light'), local('Heebo-Light'), url('../fonts/heebo-v5-latin-300.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-300.woff2') format('woff2'), url('../fonts/heebo-v5-latin-300.woff') format('woff'), url('../fonts/heebo-v5-latin-300.ttf') format('truetype'), url('../fonts/heebo-v5-latin-300.svg#Heebo') format('svg'); font-display: swap;}
41 41

  
42
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 400; src: url('../fonts/heebo-v5-latin-regular.eot'); src: local('Heebo'), local('Heebo-Regular'), url('../fonts/heebo-v5-latin-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-regular.woff2') format('woff2'), url('../fonts/heebo-v5-latin-regular.woff') format('woff'), url('../fonts/heebo-v5-latin-regular.ttf') format('truetype'), url('../fonts/heebo-v5-latin-regular.svg#Heebo') format('svg'); }
42
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 400; src: url('../fonts/heebo-v5-latin-regular.eot'); src: local('Heebo'), local('Heebo-Regular'), url('../fonts/heebo-v5-latin-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-regular.woff2') format('woff2'), url('../fonts/heebo-v5-latin-regular.woff') format('woff'), url('../fonts/heebo-v5-latin-regular.ttf') format('truetype'), url('../fonts/heebo-v5-latin-regular.svg#Heebo') format('svg'); font-display: swap;}
43 43

  
44
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 500; src: url('../fonts/heebo-v5-latin-500.eot'); src: local('Heebo Medium'), local('Heebo-Medium'), url('../fonts/heebo-v5-latin-500.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-500.woff2') format('woff2'), url('../fonts/heebo-v5-latin-500.woff') format('woff'), url('../fonts/heebo-v5-latin-500.ttf') format('truetype'), url('../fonts/heebo-v5-latin-500.svg#Heebo') format('svg'); }
44
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 500; src: url('../fonts/heebo-v5-latin-500.eot'); src: local('Heebo Medium'), local('Heebo-Medium'), url('../fonts/heebo-v5-latin-500.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-500.woff2') format('woff2'), url('../fonts/heebo-v5-latin-500.woff') format('woff'), url('../fonts/heebo-v5-latin-500.ttf') format('truetype'), url('../fonts/heebo-v5-latin-500.svg#Heebo') format('svg'); font-display: swap;}
45 45

  
46
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 700; src: url('../fonts/heebo-v5-latin-700.eot'); src: local('Heebo Bold'), local('Heebo-Bold'), url('../fonts/heebo-v5-latin-700.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-700.woff2') format('woff2'), url('../fonts/heebo-v5-latin-700.woff') format('woff'), url('../fonts/heebo-v5-latin-700.ttf') format('truetype'), url('../fonts/heebo-v5-latin-700.svg#Heebo') format('svg'); }
46
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 700; src: url('../fonts/heebo-v5-latin-700.eot'); src: local('Heebo Bold'), local('Heebo-Bold'), url('../fonts/heebo-v5-latin-700.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-700.woff2') format('woff2'), url('../fonts/heebo-v5-latin-700.woff') format('woff'), url('../fonts/heebo-v5-latin-700.ttf') format('truetype'), url('../fonts/heebo-v5-latin-700.svg#Heebo') format('svg'); font-display: swap;}
47 47

  
48
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 800; src: url('../fonts/heebo-v5-latin-800.eot'); src: local('Heebo ExtraBold'), local('Heebo-ExtraBold'), url('../fonts/heebo-v5-latin-800.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-800.woff2') format('woff2'), url('../fonts/heebo-v5-latin-800.woff') format('woff'), url('../fonts/heebo-v5-latin-800.ttf') format('truetype'), url('../fonts/heebo-v5-latin-800.svg#Heebo') format('svg'); }
48
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 800; src: url('../fonts/heebo-v5-latin-800.eot'); src: local('Heebo ExtraBold'), local('Heebo-ExtraBold'), url('../fonts/heebo-v5-latin-800.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-800.woff2') format('woff2'), url('../fonts/heebo-v5-latin-800.woff') format('woff'), url('../fonts/heebo-v5-latin-800.ttf') format('truetype'), url('../fonts/heebo-v5-latin-800.svg#Heebo') format('svg'); font-display: swap;}
49 49

  
50
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 900; src: url('../fonts/heebo-v5-latin-900.eot'); src: local('Heebo Black'), local('Heebo-Black'), url('../fonts/heebo-v5-latin-900.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-900.woff2') format('woff2'), url('../fonts/heebo-v5-latin-900.woff') format('woff'), url('../fonts/heebo-v5-latin-900.ttf') format('truetype'), url('../fonts/heebo-v5-latin-900.svg#Heebo') format('svg'); }
50
@font-face { font-family: 'Heebo'; font-style: normal; font-weight: 900; src: url('../fonts/heebo-v5-latin-900.eot'); src: local('Heebo Black'), local('Heebo-Black'), url('../fonts/heebo-v5-latin-900.eot?#iefix') format('embedded-opentype'), url('../fonts/heebo-v5-latin-900.woff2') format('woff2'), url('../fonts/heebo-v5-latin-900.woff') format('woff'), url('../fonts/heebo-v5-latin-900.ttf') format('truetype'), url('../fonts/heebo-v5-latin-900.svg#Heebo') format('svg'); font-display: swap;}
51 51

  
52
@font-face { font-family: 'Sura'; font-style: normal; font-weight: 400; src: url('../fonts/sura-v4-latin-regular.eot'); src: local('Sura'), local('Sura-Regular'), url('../fonts/sura-v4-latin-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/sura-v4-latin-regular.woff2') format('woff2'), url('../fonts/sura-v4-latin-regular.woff') format('woff'), url('../fonts/sura-v4-latin-regular.ttf') format('truetype'), url('../fonts/sura-v4-latin-regular.svg#Sura') format('svg'); }
52
@font-face { font-family: 'Sura'; font-style: normal; font-weight: 400; src: url('../fonts/sura-v4-latin-regular.eot'); src: local('Sura'), local('Sura-Regular'), url('../fonts/sura-v4-latin-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/sura-v4-latin-regular.woff2') format('woff2'), url('../fonts/sura-v4-latin-regular.woff') format('woff'), url('../fonts/sura-v4-latin-regular.ttf') format('truetype'), url('../fonts/sura-v4-latin-regular.svg#Sura') format('svg'); font-display: swap;}
53 53

  
54
@font-face { font-family: 'Sura'; font-style: normal; font-weight: 700; src: url('../fonts/sura-v4-latin-700.eot'); src: local('Sura Bold'), local('Sura-Bold'), url('../fonts/sura-v4-latin-700.eot?#iefix') format('embedded-opentype'), url('../fonts/sura-v4-latin-700.woff2') format('woff2'), url('../fonts/sura-v4-latin-700.woff') format('woff'), url('../fonts/sura-v4-latin-700.ttf') format('truetype'), url('../fonts/sura-v4-latin-700.svg#Sura') format('svg'); }
54
@font-face { font-family: 'Sura'; font-style: normal; font-weight: 700; src: url('../fonts/sura-v4-latin-700.eot'); src: local('Sura Bold'), local('Sura-Bold'), url('../fonts/sura-v4-latin-700.eot?#iefix') format('embedded-opentype'), url('../fonts/sura-v4-latin-700.woff2') format('woff2'), url('../fonts/sura-v4-latin-700.woff') format('woff'), url('../fonts/sura-v4-latin-700.ttf') format('truetype'), url('../fonts/sura-v4-latin-700.svg#Sura') format('svg'); font-display: swap;}
55 55

  
56 56

  
57 57
/* yard */

Also available in: Unified diff