Completed
Push — master ( 2623ee...a82f7c )
by Jeroen De
06:13 queued 04:44
created

TimelinePresenter::getTemplateName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace ModernTimeline;
6
7
use ModernTimeline\ResultFacade\SimpleQueryResult;
8
use ModernTimeline\ResultFacade\ResultPresenter;
9
use ModernTimeline\SlidePresenter\SimpleSlidePresenter;
10
use ModernTimeline\SlidePresenter\SlidePresenter;
11
use ModernTimeline\SlidePresenter\TemplateSlidePresenter;
12
use SMWOutputs;
13
14
class TimelinePresenter implements ResultPresenter {
15
16
	private $id;
17
18 4
	public function __construct() {
19 4
		$this->id = $this->newTimelineId();
20 4
	}
21
22 4
	private function newTimelineId(): string {
23 4
		static $timelineNumber = 0;
24 4
		return 'modern_timeline_' . ++$timelineNumber;
25
	}
26
27 4
	public function presentResult( SimpleQueryResult $result ): string {
28 4
		SMWOutputs::requireResource( 'ext.modern.timeline' );
29
30 4
		SMWOutputs::requireHeadItem(
31 4
			$this->id,
32 4
			$this->createJs( $this->createJsonString( $result ) )
33
		);
34
35 4
		return $this->createDiv( $result->getParameters() );
36
	}
37
38 4
	private function createJsonString( SimpleQueryResult $result ) {
39 4
		$parameters = $result->getParameters();
40
41 4
		$preJson = $this->newJsonBuilder( $parameters['template'] )->eventsToTimelineJson(
42 4
			( new EventExtractor() )->extractEvents( $result->getSubjects() )
43
		);
44
45 4
		$preJson['options'] = TimelineOptions::processedParamsToJson( $parameters );
46
47 4
		return json_encode( $preJson );
48
	}
49
50 4
	private function newJsonBuilder( string $templateName ): JsonBuilder {
51 4
		return new JsonBuilder(
52 4
			$this->getSlidePresenter( $templateName )
53
		);
54
	}
55
56 4
	private function getSlidePresenter( string $templateName ): SlidePresenter {
57 4
		if ( $templateName === '' ) {
58 3
			return new SimpleSlidePresenter();
59
		}
60
61 1
		return new TemplateSlidePresenter( $templateName );
62
	}
63
64 4
	private function createJs( string $json ): string {
65 4
		return \Html::rawElement(
66 4
			'script',
67
			[
68 4
				'type' => 'text/javascript'
69
			],
70
			"if (!window.hasOwnProperty('modernTimeline')) {window.modernTimeline = {};}"
71 4
			. "\n window.modernTimeline.{$this->id} = $json;"
72
		);
73
	}
74
75 4
	private function createDiv( array $parameters ): string {
76 4
		$width = $parameters[TimelineOptions::PARAM_WIDTH];
77 4
		$height = $parameters[TimelineOptions::PARAM_HEIGHT];
78
79 4
		return \Html::rawElement(
80 4
			'div',
81
			[
82 4
				'id' => $this->id,
83 4
				'style' => "width: $width; height: $height",
84 4
				'class' => 'modern_timeline_outer_div'
85
			],
86 4
			\Html::element(
87 4
				'div',
88
				[
89 4
					'class' => 'modern_timeline_inner_div',
90
					'style' => 'width: 100%; height: calc(100% - 10px); background-color: rgba(0, 0, 0, 0.05); margin-top: 5px; margin-bottom: 5px;'
91
				]
92
			)
93
		);
94
	}
95
96
}
97