summaryrefslogtreecommitdiffhomepage
path: root/resources/pug/finals/publications.pug
blob: 8b7e38067208e59281561881fd5ab93f6e153870 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
extends /layout.pug

block titleContainer

block content
	h1 Time to publication

	p.
		Inspired by #[a(href='https://mastodon.social/@fussballinguist/111288814708880725', target='_blank') Simon Meier-Vieracker],
		I track how long the peer review and production process takes for each of my publications.
		Journal articles are blue; conference proceedings orange; book chapters green; book reviews purple.
		Light color indicates time waiting for reviews; dark color typesetting; diamonds date of publication.

	#chart-publications

	script(src='https://code.highcharts.com/gantt/highcharts-gantt.js')
	script
		.
			// from fig. 19 on https://sronpersonalpages.nl/~pault/#sec:sequential
			const colors = {
				bookchapter: {
					review: '#90C987',
					editing: '#4EB265',
					published: '#4EB265'
				},
				bookreview: {
					review: '#AE76A3',
					editing: '#882E72',
					published: '#882E72'
				},
				confproceedings: {
					review: '#F6C141',
					editing: '#F1932D',
					published: '#F1932D'
				},
				journalarticle: {
					review: '#6195CF',
					editing: '#1965B0',
					published: '#1965B0'
				},
			};

			let shorttitles = [];
			let series = [];

			function entry(type_, shorttitle, title, review_intervals, editing_intervals = [], published = {}) {
				shorttitles.push(shorttitle);

				let data = [];
				for (let interval of review_intervals)
					data.push({
						start: Date.parse(interval[0]),
						end: Date.parse(interval[1]) || Date.now(),
						name: 'Review',
						color: colors[type_]['review'],
						y: shorttitles.length - 1
					});

				for (let interval of editing_intervals)
					data.push({
						start: Date.parse(interval[0]),
						end: Date.parse(interval[1]) || Date.now(),
						name: 'Copy editing',
						color: colors[type_]['editing'],
						y: shorttitles.length - 1
					});

				for (let way of Object.keys(published))
					data.push({
						start: Date.parse(published[way]),
						milestone: true,
						name: 'Published (' + way + ')',
						color: colors[type_]['published'],
						y: shorttitles.length - 1
					});

				series.push({name: title, data: data, borderRadius: 0});
			}

		.
			entry('journalarticle', 'Orientalia (2018)', 'A case study of reciprocal middles in Biblical Hebrew: The niphal of לחם',
				[['2017-11-8', '2017-11-28'], ['2017-12-21', '2018-1-4']], [['2018-1-9', '2018-1-24']], {print: '2018-12-1'})
			entry('journalarticle', 'JSS (2020)', 'Prepositions and the grammaticalization of Ancient Hebrew bipartite reciprocal markers (Journal of Semitic Studies)',
				[['2018-3-9', '2018-5-1'], ['2018-5-8', '2018-5-21']], [['2018-5-21', '2019-12-16']], {print: '2020-2-17'})
			entry('journalarticle', 'JSOT (2020)', '“When dust was poured out”: Creation in Job 38.36–38 (Journal for the Study of the Old Testament)',
				[['2018-8-11', '2018-9-26']], [['2018-9-27', '2019-7-31']], {online: '2019-12-27', print: '2020-3-12'})
			entry('confproceedings', 'IFL (2019)', 'With John van Groningen and Rinus Plasmeijer: Lazy interworking of compiled and interpreted code for sandboxing and distributed systems (Implementation & Application of Functional Languages)',
				[['2019-6-15', '2019-8-1'], ['2019-11-30', '2020-2-11']], [['2020-3-3', '2021-2-26']], {online: '2021-7-15'})
			entry('bookreview', 'BiOr (2020)', 'Review of: Bar-Asher Siegal (2020), The NP-strategy for expressing reciprocity: Typology, history, syntax and semantics',
				[], [['2020-4-22', '2020-7-3']], {print: '2020-12-24'})
			entry('bookreview', 'LINGUIST (2021)', 'Review of: Winters (2020), Historical linguistics: A cognitive grammar introduction',
				[], [['2020-10-17', '2021-4-23']], {online: '2021-04-23'})
			entry('bookchapter', 'FS Van Wolde (2022)', 'Voice, discourse prominence, and aspect: The niphal and passive qal of <i>yālad</i>',
				[['2021-1-4', '2021-2-19'], ['2021-3-11', '2022-9-15']], [['2022-9-15', '2022-9-30']], {print: '2022-11-7'})
			entry('bookreview', 'BiOr (2021)', 'Review of: Bekins (2020), Inscriptions from the world of the Bible: A reader and introduction to Old Northwest Semitic',
				[], [['2021-7-7', '2021-11-29']], {print: '2022-4-25'})
			entry('journalarticle', 'JHS (2022)', '<i>Lip̄nē</i> ‘in the face of’: A Locative preposition with a threatening connotation (Journal of Hebrew Scriptures)',
				[['2021-7-8', '2021-9-16'], ['2021-10-4', '2021-12-23']], [['2021-12-23', '2022-9-12']], {online: '2022-9-12'})
			entry('journalarticle', 'S&P (2024)', 'With Johan Rooryck: Formalizing spatial-causal polysemy of Agent prepositions (Semantics & Pragmatics)',
				[['2022-7-4', '2022-9-12'], ['2023-3-6', '2023-6-5'], ['2023-7-30', '2023-10-20'], ['2023-11-10', '2023-12-20'], ['2024-1-8', '2024-1-14'], ['2024-1-15', '2024-3-3']], [['2024-3-4', '2024-5-27']], {online: '2024-3-4', print: '2024-6-4'})
			entry('journalarticle', 'Linguistics (2023)', 'With Johan Rooryck: The interpretation of [+distal] in demonstratives and complementizers',
				[['2022-10-24', '2023-2-23'], ['2023-3-17', '2023-6-9']], [['2023-6-13', '2023-7-18']], {online: '2023-8-5', print: '2023-9-26'})
			entry('journalarticle', 'BJALL (2024)', 'With Martijn Beukenhorst: Semantic properties of prepositions: The distinction between causal <i>min</i> ‘from’ and <i>bə</i> ‘in’ (Brill\'s Journal of Afroasiatic Languages & Linguistics)',
				[['2022-12-29', '2023-5-4'], ['2023-8-22', '2023-9-28'], ['2023-11-2', '2023-11-23'], ['2024-1-5', '2024-1-12']], [['2024-1-22', '2024-3-19']], {online: '2024-4-4', print: '2024-12-16'})
			entry('journalarticle', 'NLLT (reject)', 'Complementation and Common Ground: Discursive effects in Biblical Hebrew',
				[['2023-9-22', '2024-6-30'], ['2024-12-20', '2026-1-11']])
			entry('journalarticle', 'HIPHIL Novum (2024)', 'Large Language Models and Biblical Hebrew: Limitations, pitfalls, opportunities',
				[['2024-3-18', '2024-5-4'], ['2024-5-6', '2024-5-7']], [['2024-5-7', '2024-6-4']], {online: '2024-6-4'})
			entry('journalarticle', 'LiTy (2025)', 'Iconic features in nominal reduplication',
				[['2024-5-1', '2024-5-18'], ['2024-9-13', '2024-12-1'], ['2024-12-28', '2025-5-13'], ['2025-7-16', '2025-7-28']], [['2025-7-28', '2025-8-30'], ['2025-9-5', '2025-9-29'], ['2025-10-01', '2025-11-17']], {online: '2025-11-17'})
			entry('bookreview', 'BiOr (2024/2026)', 'Review of: Park (2023), Focus construction with <i>kî ʾim</i> in Biblical Hebrew',
				[], [['2024-7-28', '2025-6-6']], {print: '2026-1-13'})
			entry('bookreview', 'LINGUIST (2025)', 'Review of: Aikhenvald (2025), A guide to gender and classifiers',
				[], [['2025-10-16', '2025-10-28']], {online: '2025-10-28'})

		.
			Highcharts.ganttChart('chart-publications', {
				credits: {enabled: false},
				time: {useUTC: false},
				chart: {
					spacingLeft: 0,
					spacingRight: 0,
					zooming: {type: 'x'},
				},
				scrollbar: {
					enabled: true,
					showFull: false,
				},
				xAxis: [{
					max: Date.now(),
					grid: {enabled: false},
					labels: {align: 'left', distance: 0, padding: 0},
					tickInterval: 1000 * 60 * 60 * 24 * 365,
					tickLength: 0,
					gridLineWidth: 1,
				}],
				yAxis: {
					title: null,
					grid: {enabled: false},
					type: 'category',
					categories: shorttitles,
					staticScale: 25,
				},
				tooltip: {
					pointFormatter: function () {
						const start = this.series.chart.time.dateFormat('%Y-%m-%d', this.start);

						if (!this.end) { /* milestone */
							return `<b>${this.name}</b> on ${start}`;
						}

						const days = Math.floor((this.end - this.start) / 1000 / 60 / 60 / 24);
						const end = this.series.chart.time.dateFormat('%Y-%m-%d', this.end);
						return `In <b>${this.name}</b> for ${days} day(s); ${start}–${end}`;
					},
				},
				series,
			});