-
Notifications
You must be signed in to change notification settings - Fork 1
/
knp2csv.html
338 lines (311 loc) · 52.3 KB
/
knp2csv.html
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
<style>
#page-wrap {
width: 900px;
margin: 0 auto;
}
a.btn {
background-color: #e3e3e3;
border-color: rgba(0,0,0,0.5);
display: inline-block;
color: #000;
text-transform: uppercase;
letter-spacing: 2px;
font-size: 12px;
padding: 10px 30px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border: 1px solid rgba(0,0,0,0.3);
border-bottom-width: 3px;
}
a.btn:active {
background-color: #CCC;
border-color: rgba(0,0,0,0.9);
}
/* blue button */
div.text,
#content,
li[lang=ru] {
font: Verdana, Tahoma;
background: url('hatch.png') /* wtf? */; color: #CACACA !important;
width: 40%;
}
pre {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
/* Internet Explorer 5.5+ */
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
body:first-of-type pre::after {
content: 'highlight: ' attr(class);
}
}
@font-face {
font-family: Chunkfive; src: url('Chunkfive.otf');
}
div.text,
#content,
li[lang=ru] {
font: Tahoma, Chunkfive, sans-serif;
background: url('hatch.png') /* wtf? */; color: #F0F0F0 !important;
font-size:14px!important;
width: 100%;
}
*.hljs-comment,.hljs-quote{color:#969896}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#d54e53}.hljs-built_in,.hljs-builtin-name,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#e78c45}.hljs-attribute{color:#e7c547}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#b9ca4a}.hljs-section,.hljs-title{color:#7aa6da}.hljs-keyword,.hljs-selector-tag{color:#c397d8}.hljs{display:block;overflow-x:auto;background:#000;color:#eaeaea;padding:3em}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:100}
.clearfix:after,.container-fluid:after,.container:after,.row-fluid:after,.row:after{clear:both}.lead,dl{margin-bottom:20px}hr,img{border:0}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}a:active,a:hover{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{max-width:100%;vertical-align:middle;-ms-interpolation-mode:bicubic}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:5em;border:5em}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}.clearfix:after,.clearfix:before{display:table;content:""}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}body,p{font-size:13px;line-height:20px}body,h1,h2,h3,h4,h5,h6,p{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.lead,h3{line-height:30px}.input-block-level{display:block;width:100%;min-height:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid:after,.row-fluid:before,.row:after,.row:before{display:table;content:""}.container,.navbar-fixed-bottom .container,.navbar-fixed-top .container,.span12{width:940px}body{margin:0;color:#333;background-color:#f8f8f8}.navbar .brand,.row{margin-left:-20px}a:hover{text-decoration:underline}[class*=span]{float:left;margin-left:20px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%}.row-fluid [class*=span]{display:block;width:100%;min-height:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574%}.container-fluid:after,.container-fluid:before,.container:after,.container:before{display:table;content:""}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .span12{width:99.99999998999999%}.row-fluid .span11{width:91.489361693%}.row-fluid .span10{width:82.97872339599999%}.row-fluid .span9{width:74.468085099%}.row-fluid .span8{width:65.95744680199999%}.row-fluid .span7{width:57.446808505%}.row-fluid .span6{width:48.93617020799999%}.row-fluid .span5{width:40.425531911%}.row-fluid .span4{width:31.914893614%}.row-fluid .span3{width:23.404255317%}.row-fluid .span2{width:14.89361702%}.row-fluid .span1{width:6.382978723%}.container{margin-right:auto;margin-left:auto}.container-fluid{padding-right:20px;padding-left:20px}address,blockquote small{display:block}p{margin:0 0 10px}p small{font-size:11px;color:#999}.lead{font-size:20px;font-weight:200}blockquote p,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}h1,h2{line-height:40px}h1,h2,h3,h4,h5,h6{margin:0;font-weight:700;color:inherit;text-rendering:optimizelegibility}.muted,blockquote small,h6{color:#999}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;color:#999}dt,strong{font-weight:700}h1 small,h2 small{font-size:18px}h2{font-size:24px}h3{font-size:18px}h3 small,h4{font-size:14px}h4,h5,h6{line-height:20px}h4 small,h5{font-size:12px}h6{font-size:11px;text-transform:uppercase}.page-header h1{line-height:1}address,blockquote small,dd,dt,li{line-height:20px}ol,ul{padding:0;margin:0 0 10px 25px}ul{list-style:disc}ol{list-style:decimal}ol.unstyled,ul.unstyled{margin-left:0;list-style:none}dt{line-height:19px}dd{margin-left:10px}.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filter:after,.navbar-form:after,.social-buttons:after,.thumbnails:after{clear:both}.dl-horizontal dd{margin-left:130px}hr{margin:20px 0;border-top:1px solid #999;border-bottom:1px solid #fff}em{font-style:italic}address,cite{font-style:normal}abbr[title]{cursor:help;border-bottom:1px dotted #ddd}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:16px;font-weight:300;line-height:25px}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote:after,blockquote:before,q:after,q:before{content:""}address{margin-bottom:20px}small{font-size:100%}@font-face{font-family:FontAwesome;src:url(../font/fontawesome-webfont.eot);src:url(../font/fontawesome-webfont.eot?#iefix) format('embedded-opentype'),url(../font/fontawesome-webfont.woff) format('woff'),url(../font/fontawesome-webfont.ttf) format('truetype'),url(../font/fontawesome-webfont.svgz#FontAwesomeRegular) format('svg'),url(../font/fontawesome-webfont.svg#FontAwesomeRegular) format('svg');font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{display:inline;width:auto;height:auto;line-height:inherit;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat}li[class*=" icon-"],li[class^=icon-]{display:block;margin-left:0;list-style-type:none}[class*=" icon-"]:before,[class^=icon-]:before{font-family:FontAwesome;font-weight:400;font-style:normal;display:inline-block;text-decoration:inherit}a [class*=" icon-"],a [class^=icon-]{display:inline-block;text-decoration:inherit}.icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn [class*=" icon-"],.btn [class^=icon-]{line-height:.9em}li [class*=" icon-"],li [class^=icon-]{display:inline-block;width:1.25em;text-align:center}li .icon-large[class*=" icon-"],li .icon-large[class^=icon-]{width:1.875em}li[class*=" icon-"]:before,li[class^=icon-]:before{text-indent:-2em;text-align:center}li[class*=" icon-"].icon-large:before,li[class^=icon-].icon-large:before{text-indent:-1.3333333333333333em}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.btn{display:inline-block;padding:4px 10px;margin-bottom:0;font-size:13px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #ccc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn.active,.btn:active{background-color:#ccc\9}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9\9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-danger,.btn-info,.btn-inverse,.btn-primary,.btn-success,.btn-warning{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^=icon-]{margin-top:1px}.btn-small{padding:5px 9px;font-size:11px;line-height:18px}.btn-small [class^=icon-]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:11px;line-height:16px}.btn-danger,.btn-danger:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover,.btn-primary,.btn-primary:hover,.btn-success,.btn-success:hover,.btn-warning,.btn-warning:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.btn-danger.active,.btn-info.active,.btn-inverse.active,.btn-primary.active,.btn-success.active,.btn-warning.active{color:rgba(255,255,255,.75)}.navbar,.navbar .navbar-link{color:#999}.btn-primary{background-color:#0084cc;background-image:-moz-linear-gradient(top,#0098cc,#0065cc);background-image:-ms-linear-gradient(top,#0098cc,#0065cc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0098cc),to(#0065cc));background-image:-webkit-linear-gradient(top,#0098cc,#0065cc);background-image:-o-linear-gradient(top,#0098cc,#0065cc);background-image:linear-gradient(top,#0098cc,#0065cc);background-repeat:repeat-x;border-color:#0065cc #0065cc #003f80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:hover,.btn-primary[disabled]{background-color:#0065cc}.btn-primary.active,.btn-primary:active{background-color:#004c99\9}.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-ms-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:hover,.btn-warning[disabled]{background-color:#f89406}.btn-warning.active,.btn-warning:active{background-color:#c67605\9}.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-ms-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:hover,.btn-danger[disabled]{background-color:#bd362f}.btn-danger.active,.btn-danger:active{background-color:#942a25\9}.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-ms-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:hover,.btn-success[disabled]{background-color:#51a351}.btn-success.active,.btn-success:active{background-color:#408140\9}.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-ms-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:hover,.btn-info[disabled]{background-color:#2f96b4}.btn-info.active,.btn-info:active{background-color:#24748c\9}.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top,#555,#222);background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.navbar .btn-navbar,.navbar-inner{background-image:-moz-linear-gradient(top,#333,#222);background-image:-webkit-linear-gradient(top,#333,#222);background-repeat:repeat-x}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:hover,.btn-inverse[disabled]{background-color:#222}.btn-inverse.active,.btn-inverse:active{background-color:#080808\9}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}.navbar{overflow:visible;margin-bottom:20px}.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.nav-collapse.collapse{height:auto}.navbar .brand:hover{text-decoration:none}.navbar .brand{float:left;display:block;padding:8px 20px 12px;font-size:20px;font-weight:200;line-height:1}.navbar .navbar-text{margin-bottom:0;line-height:40px}.navbar .navbar-link:hover{color:#fff}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0}.navbar-form:after,.navbar-form:before{display:table;content:""}.navbar-form .checkbox,.navbar-form .radio,.navbar-form input,.navbar-form select{margin-top:5px}.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0}.navbar-form input[type=image],.navbar-form input[type=checkbox],.navbar-form input[type=radio]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;line-height:1;color:#fff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-search .search-query.focused,.navbar-search .search-query:focus{padding:5px 10px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);-moz-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15);outline:0}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{display:block;float:left}.navbar .nav>li>a{float:none;padding:9px 10px 11px;line-height:19px;color:#999;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar .btn{display:inline-block;padding:4px 10px;margin:5px 5px 6px;line-height:20px}.navbar .btn-group{margin:0;padding:5px 5px 6px}.navbar .nav>li>a:hover{background-color:transparent;color:#fff;text-decoration:none}.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#fff;text-decoration:none;background-color:#222}.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222;border-right:1px solid #333}.navbar .nav.pull-right{margin-left:10px;margin-right:0}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar:active,.navbar .btn-navbar:hover,.navbar .btn-navbar[disabled]{background-color:#222}.navbar .btn-navbar.active,.navbar .btn-navbar:active{background-color:#080808\9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,.25);box-shadow:0 1px 0 rgba(0,0,0,.25)}.navbar .dropdown-menu:after,.navbar .dropdown-menu:before{content:'';display:inline-block;position:absolute}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .dropdown-menu:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:9px}.navbar .dropdown-menu:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:10px}.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100)}.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle,.navbar .nav li.dropdown.open>.dropdown-toggle{background-color:transparent}.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#fff}.navbar .dropdown-menu.pull-right,.navbar .pull-right .dropdown-menu{left:auto;right:0}.navbar .dropdown-menu.pull-right:before,.navbar .pull-right .dropdown-menu:before{left:auto;right:12px}.navbar .dropdown-menu.pull-right:after,.navbar .pull-right .dropdown-menu:after{left:auto;right:13px}.thumbnails{margin-left:-20px;list-style:none}.thumbnails:after,.thumbnails:before{display:table;content:""}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:0 1px 1px rgba(0,0,0,.075);box-shadow:0 1px 1px rgba(0,0,0,.075)}a.thumbnail:hover{border-color:#0098cc;-webkit-box-shadow:0 1px 4px rgba(0,105,214,.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,.25);box-shadow:0 1px 4px rgba(0,105,214,.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px}.pull-right{float:right}.pull-left,.social-buttons li{float:left}.hide{display:none}.show{display:block}.filter:after,.filter:before,.social-buttons:after,.social-buttons:before{display:table;content:""}.invisible{visibility:hidden}.isotope-item{z-index:2}.isotope-hidden.isotope-item{pointer-events:none;z-index:1}.isotope,.isotope .isotope-item{-webkit-transition-duration:.8s;-moz-transition-duration:.8s;-ms-transition-duration:.8s;-o-transition-duration:.8s;transition-duration:.8s}.isotope{-webkit-transition-property:height,width;-moz-transition-property:height,width;-ms-transition-property:height,width;-o-transition-property:height,width;transition-property:height,width}.isotope .isotope-item{-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-ms-transition-property:-ms-transform,opacity;-o-transition-property:top,left,opacity;transition-property:transform,opacity}.isotope .isotope-item.no-transition,.isotope.no-transition,.isotope.no-transition .isotope-item{-webkit-transition-duration:0s;-moz-transition-duration:0s;-ms-transition-duration:0s;-o-transition-duration:0s;transition-duration:0s}h1{text-shadow:0 1px 1px #eee;font-size:14px}.page-header .note,pre code{font-size:12px}h1,h2,h3{margin-bottom:.5em}a{text-decoration:none;color:#0098cc}a:hover{color:#005f80}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;overflow:hidden}hr{border-style:dashed}.container{position:relative;padding:5px 0}.navbar{border-bottom:3px solid #0098cc;-webkit-box-shadow:rgba(0,0,0,.5) 0 5px 5px -4px;-moz-box-shadow:rgba(0,0,0,.5) 0 5px 5px -4px;box-shadow:rgba(0,0,0,.5) 0 5px 5px -4px}.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .container{width:940px;padding:0}.navbar .brand{color:#fff}.page-header{margin:30px 0 20px;padding-bottom:0;border-bottom:none;position:relative}.page-header h1{margin-bottom:10px}.page-header .btn-area{position:absolute;top:15px;right:0;text-align:center}.thumbnail{background:#fff;-webkit-transition:border-color .1s linear;transition:border-color .1s linear}.thumbnail img{border:1px solid #ccc}.thumbnail:hover{background:#f9f9f9;border-color:#0098cc;-webkit-transition:border-color .25s linear;-moz-transition:border-color .25s linear;-o-transition:border-color .25s linear;-ms-transition:border-color .25s linear;transition:border-color .25s linear;-webkit-box-shadow:0 1px 4px rgba(0,105,214,.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,.25);box-shadow:0 1px 4px rgba(0,105,214,.25)}.btn{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;position:relative}.btn-large{padding-left:36px}.btn-large i{font-size:27px;position:absolute;top:6px;left:10px}.social-buttons{list-style-type:none;margin:0;padding:10px;background:#eee;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;height:20px}.header{margin-top:10px}.header-top{background:url(../img/palette.png) repeat-x;height:5px;-webkit-box-shadow:rgba(0,0,0,.5) 0 3px 3px -1px;-moz-box-shadow:rgba(0,0,0,.5) 0 3px 3px -1px;box-shadow:rgba(0,0,0,.5) 0 3px 3px -1px;position:fixed;width:100%;z-index:999;top:0;left:0}.main{padding:20px 0}.filter dt{color:#999;font-weight:400;margin-right:.3em}.filter dd,.filter dt{float:left;display:inline}.filter dd{margin-left:.3em}.filter dd a{text-decoration:none;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;padding:3px 9px}.filter dd.active a{background:#0098cc;color:#fff}.filter dd.active a:hover{text-decoration:none}.adsense{text-align:center;margin-bottom:20px}body{padding-bottom:20px}.sidebar{margin:10px 0 20px;padding:9px;background:#fff;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.sidebar.adsense{padding:0;background:0 0;border:none}
body {
text-align: center;
}
#page-wrap {
text-align: left;
width: 1200px;
margin: 0 auto;
}
</style>
<script src="https://katzurki.github.io/gtt-bookmarklets/hl.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<head>
<title>Netflix Originator Lucid KNP2CSV Export</title>
</head>
<div id="page-wrap">
<center>
<h2><p>KNP2CSV Export from Originator/Lucid</p></h2>
<a class="btn btn-blue" href="javascript:(function()%7Bvar%20host%20%3D%20window.location.hostname%0Avar%20clq%20%3D%20decodeURIComponent(window.location.href)%0A%20%20.split(%22%3A%22)%5B3%5D%0Avar%20clq_pattern%20%3D%20new%20RegExp(%0A%20%20'%5E%5B0-9a-f%5D%7B8%7D-%5B0-9a-f%5D%7B4%7D-%5B1-5%5D%5B0-9a-f%5D%7B3%7D-%5B89ab%5D%5B0-9a-f%5D%7B3%7D-%5B0-9a-f%5D%7B12%7D%24'%2C%0A%20%20'i')%3B%20%2F%2FCLQ%20is%20a%20guid%20v4%0Avar%20lang_prompt%20%3D%0A%20%20%22Enter%20a%202-char%20language%20code%2C%20like%20ru%20or%20fr%3A%5Cn(exception%3A%20zh-CN%2C%20zh-TW%2C%20pt-BR%2C%20pt-PT)%22%0Avar%20getAllLanguages%20%3D%20false%0Avar%20oKnp%20%3D%20%7B%7D%0Avar%20majorEntities%20%3D%20%5B%22PERSON%22%2C%20%22LOCATION%22%2C%20%22ORGANIZATION%22%2C%20%22PHRASE%22%5D%20%2F%2Ftypes%20of%20KNP%20entries%2C%20at%20least%20one%20is%20always%20present%0Avar%20finalCsvArray%20%3D%20%5B%5D%0Avar%20currentCsvRow%20%3D%20%5B%5D%0Avar%20universalBOM%20%3D%20%22%5CuFEFF%22%3B%3B%0A%0Aif%20(!clq%20%7C%7C%20!clq_pattern.test(clq))%0A%7B%0A%20%20throw%20new%20Error(alert(%22Something%20went%20wrong.%20CLQ%20for%20debug%3A%20%22%20%2B%20clq))%0A%7D%0A%0Aif%20(host%20%3D%3D%20%22originator.backlot.netflix.com%22)%0A%7B%20%2F%2FWe%20can%20run%20both%20from%20Lucid%20and%20from%20Backlot%0A%20%20var%20knpJsonLink%20%3D%0A%20%20%20%20%22https%3A%2F%2Foriginator.backlot.netflix.com%2Fapi%2Fknp%2Fclq%3Aorigination%3A%22%20%2B%20clq%0A%20%20var%20taskTitle%20%3D%20document.getElementsByClassName(%22cpe-page-menu-label%22)%5B0%5D%0A%20%20%20%20.innerText%0A%20%20var%20LANG%20%3D%20taskTitle.split(%22%2C%22)%0A%20%20LANG%20%3D%20LANG%5BLANG.length%20-%202%5D.trim()%0A%7D%0Aelse%20if%20(host%20%3D%3D%20%22localization-lucid.netflix.com%22)%0A%7B%0A%20%20var%20movieid%20%3D%20window.location.pathname.split(%22%2F%22)%5B3%5D%0A%20%20var%20knpJsonLink%20%3D%0A%20%20%20%20%22https%3A%2F%2Flocalization-lucid.netflix.com%2FREST%2Fv1%2Fknp%2Fgetknp%3FappName%3Doriginator%26movieid%3D%22%20%2B%0A%20%20%20%20movieid%20%2B%20%22%26requestReference%3Dclq%3Aorigination%3A%22%20%2B%20clq%0A%20%20var%20taskTitle%20%3D%20document.querySelector(%22div.movie-title%22)%0A%20%20%20%20.innerText.replace(%22Movie%3A%20%22%2C%20%22%22)%0A%20%20var%20LANG%20%3D%20prompt(%0A%20%20%20%20lang_prompt%2C%22zh-CN%22%0A%20%20)%20%2F%2Fbut%20in%20Lucid%2C%20we%20can't%20guess%20what%20target%20language%20the%20user%20wants%0A%7D%0Aelse%0A%7B%0A%20%20throw%20new%20Error(alert(%0A%20%20%20%20%22You%20must%20be%20either%20in%20a%20started%20task%2C%5Cnor%20in%20KNP%20Lucid%20for%20this%20task.%22%0A%20%20))%0A%7D%0A%0Aif%20(LANG%20%3D%3D%20%22zh-Hans%22)%20LANG%20%3D%20%22zh-CN%22%20%2F%2Fspecial%20case%0Aif%20(LANG%20%3D%3D%20%22en%22)%0A%7B%0A%20%20do%20%7B%0A%20%20%20%20LANG%20%3D%20prompt(%22Target%20language%20cannot%20be%20%5C%22en%5C%22.%5Cn%22%20%2B%20lang_prompt)%3B%0A%20%20%7D%20while%20(LANG%20%3D%3D%20%22en%22)%0A%7D%0Aif%20(LANG%20%3D%3D%20%22%22)%0A%7B%0A%20%20throw%20new%20Error(%22You%20must%20enter%20a%20language%20code.%22)%0A%7D%0A%0Avar%20getJSON%20%3D%20async%20url%20%3D%3E%0A%7B%0A%20%20try%0A%20%20%7B%0A%20%20%20%20const%20response%20%3D%20await%20fetch(url%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20credentials%3A%20%22same-origin%22%0A%20%20%20%20%7D)%3B%20%2F%2Fcookie%20for%20authorization%20%3D%20no%20cross-site%20fetching!%0A%20%20%20%20if%20(!response.ok)%0A%20%20%20%20%20%20throw%20new%20Error(alert(response.statusText))%3B%0A%20%20%20%20const%20data%20%3D%20await%20response.json()%3B%0A%20%20%20%20return%20data%3B%0A%20%20%7D%0A%20%20catch%20(error)%0A%20%20%7B%0A%20%20%20%20return%20error%3B%0A%20%20%7D%0A%7D%0A%0Afunction%20nameCsv(suffix%20%3D%20%22%22)%0A%7B%0A%20%20if%20(suffix.length%20%3E%200)%20suffix%20%3D%20%22_%22%20%2B%20suffix%0A%20%20var%20s%20%3D%20taskTitle%0A%20%20var%20csvName%20%3D%20%22KNP_%22%20%2B%20(s.replace(%2F%5B%20%5D%2Fg%2C%20'_')%0A%20%20%20%20%20%20.replace(%0A%20%20%20%20%20%20%20%20%2F%5B%5Ea-z0-9_%5D%2Fgi%2C%20'')%20%2B%20%22_%22%20%2B%20suffix%20%2B%20%22.csv%22)%0A%20%20%20%20.replace(%2F__%2Fgi%2C%20%22_%22)%0A%20%20%20%20.trim()%0A%20%20if%20(!csvName)%20csvName%20%3D%20%22KNP_%22%20%2B%20clq%20%2B%20%22_%22%20%2B%20suffix%20%2B%20%22.csv%22%0A%20%20return%20csvName%0A%7D%20%2F%2Fresulting%20in%20a%20name%20like%20KNP_18383223_El_Burrito_A_Breaking_Fat_Movie_ru.csv%0Afunction%20getMovieIDFromOriginator()%0A%7B%20%2F%2Fin%20Originator%2C%20movieId%20can%20be%20obtained%20from%20the%20info%20page%2C%20but%20it%20isn't%20loaded%20until%20clicked%0A%20%20document.querySelectorAll(%0A%20%20%20%20%22%23appView%20%3E%20div%20%3E%20div.cpe-page-menu%20%3E%20div%20%3E%20div.actions%20%3E%20button%3Anth-child(2)%22%0A%20%20)%5B0%5D.click()%3B%0A%20%20movieid%20%3D%20document.querySelectorAll(%22.info-body%22)%5B0%5D.children%5B2%5D.innerText%0A%20%20%20%20.replace(%2F%5B%5E0-9%5D%2Fg%2C%20'')%0A%20%20%20%20.trim()%0A%20%20document.querySelectorAll(%0A%20%20%20%20%20%20%22%23appView%20%3E%20div%20%3E%20div.InfoPopup%20%3E%20dialog%20%3E%20div.info-body%22)%5B0%5D.nextSibling%0A%20%20%20%20.lastElementChild.click()%20%2F%2Fdon't%20forget%20to%20close%20the%20popup!%0A%20%20return%20movieid%0A%7D%0Avar%20csvName%20%3D%20nameCsv(LANG.toUpperCase())%0A%0Afunction%20denull(value)%0A%7B%0A%20%20if%20(!value)%0A%20%20%7B%0A%20%20%20%20return%20%22%22%0A%20%20%7D%0A%20%20else%0A%20%20%7B%0A%20%20%20%20return%20value.replace(%2F%5E%5B%5Cs%5CuFEFF%5CxA0%5D%2B%7C%5B%5Cs%5CuFEFF%5CxA0%5D%2B%24%2Fg%2C%20'')%3B%0A%20%20%7D%0A%7D%20%2F%2Fhorrible%20hack%20since%20Netflix's%20internal%20logging%20was%20driving%20me%20bonkers%0Afunction%20arrayToCsv(data)%0A%7B%0A%20%20return%20data.map(row%20%3D%3E%20row%0A%20%20%20%20%20%20.map(String)%20%2F%2Fall%20to%20string%0A%20%20%20%20%20%20.map(v%20%3D%3E%20v.replaceAll('%22'%2C%20'%22%22'))%20%2F%2Fescape%20present%20double%20quotes%0A%20%20%20%20%20%20.map(v%20%3D%3E%20%60%22%24%7Bv%7D%22%60)%20%2F%2Fenclose%20the%20cell%20in%20double%20quotes%0A%20%20%20%20%20%20.map(v%20%3D%3E%20v.replaceAll('%22null%22'%2C%0A%20%20%20%20%20%20%20%20'%22%22'))%20%2F%2Fcatchall%20measure%20if%20we%20somehow%20do%20end%20up%20with%20a%20%22null%22%0A%20%20%20%20%20%20.join('%2C')%20%2F%2Fmaybe%20tabs...%0A%20%20%20%20)%0A%20%20%20%20.join('%5Cr%5Cn')%3B%0A%7D%0AgetJSON(knpJsonLink)%0A%20%20.then(data%20%3D%3E%0A%20%20%7B%0A%20%20%20%20oKnp%20%3D%20data%0A%20%20%20%20if%20(typeof%20oKnp.error%20!%3D%3D%20%22undefined%22)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20alert(oKnp.error.message%20%2B%0A%20%20%20%20%20%20%20%20%22%5CnTry%20exporting%20from%20the%20Lucid%20KNP%20page.%5CnIf%20the%20KNP%20opens%20but%20doesn't%20export%2C%20report%20me%20to%20the%20developer.%22%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20var%20movieid%20%3D%20getMovieIDFromOriginator()%0A%20%20%20%20%20%20window.location.href%20%3D%0A%20%20%20%20%20%20%20%20%22https%3A%2F%2Flocalization-lucid.netflix.com%2Fknp%2Fview%2F%22%20%2B%20movieid%20%2B%0A%20%20%20%20%20%20%20%20%22%3FappName%3Doriginator%26requestReference%3Dclq%3Aorigination%3A%22%20%2B%20clq%0A%20%20%20%20%7D%0A%20%20%20%20if%20(oKnp.srcLocale%20%3D%3D%20%22en%22)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20var%20header%20%3D%20%5B%22TYPE%22%2C%20%22TEMPLATE%20(EN)%22%2C%20%22NOTE%22%2C%20%22TARGET%20(%22%20%2B%20LANG%0A%20%20%20%20%20%20%20%20.toUpperCase()%20%2B%20%22)%22%2C%20%22NOTE%20(%22%20%2B%20LANG.toUpperCase()%20%2B%20%22)%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20finalCsvArray.push(header)%0A%20%20%20%20%20%20for%20(const%20Entity%20of%20majorEntities)%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20(typeof%20oKnp.mapKnpTermDTOs%5BEntity%5D%20!%3D%3D%20%22undefined%22)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20oKnp.mapKnpTermDTOs%5BEntity%5D.forEach((v)%20%3D%3E%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentCsvRow.push(v.type%2C%20denull(v.srcValue.value)%2C%20denull(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20v.srcValue.note)%2C%20denull(v.localizedValues%5BLANG%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value)%2C%20denull(v.localizedValues%5BLANG%5D.note))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20finalCsvArray.push(currentCsvRow)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentCsvRow%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%20(e)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20console.log(e)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20oKnp.titleDTOs.forEach((t)%20%3D%3E%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentCsvRow.push(t.type%2C%20t.srcValue.value%2C%20t.srcValue.note%2C%20t%0A%20%20%20%20%20%20%20%20%20%20%20%20.localizedValues%5BLANG%5D.value%2C%20t.localizedValues%5BLANG%5D.note)%0A%20%20%20%20%20%20%20%20%20%20finalCsvArray.push(currentCsvRow)%3B%0A%20%20%20%20%20%20%20%20%20%20currentCsvRow%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%20(e)%20%7B%7D%0A%20%20%20%20%20%20%7D)%0A%20%20%20%20%7D%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%20%20var%20LANG_SRC%20%3D%20oKnp.srcLocale%0A%20%20%20%20%20%20var%20header%20%3D%20%5B%22TYPE%22%2C%20%22SOURCE%20(%22%20%2B%20LANG_SRC.toUpperCase()%20%2B%20%22)%22%2C%0A%20%20%20%20%20%20%20%20%22TEMPLATE%20(EN)%22%2C%20%22NOTE%20(EN)%22%2C%20%22TARGET%20(%22%20%2B%20LANG.toUpperCase()%20%2B%0A%20%20%20%20%20%20%20%20%22)%22%2C%20%22NOTE%20(%22%20%2B%20LANG.toUpperCase()%20%2B%20%22)%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20finalCsvArray.push(header)%0A%20%20%20%20%20%20for%20(const%20Entity%20of%20majorEntities)%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20(typeof%20oKnp.mapKnpTermDTOs%5BEntity%5D%20!%3D%3D%20%22undefined%22)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20oKnp.mapKnpTermDTOs%5BEntity%5D.forEach((v)%20%3D%3E%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentCsvRow.push(v.type%2C%20denull(v.srcValue.value)%2C%20denull(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20v.localizedValues%5B%22en%22%5D.value)%2C%20denull(v%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.localizedValues%5B%22en%22%5D.note)%2C%20denull(v%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.localizedValues%5BLANG%5D.value)%2C%20denull(v%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.localizedValues%5BLANG%5D.note))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20finalCsvArray.push(currentCsvRow)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentCsvRow%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%20(e)%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20(g%20%3D%200%3B%20g%20%3C%20oKnp.titleDTOs.length%20-%201%3B%20g%2B%2B)%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentCsvRow.push(oKnp.titleDTOs%5Bg%5D.type%2C%20denull(oKnp.titleDTOs%5Bg%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.srcValue.value)%2C%20denull(oKnp.titleDTOs%5Bg%5D.localizedValues%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22en%22%5D.value)%2C%20denull(oKnp.titleDTOs%5Bg%5D.localizedValues%5B%22en%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.note)%2C%20denull(oKnp.titleDTOs%5Bg%5D.localizedValues%5BLANG%5D.value)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20denull(oKnp.titleDTOs%5Bg%5D.localizedValues%5BLANG%5D.note))%0A%20%20%20%20%20%20%20%20%20%20finalCsvArray.push(currentCsvRow)%3B%0A%20%20%20%20%20%20%20%20%20%20currentCsvRow%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%20(e)%20%7B%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20let%20csv%20%3D%20arrayToCsv(finalCsvArray)%0A%20%20%20%20var%20a%20%3D%20window.document.createElement('a')%3B%0A%20%20%20%20a.setAttribute('href'%2C%20'data%3Atext%2Fcsv%3B%20charset%3Dutf-8%2C'%20%2B%0A%20%20%20%20%20%20encodeURIComponent(universalBOM%20%2B%20csv))%3B%0A%20%20%20%20a.setAttribute('download'%2C%20csvName)%3B%0A%20%20%20%20window.document.body.appendChild(a)%3B%0A%20%20%20%20a.click()%3B%0A%20%20%20%20a.remove()%3B%0A%20%20%20%20console.log(%22File%20%22%20%2B%20csvName%20%2B%20%22%20with%20%22%20%2B%20finalCsvArray.length%20%2B%0A%20%20%20%20%20%20%22%20rows%20successfully%20downloaded!%22)%0A%20%20%7D)%0A%20%20.catch(error%20%3D%3E%0A%20%20%7B%0A%20%20%20%20console.error(error)%3B%0A%20%20%7D)%3B%7D)()%3B">KNP2CSV</a><br></center>
<pre><code>
//version 0.2 from July 3, 2021
var host = window.location.hostname
var clq = decodeURIComponent(window.location.href)
.split(":")[3]
var clq_pattern = new RegExp(
'^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$',
'i'); //CLQ is a guid v4
var lang_prompt =
"Enter a 2-char language code, like ru or fr:\n(exception: zh-CN, zh-TW, pt-BR, pt-PT)"
var getAllLanguages = false
var oKnp = {}
var majorEntities = ["PERSON", "LOCATION", "ORGANIZATION", "PHRASE"] //types of KNP entries, at least one is always present
var finalCsvArray = []
var currentCsvRow = []
var universalBOM = "\uFEFF";;
if (!clq || !clq_pattern.test(clq))
{
throw new Error(alert("Something went wrong. CLQ for debug: " + clq))
}
if (host == "originator.backlot.netflix.com")
{ //We can run both from Lucid and from Backlot
var knpJsonLink =
"https://originator.backlot.netflix.com/api/knp/clq:origination:" + clq
var taskTitle = document.getElementsByClassName("cpe-page-menu-label")[0]
.innerText
var LANG = taskTitle.split(",")
LANG = LANG[LANG.length - 2].trim()
}
else if (host == "localization-lucid.netflix.com")
{
var movieid = window.location.pathname.split("/")[3]
var knpJsonLink =
"https://localization-lucid.netflix.com/REST/v1/knp/getknp?appName=originator&movieid=" +
movieid + "&requestReference=clq:origination:" + clq
var taskTitle = document.querySelector("div.movie-title")
.innerText.replace("Movie: ", "")
var LANG = prompt(
lang_prompt,"zh-CN"
) //but in Lucid, we can't guess what target language the user wants
}
else
{
throw new Error(alert(
"You must be either in a started task,\nor in KNP Lucid for this task."
))
}
if (LANG == "zh-Hans") LANG = "zh-CN" //special case
if (LANG == "en")
{
do {
LANG = prompt("Target language cannot be \"en\".\n" + lang_prompt);
} while (LANG == "en")
}
if (LANG == "")
{
throw new Error("You must enter a language code.")
}
var getJSON = async url =>
{
try
{
const response = await fetch(url,
{
credentials: "same-origin"
}); //cookie for authorization = no cross-site fetching!
if (!response.ok)
throw new Error(alert(response.statusText));
const data = await response.json();
return data;
}
catch (error)
{
return error;
}
}
function nameCsv(suffix = "")
{
if (suffix.length > 0) suffix = "_" + suffix
var s = taskTitle
var csvName = "KNP_" + (s.replace(/[ ]/g, '_')
.replace(
/[^a-z0-9_]/gi, '') + "_" + suffix + ".csv")
.replace(/__/gi, "_")
.trim()
if (!csvName) csvName = "KNP_" + clq + "_" + suffix + ".csv"
return csvName
} //resulting in a name like KNP_18383223_El_Burrito_A_Breaking_Fat_Movie_ru.csv
function getMovieIDFromOriginator()
{ //in Originator, movieId can be obtained from the info page, but it isn't loaded until clicked
document.querySelectorAll(
"#appView > div > div.cpe-page-menu > div > div.actions > button:nth-child(2)"
)[0].click();
movieid = document.querySelectorAll(".info-body")[0].children[2].innerText
.replace(/[^0-9]/g, '')
.trim()
document.querySelectorAll(
"#appView > div > div.InfoPopup > dialog > div.info-body")[0].nextSibling
.lastElementChild.click() //don't forget to close the popup!
return movieid
}
var csvName = nameCsv(LANG.toUpperCase())
function denull(value)
{
if (!value)
{
return ""
}
else
{
return value.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
}
} //horrible hack since Netflix's internal logging was driving me bonkers
function arrayToCsv(data)
{
return data.map(row => row
.map(String) //all to string
.map(v => v.replaceAll('"', '""')) //escape present double quotes
.map(v => `"${v}"`) //enclose the cell in double quotes
.map(v => v.replaceAll('"null"',
'""')) //catchall measure if we somehow do end up with a "null"
.join(',') //maybe tabs...
)
.join('\r\n');
}
getJSON(knpJsonLink)
.then(data =>
{
oKnp = data
if (typeof oKnp.error !== "undefined")
{
alert(oKnp.error.message +
"\nTry exporting from the Lucid KNP page.\nIf the KNP opens but doesn't export, report me to the developer."
);
var movieid = getMovieIDFromOriginator()
window.location.href =
"https://localization-lucid.netflix.com/knp/view/" + movieid +
"?appName=originator&requestReference=clq:origination:" + clq
}
if (oKnp.srcLocale == "en")
{
var header = ["TYPE", "TEMPLATE (EN)", "NOTE", "TARGET (" + LANG
.toUpperCase() + ")", "NOTE (" + LANG.toUpperCase() + ")"
]
finalCsvArray.push(header)
for (const Entity of majorEntities)
{
if (typeof oKnp.mapKnpTermDTOs[Entity] !== "undefined")
{
oKnp.mapKnpTermDTOs[Entity].forEach((v) =>
{
try
{
currentCsvRow.push(v.type, denull(v.srcValue.value), denull(
v.srcValue.note), denull(v.localizedValues[LANG]
.value), denull(v.localizedValues[LANG].note))
finalCsvArray.push(currentCsvRow);
currentCsvRow = [];
}
catch (e)
{
console.log(e)
}
})
}
}
oKnp.titleDTOs.forEach((t) =>
{
try
{
currentCsvRow.push(t.type, t.srcValue.value, t.srcValue.note, t
.localizedValues[LANG].value, t.localizedValues[LANG].note)
finalCsvArray.push(currentCsvRow);
currentCsvRow = [];
}
catch (e) {}
})
}
else
{
var LANG_SRC = oKnp.srcLocale
var header = ["TYPE", "SOURCE (" + LANG_SRC.toUpperCase() + ")",
"TEMPLATE (EN)", "NOTE (EN)", "TARGET (" + LANG.toUpperCase() +
")", "NOTE (" + LANG.toUpperCase() + ")"
]
finalCsvArray.push(header)
for (const Entity of majorEntities)
{
if (typeof oKnp.mapKnpTermDTOs[Entity] !== "undefined")
{
oKnp.mapKnpTermDTOs[Entity].forEach((v) =>
{
try
{
currentCsvRow.push(v.type, denull(v.srcValue.value), denull(
v.localizedValues["en"].value), denull(v
.localizedValues["en"].note), denull(v
.localizedValues[LANG].value), denull(v
.localizedValues[LANG].note))
finalCsvArray.push(currentCsvRow);
currentCsvRow = [];
}
catch (e) {}
})
}
}
for (g = 0; g < oKnp.titleDTOs.length - 1; g++)
{
try
{
currentCsvRow.push(oKnp.titleDTOs[g].type, denull(oKnp.titleDTOs[g]
.srcValue.value), denull(oKnp.titleDTOs[g].localizedValues[
"en"].value), denull(oKnp.titleDTOs[g].localizedValues["en"]
.note), denull(oKnp.titleDTOs[g].localizedValues[LANG].value),
denull(oKnp.titleDTOs[g].localizedValues[LANG].note))
finalCsvArray.push(currentCsvRow);
currentCsvRow = [];
}
catch (e) {}
}
}
let csv = arrayToCsv(finalCsvArray)
var a = window.document.createElement('a');
a.setAttribute('href', 'data:text/csv; charset=utf-8,' +
encodeURIComponent(universalBOM + csv));
a.setAttribute('download', csvName);
window.document.body.appendChild(a);
a.click();
a.remove();
console.log("File " + csvName + " with " + finalCsvArray.length +
" rows successfully downloaded!")
})
.catch(error =>
{
console.error(error);
});</pre></code>