Data update
@ -6,21 +6,21 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="card" transition:fade id={'case-' + cardData.attribution_id}>
|
<div class="card" transition:fade id={'case-' + cardData.attribution_id}>
|
||||||
<!--div class="card-header">
|
<div class="card-header">
|
||||||
<div class="card-header-title">
|
<div class="card-header-title">
|
||||||
<h2 class="is-size-3">Don't cases have titles?</h2>
|
<h2 class="is-size-3">{cardData.Short_Title}</h2>
|
||||||
</div>
|
</div>
|
||||||
</div-->
|
</div>
|
||||||
<div class="card-image">
|
<div class="card-image">
|
||||||
<figure class="image">
|
<figure class="image">
|
||||||
<img src={`/images/${cardData.attribution_id}.jpg`} alt={cardData.image_credit} />
|
<img src={`/images/${cardData.Attribution_ID}.png`} />
|
||||||
</figure>
|
</figure>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p>{utcFormat('%B %d, %Y')(cardData.attribution_date)}, {cardData.attribution_id}</p>
|
<p>{utcFormat('%B %d, %Y')(new Date(cardData.Attribution_Date))}</p>
|
||||||
<p><a href={cardData.attribution_url} target='_blank'>{cardData.source}</a></p>
|
<p><a href={cardData.Attribution_URL} target='_blank'>{cardData.source}</a></p>
|
||||||
<p>{cardData.short_description}</p>
|
<p>{cardData.Short_Description}</p>
|
||||||
<p>
|
<p>
|
||||||
<button class="button is-info is-small" on:click={sourceFilter.selectOne(cardData.source)}
|
<button class="button is-info is-small" on:click={sourceFilter.selectOne(cardData.source)}
|
||||||
>{cardData.source}</button
|
>{cardData.source}</button
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
<table class="table is-striped is-fullwidth">
|
<table class="table is-striped is-fullwidth">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td>Title</td>
|
||||||
<td>Description</td>
|
<td>Description</td>
|
||||||
<td>Attribution date</td>
|
<td>Attribution date</td>
|
||||||
<td>Source</td>
|
<td>Source</td>
|
||||||
@ -18,11 +19,14 @@
|
|||||||
{#each cases as attrCase}
|
{#each cases as attrCase}
|
||||||
{#if attrCase.show}
|
{#if attrCase.show}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{attrCase.short_description}</td>
|
<td>{attrCase.Short_Title}</td>
|
||||||
<td>{utcFormat('%B %d, %Y')(attrCase.attribution_date)}</td>
|
<td>{attrCase.Short_Description}</td>
|
||||||
|
<td>{utcFormat('%B %d, %Y')(new Date(attrCase.Attribution_Date))}</td>
|
||||||
<td>{attrCase.source}</td>
|
<td>{attrCase.source}</td>
|
||||||
<td>{attrCase.source_category}</td>
|
<td>{attrCase.Source_Category}</td>
|
||||||
<td>{attrCase.actor_nation}</td>
|
<td>{#each attrCase.actor_nation as nation, i}
|
||||||
|
{attrCase.actor_nation.length != (i + 1) ? nation + ', ' : nation}
|
||||||
|
{/each}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
|
|||||||
@ -16,8 +16,6 @@
|
|||||||
} from '../../stores/filters';
|
} from '../../stores/filters';
|
||||||
|
|
||||||
export let cases;
|
export let cases;
|
||||||
export let isMobile;
|
|
||||||
$: console.log(isMobile)
|
|
||||||
|
|
||||||
function handleButtonClick() {
|
function handleButtonClick() {
|
||||||
selectAllFilters();
|
selectAllFilters();
|
||||||
|
|||||||
@ -33,38 +33,41 @@
|
|||||||
const response = await csv(`https://fiat-2024-processed-data.s3.us-west-2.amazonaws.com/Demo_Attribution_Data.csv`);
|
const response = await csv(`https://fiat-2024-processed-data.s3.us-west-2.amazonaws.com/Demo_Attribution_Data.csv`);
|
||||||
//const response = await csv(`${base}/Demo_Attribution_Data.csv`);
|
//const response = await csv(`${base}/Demo_Attribution_Data.csv`);
|
||||||
cases = response;
|
cases = response;
|
||||||
|
cases = cases.filter(d => d.Attribution_ID != '')
|
||||||
cases.forEach(d => {
|
cases.forEach(d => {
|
||||||
d.platform = splitString(d.platform)
|
d.platform = splitString(d.Platforms)
|
||||||
d.actor_nation = splitString(d.actor_nation)
|
d.actor_nation = splitString(d.Actor_Nation)
|
||||||
d.methods = splitString(d.methods)
|
d.source = splitString(d.Source)
|
||||||
|
d.methods = splitString(d.Methods)
|
||||||
d.attribution_total_score = +d.attribution_total_score
|
d.attribution_total_score = +d.attribution_total_score
|
||||||
d.attribution_date = new Date(d.attribution_date)
|
d.attribution_date = new Date(d.Attribution_Date)
|
||||||
d.search = [d.short_description, d.platform, d.methods, d.source, d.source_nation, d.source_category].flat().join('__').toLowerCase()
|
d.search = [d.Short_Description, d.Short_Title, d.platform, d.methods, d.Source, d.Source_Nation, d.Source_cCtegory].flat().join('__').toLowerCase()
|
||||||
|
|
||||||
d.show = false
|
d.show = false
|
||||||
})
|
})
|
||||||
|
|
||||||
platformFilter.init(cases, 'platform');
|
platformFilter.init(cases, 'platform');
|
||||||
actorNationFilter.init(cases, 'actor_nation');
|
actorNationFilter.init(cases, 'actor_nation');
|
||||||
sourceFilter.init(cases, 'source')
|
sourceFilter.init(cases, 'source')
|
||||||
sourceCategoryFilter.init(cases, 'source_category')
|
sourceCategoryFilter.init(cases, 'Source_Category')
|
||||||
methodFilter.init(cases, 'methods')
|
methodFilter.init(cases, 'methods')
|
||||||
$attributionScoreFilter = attributionScoreDef;
|
$attributionScoreFilter = attributionScoreDef;
|
||||||
|
|
||||||
//console.log(cases.map(d => d.campaign))
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$: if (cases) {
|
$: if (cases) {
|
||||||
cases = cases.map(d => ({
|
cases = cases.map(d => ({
|
||||||
...d,
|
...d,
|
||||||
show: haveOverlap($actorNationFilter, d.actor_nation)
|
show: haveOverlap($actorNationFilter, d.Actor_Nation)
|
||||||
&& haveOverlap($platformFilter, d.platform)
|
&& haveOverlap($platformFilter, d.platform)
|
||||||
&& haveOverlap($sourceFilter, d.source)
|
&& haveOverlap($sourceFilter, d.source)
|
||||||
&& haveOverlap($sourceCategoryFilter, d.source_category)
|
&& haveOverlap($sourceCategoryFilter, d.Source_Category)
|
||||||
&& haveOverlap($methodFilter, d.methods)
|
&& haveOverlap($methodFilter, d.methods)
|
||||||
&& withinRange($attributionScoreFilter, d.attribution_total_score)
|
&& withinRange($attributionScoreFilter, d.attribution_total_score)
|
||||||
&& includesTextSearch($textSearchFilter, d.search)
|
&& includesTextSearch($textSearchFilter, d.search)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
$: console.log(cases)
|
||||||
|
|
||||||
let width = 1200
|
let width = 1200
|
||||||
let margin = {
|
let margin = {
|
||||||
|
|||||||
Двоичные данные
static/images/1.png
Обычный файл
|
После Ширина: | Высота: | Размер: 1.7 MiB |
Двоичные данные
static/images/11.png
Обычный файл
|
После Ширина: | Высота: | Размер: 181 KiB |
Двоичные данные
static/images/12.png
Обычный файл
|
После Ширина: | Высота: | Размер: 305 KiB |
Двоичные данные
static/images/15.png
Обычный файл
|
После Ширина: | Высота: | Размер: 1.3 MiB |
Двоичные данные
static/images/16.png
Обычный файл
|
После Ширина: | Высота: | Размер: 351 KiB |
Двоичные данные
static/images/17.png
Обычный файл
|
После Ширина: | Высота: | Размер: 388 KiB |
Двоичные данные
static/images/18.png
Обычный файл
|
После Ширина: | Высота: | Размер: 306 KiB |
Двоичные данные
static/images/19.png
Обычный файл
|
После Ширина: | Высота: | Размер: 300 KiB |
Двоичные данные
static/images/2.png
Обычный файл
|
После Ширина: | Высота: | Размер: 302 KiB |
Двоичные данные
static/images/20.png
Обычный файл
|
После Ширина: | Высота: | Размер: 308 KiB |
Двоичные данные
static/images/21.png
Обычный файл
|
После Ширина: | Высота: | Размер: 314 KiB |
Двоичные данные
static/images/22.png
Обычный файл
|
После Ширина: | Высота: | Размер: 425 KiB |
Двоичные данные
static/images/23.png
Обычный файл
|
После Ширина: | Высота: | Размер: 2.3 MiB |
Двоичные данные
static/images/24.png
Обычный файл
|
После Ширина: | Высота: | Размер: 284 KiB |
Двоичные данные
static/images/25.png
Обычный файл
|
После Ширина: | Высота: | Размер: 175 KiB |
Двоичные данные
static/images/26.png
Обычный файл
|
После Ширина: | Высота: | Размер: 527 KiB |
Двоичные данные
static/images/27.png
Обычный файл
|
После Ширина: | Высота: | Размер: 843 KiB |
Двоичные данные
static/images/3.png
Обычный файл
|
После Ширина: | Высота: | Размер: 644 KiB |
Двоичные данные
static/images/4.png
Обычный файл
|
После Ширина: | Высота: | Размер: 1.3 MiB |
Двоичные данные
static/images/5.png
Обычный файл
|
После Ширина: | Высота: | Размер: 177 KiB |
Двоичные данные
static/images/6.png
Обычный файл
|
После Ширина: | Высота: | Размер: 1.2 MiB |
Двоичные данные
static/images/7.png
Обычный файл
|
После Ширина: | Высота: | Размер: 26 KiB |
Двоичные данные
static/images/8.png
Обычный файл
|
После Ширина: | Высота: | Размер: 3.2 MiB |
Двоичные данные
static/images/9.png
Обычный файл
|
После Ширина: | Высота: | Размер: 1.6 MiB |