Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • project/cloud
  • issue/cloud-3181823
  • issue/cloud-3181853
  • issue/cloud-3182150
  • issue/cloud-3182294
  • issue/cloud-3182311
  • issue/cloud-3182346
  • issue/cloud-3180558
  • issue/cloud-3182682
  • issue/cloud-3183409
  • issue/cloud-3183412
  • issue/cloud-3183529
  • issue/cloud-3183619
  • issue/cloud-3183632
  • issue/cloud-3183663
  • issue/cloud-3183934
  • issue/cloud-3184142
  • issue/cloud-3184411
  • issue/cloud-3184659
  • issue/cloud-3184891
  • issue/cloud-3184994
  • issue/cloud-3185464
  • issue/cloud-3185705
  • issue/cloud-3185706
  • issue/cloud-3185708
  • issue/cloud-3185709
  • issue/cloud-3185707
  • issue/cloud-3185710
  • issue/cloud-3185711
  • issue/cloud-3185724
  • issue/cloud-3185731
  • issue/cloud-3185732
  • issue/cloud-3185809
  • issue/cloud-3186025
  • issue/cloud-3185296
  • issue/cloud-3186140
  • issue/cloud-3186241
  • issue/cloud-3186469
  • issue/cloud-3186643
  • issue/cloud-3186692
  • issue/cloud-3186882
  • issue/cloud-3187039
  • issue/cloud-3187149
  • issue/cloud-3187317
  • issue/cloud-3187373
  • issue/cloud-3187387
  • issue/cloud-3187389
  • issue/cloud-3187560
  • issue/cloud-3187586
  • issue/cloud-3187780
  • issue/cloud-3188141
  • issue/cloud-3188198
  • issue/cloud-3188368
  • issue/cloud-3188424
  • issue/cloud-3188595
  • issue/cloud-3188606
  • issue/cloud-3188798
  • issue/cloud-3188820
  • issue/cloud-3188831
  • issue/cloud-3188935
  • issue/cloud-3188976
  • issue/cloud-3188982
  • issue/cloud-3188984
  • issue/cloud-3189446
  • issue/cloud-3189447
  • issue/cloud-3189450
  • issue/cloud-3189456
  • issue/cloud-3189714
  • issue/cloud-3189745
  • issue/cloud-3189755
  • issue/cloud-3189860
  • issue/cloud-3189861
  • issue/cloud-3189868
  • issue/cloud-3189910
  • issue/cloud-3189914
  • issue/cloud-3190078
  • issue/cloud-3189974
  • issue/cloud-3190170
  • issue/cloud-3190182
  • issue/cloud-3190185
  • issue/cloud-3190263
  • issue/cloud-3189975
  • issue/cloud-3189976
  • issue/cloud-3190294
  • issue/cloud-3190348
  • issue/cloud-3190627
  • issue/cloud-3190719
  • issue/cloud-3190809
  • issue/cloud-3191234
  • issue/cloud-3191299
  • issue/cloud-3191582
  • issue/cloud-3191586
  • issue/cloud-3191587
  • issue/cloud-3191639
  • issue/cloud-3191783
  • issue/cloud-3191610
  • issue/cloud-3191523
  • issue/cloud-3192298
  • issue/cloud-3192481
  • issue/cloud-3192847
  • issue/cloud-3192902
  • issue/cloud-3192918
  • issue/cloud-3192940
  • issue/cloud-3192989
  • issue/cloud-3193019
  • issue/cloud-3193083
  • issue/cloud-3193112
  • issue/cloud-3193114
  • issue/cloud-3193424
  • issue/cloud-3193606
  • issue/cloud-3193688
  • issue/cloud-3193748
  • issue/cloud-3193938
  • issue/cloud-3194343
  • issue/cloud-3194623
  • issue/cloud-3194659
  • issue/cloud-3194663
  • issue/cloud-3194823
  • issue/cloud-3194877
  • issue/cloud-3194873
  • issue/cloud-3195307
  • issue/cloud-3195312
  • issue/cloud-3195660
  • issue/cloud-3195671
  • issue/cloud-3195991
  • issue/cloud-3195995
  • issue/cloud-3196419
  • issue/cloud-3191585
  • issue/cloud-3191583
  • issue/cloud-3191581
  • issue/cloud-3197421
  • issue/cloud-3197432
  • issue/cloud-3197433
  • issue/cloud-3191584
  • issue/cloud-3197652
  • issue/cloud-3197868
  • issue/cloud-3197880
  • issue/cloud-3198098
  • issue/cloud-3197653
  • issue/cloud-3198478
  • issue/cloud-3198860
  • issue/cloud-3199050
  • issue/cloud-3199213
  • issue/cloud-3279150
  • issue/cloud-3199243
  • issue/cloud-3199809
  • issue/cloud-3199991
  • issue/cloud-3200044
  • issue/cloud-3200047
  • issue/cloud-3200100
  • issue/cloud-3200118
  • issue/cloud-3200270
  • issue/cloud-3200520
  • issue/cloud-3200740
  • issue/cloud-3200885
  • issue/cloud-3201060
  • issue/cloud-3201071
  • issue/cloud-3201138
  • issue/cloud-3201301
  • issue/cloud-3201330
  • issue/cloud-3201341
  • issue/cloud-3201374
  • issue/cloud-3201967
  • issue/cloud-3202402
  • issue/cloud-3202652
  • issue/cloud-3202669
  • issue/cloud-3202931
  • issue/cloud-3202937
  • issue/cloud-3203121
  • issue/cloud-3203156
  • issue/cloud-3203992
  • issue/cloud-3204653
  • issue/cloud-3204816
  • issue/cloud-3205276
  • issue/cloud-3205683
  • issue/cloud-3205730
  • issue/cloud-3205778
  • issue/cloud-3205789
  • issue/cloud-3205983
  • issue/cloud-3206157
  • issue/cloud-3206273
  • issue/cloud-3279428
  • issue/cloud-3206525
  • issue/cloud-3206532
  • issue/cloud-3279435
  • issue/cloud-3206834
  • issue/cloud-3206856
  • issue/cloud-3207107
  • issue/cloud-3207198
  • issue/cloud-3207333
  • issue/cloud-3207573
  • issue/cloud-3207595
  • issue/cloud-3207758
  • issue/cloud-3207945
  • issue/cloud-3208304
  • issue/cloud-3208670
  • issue/cloud-3208850
  • issue/cloud-3209211
  • issue/cloud-3209446
  • issue/cloud-3209693
  • issue/cloud-3210496
  • issue/cloud-3210638
  • issue/cloud-3210647
  • issue/cloud-3211273
  • issue/cloud-3211567
  • issue/cloud-3212126
  • issue/cloud-3212322
  • issue/cloud-3191576
  • issue/cloud-3212496
  • issue/cloud-3212680
  • issue/cloud-3213095
  • issue/cloud-3213541
  • issue/cloud-3213754
  • issue/cloud-3213753
  • issue/cloud-3213777
  • issue/cloud-3213785
  • issue/cloud-3214270
  • issue/cloud-3210650
  • issue/cloud-3215720
  • issue/cloud-3215747
  • issue/cloud-3215934
  • issue/cloud-3191580
  • issue/cloud-3216872
  • issue/cloud-3217114
  • issue/cloud-3217769
  • issue/cloud-3217980
  • issue/cloud-3217993
  • issue/cloud-3218525
  • issue/cloud-3218529
  • issue/cloud-3218640
  • issue/cloud-3218767
  • issue/cloud-3218796
  • issue/cloud-3186209
  • issue/cloud-3218829
  • issue/cloud-3219063
  • issue/cloud-3219172
  • issue/cloud-3219206
  • issue/cloud-3219225
  • issue/cloud-3195065
  • issue/cloud-3219464
  • issue/cloud-3219501
  • issue/cloud-3219506
  • issue/cloud-3219535
  • issue/cloud-3219600
  • issue/cloud-3219979
  • issue/cloud-3219992
  • issue/cloud-3220242
  • issue/cloud-3220246
  • issue/cloud-3220250
  • issue/cloud-3220258
  • issue/cloud-3220456
  • issue/cloud-3220465
  • issue/cloud-3220511
  • issue/cloud-3220519
  • issue/cloud-3220666
  • issue/cloud-3220987
  • issue/cloud-3221005
  • issue/cloud-3221182
  • issue/cloud-3221053
  • issue/cloud-3221336
  • issue/cloud-3221392
  • issue/cloud-3221401
  • issue/cloud-3221405
  • issue/cloud-3221415
  • issue/cloud-3221623
  • issue/cloud-3222089
  • issue/cloud-3222117
  • issue/cloud-3222352
  • issue/cloud-3222502
  • issue/cloud-3222534
  • issue/cloud-3222665
  • issue/cloud-3222703
  • issue/cloud-3222893
  • issue/cloud-3222920
  • issue/cloud-3223092
  • issue/cloud-3223339
  • issue/cloud-3223508
  • issue/cloud-3223525
  • issue/cloud-3223696
  • issue/cloud-3223740
  • issue/cloud-3223850
  • issue/cloud-3223924
  • issue/cloud-3224075
  • issue/cloud-3224080
  • issue/cloud-3224081
  • issue/cloud-3224172
  • issue/cloud-3224418
  • issue/cloud-3224987
  • issue/cloud-3225006
  • issue/cloud-3225023
  • issue/cloud-3225298
  • issue/cloud-3225312
  • issue/cloud-3225597
  • issue/cloud-3225614
  • issue/cloud-3225644
  • issue/cloud-3226097
  • issue/cloud-3226130
  • issue/cloud-3226574
  • issue/cloud-3226727
  • issue/cloud-3226828
  • issue/cloud-3226854
  • issue/cloud-3226882
  • issue/cloud-3225815
  • issue/cloud-3227078
  • issue/cloud-3227081
  • issue/cloud-3227251
  • issue/cloud-3227307
  • issue/cloud-3227311
  • issue/cloud-3227408
  • issue/cloud-3227485
  • issue/cloud-3227828
  • issue/cloud-3227846
  • issue/cloud-3227852
  • issue/cloud-3228270
  • issue/cloud-3228276
  • issue/cloud-3228400
  • issue/cloud-3228579
  • issue/cloud-3228624
  • issue/cloud-3228663
  • issue/cloud-3228688
  • issue/cloud-3225218
  • issue/cloud-3229021
  • issue/cloud-3228432
  • issue/cloud-3229041
  • issue/cloud-3229047
  • issue/cloud-3229497
  • issue/cloud-3229710
  • issue/cloud-3229718
  • issue/cloud-3229938
  • issue/cloud-3230015
  • issue/cloud-3230748
  • issue/cloud-3230776
  • issue/cloud-3230796
  • issue/cloud-3230931
  • issue/cloud-3230948
  • issue/cloud-3230958
  • issue/cloud-3225219
  • issue/cloud-3231401
  • issue/cloud-3231490
  • issue/cloud-3231513
  • issue/cloud-3231856
  • issue/cloud-3231860
  • issue/cloud-3231862
  • issue/cloud-3231867
  • issue/cloud-3231898
  • issue/cloud-3225220
  • issue/cloud-3232055
  • issue/cloud-3232196
  • issue/cloud-3225272
  • issue/cloud-3225292
  • issue/cloud-3225417
  • issue/cloud-3225420
  • issue/cloud-3232747
  • issue/cloud-3232760
  • issue/cloud-3232794
  • issue/cloud-3232806
  • issue/cloud-3232932
  • issue/cloud-3232934
  • issue/cloud-3232936
  • issue/cloud-3232983
  • issue/cloud-3232992
  • issue/cloud-3233416
  • issue/cloud-3233607
  • issue/cloud-3236202
  • issue/cloud-3236419
  • issue/cloud-3236437
  • issue/cloud-3238196
  • issue/cloud-3238383
  • issue/cloud-3238409
  • issue/cloud-3238663
  • issue/cloud-3238813
  • issue/cloud-3238827
  • issue/cloud-3238842
  • issue/cloud-3238910
  • issue/cloud-3238990
  • issue/cloud-3239091
  • issue/cloud-3239248
  • issue/cloud-3239560
  • issue/cloud-3239696
  • issue/cloud-3279431
  • issue/cloud-3279805
  • issue/cloud-3279924
  • issue/cloud-3279985
  • issue/cloud-3280030
  • issue/cloud-3280044
  • issue/cloud-3278818
  • issue/cloud-3280788
  • issue/cloud-3281010
  • issue/cloud-3281025
  • issue/cloud-3281266
  • issue/cloud-3281510
  • issue/cloud-3281678
  • issue/cloud-3281723
  • issue/cloud-3282020
  • issue/cloud-3282196
  • issue/cloud-3282213
  • issue/cloud-3282373
  • issue/cloud-3282584
  • issue/cloud-3283475
  • issue/cloud-3279437
  • issue/cloud-3279601
  • issue/cloud-3279810
  • issue/cloud-3279989
  • issue/cloud-3280232
  • issue/cloud-3280281
  • issue/cloud-3280792
  • issue/cloud-3282379
  • issue/cloud-3282574
  • issue/cloud-3283282
  • issue/cloud-3283536
  • issue/cloud-3283729
  • issue/cloud-3283918
  • issue/cloud-3278819
  • issue/cloud-3279450
  • issue/cloud-3279647
  • issue/cloud-3279833
  • issue/cloud-3280042
  • issue/cloud-3280264
  • issue/cloud-3280280
  • issue/cloud-3280793
  • issue/cloud-3280993
  • issue/cloud-3281231
  • issue/cloud-3281272
  • issue/cloud-3282029
  • issue/cloud-3282167
  • issue/cloud-3282576
  • issue/cloud-3281259
  • issue/cloud-3283263
  • issue/cloud-3283539
  • issue/cloud-3283702
  • issue/cloud-3283743
  • issue/cloud-3283947
  • issue/cloud-3279562
  • issue/cloud-3279817
  • issue/cloud-3279835
  • issue/cloud-3280064
  • issue/cloud-3280639
  • issue/cloud-3280995
  • issue/cloud-3282386
  • issue/cloud-3282577
  • issue/cloud-3283290
  • issue/cloud-3283508
  • issue/cloud-3283736
  • issue/cloud-3278822
  • issue/cloud-3279617
  • issue/cloud-3279875
  • issue/cloud-3280272
  • issue/cloud-3281022
  • issue/cloud-3281027
  • issue/cloud-3281288
  • issue/cloud-3282018
  • issue/cloud-3282038
  • issue/cloud-3282193
  • issue/cloud-3282371
  • issue/cloud-3283512
  • issue/cloud-3279547
  • issue/cloud-3280273
  • issue/cloud-3281204
  • issue/cloud-3281287
  • issue/cloud-3281533
  • issue/cloud-3281673
  • issue/cloud-3281687
  • issue/cloud-3282372
  • issue/cloud-3283497
  • issue/cloud-3283635
  • issue/cloud-3283856
  • issue/cloud-3239811
  • issue/cloud-3239900
  • issue/cloud-3239946
  • issue/cloud-3240101
  • issue/cloud-3240218
  • issue/cloud-3240371
  • issue/cloud-3240440
  • issue/cloud-3240519
  • issue/cloud-3240524
  • issue/cloud-3240525
  • issue/cloud-3240421
  • issue/cloud-3240531
  • issue/cloud-3240540
  • issue/cloud-3240619
  • issue/cloud-3240658
  • issue/cloud-3240707
  • issue/cloud-3240722
  • issue/cloud-3240733
  • issue/cloud-3240740
  • issue/cloud-3240961
  • issue/cloud-3240976
  • issue/cloud-3240437
  • issue/cloud-3241241
  • issue/cloud-3241456
  • issue/cloud-3242641
  • issue/cloud-3241224
  • issue/cloud-3243034
  • issue/cloud-3243160
  • issue/cloud-3241453
  • issue/cloud-3240423
  • issue/cloud-3243282
  • issue/cloud-3243685
  • issue/cloud-3243843
  • issue/cloud-3243941
  • issue/cloud-3243975
  • issue/cloud-3244088
  • issue/cloud-3244327
  • issue/cloud-3244469
  • issue/cloud-3244513
  • issue/cloud-3244320
  • issue/cloud-3244753
  • issue/cloud-3244775
  • issue/cloud-3244801
  • issue/cloud-3244808
  • issue/cloud-3244814
  • issue/cloud-3245014
  • issue/cloud-3245015
  • issue/cloud-3245071
  • issue/cloud-3245251
  • issue/cloud-3245494
  • issue/cloud-3245650
  • issue/cloud-3245686
  • issue/cloud-3245859
  • issue/cloud-3245877
  • issue/cloud-3245881
  • issue/cloud-3246008
  • issue/cloud-3246044
  • issue/cloud-3246123
  • issue/cloud-3246271
  • issue/cloud-3246286
  • issue/cloud-3246330
  • issue/cloud-3246346
  • issue/cloud-3246352
  • issue/cloud-3246522
  • issue/cloud-3246489
  • issue/cloud-3246549
  • issue/cloud-3225216
  • issue/cloud-3246856
  • issue/cloud-3247063
  • issue/cloud-3247118
  • issue/cloud-3247207
  • issue/cloud-3247232
  • issue/cloud-3247707
  • issue/cloud-3279586
  • issue/cloud-3247826
  • issue/cloud-3247956
  • issue/cloud-3248118
  • issue/cloud-3248362
  • issue/cloud-3248389
  • issue/cloud-3248461
  • issue/cloud-3248545
  • issue/cloud-3248614
  • issue/cloud-3248632
  • issue/cloud-3248826
  • issue/cloud-3248996
  • issue/cloud-3249060
  • issue/cloud-3249313
  • issue/cloud-3249328
  • issue/cloud-3249409
  • issue/cloud-3249488
  • issue/cloud-3249604
  • issue/cloud-3249829
  • issue/cloud-3278867
  • issue/cloud-3250390
  • issue/cloud-3250573
  • issue/cloud-3250579
  • issue/cloud-3250584
  • issue/cloud-3250959
  • issue/cloud-3251179
  • issue/cloud-3251529
  • issue/cloud-3251604
  • issue/cloud-3251738
  • issue/cloud-3251782
  • issue/cloud-3251787
  • issue/cloud-3251803
  • issue/cloud-3252005
  • issue/cloud-3252127
  • issue/cloud-3252183
  • issue/cloud-3252334
  • issue/cloud-3252381
  • issue/cloud-3252556
  • issue/cloud-3252652
  • issue/cloud-3252711
  • issue/cloud-3252913
  • issue/cloud-3252922
  • issue/cloud-3252947
  • issue/cloud-3253122
  • issue/cloud-3253229
  • issue/cloud-3253431
  • issue/cloud-3253446
  • issue/cloud-3253737
  • issue/cloud-3254065
  • issue/cloud-3254096
  • issue/cloud-3254264
  • issue/cloud-3254275
  • issue/cloud-3253930
  • issue/cloud-3254463
  • issue/cloud-3254470
  • issue/cloud-3254475
  • issue/cloud-3254672
  • issue/cloud-3254719
  • issue/cloud-3254865
  • issue/cloud-3254876
  • issue/cloud-3255212
  • issue/cloud-3255214
  • issue/cloud-3255361
  • issue/cloud-3255413
  • issue/cloud-3255553
  • issue/cloud-3255554
  • issue/cloud-3255583
  • issue/cloud-3255588
  • issue/cloud-3255858
  • issue/cloud-3255910
  • issue/cloud-3255987
  • issue/cloud-3256026
  • issue/cloud-3256994
  • issue/cloud-3257126
  • issue/cloud-3257355
  • issue/cloud-3257368
  • issue/cloud-3257912
  • issue/cloud-3258040
  • issue/cloud-3258115
  • issue/cloud-3258116
  • issue/cloud-3258154
  • issue/cloud-3258302
  • issue/cloud-3258311
  • issue/cloud-3258508
  • issue/cloud-3258845
  • issue/cloud-3258891
  • issue/cloud-3259045
  • issue/cloud-3259282
  • issue/cloud-3259494
  • issue/cloud-3259688
  • issue/cloud-3260053
  • issue/cloud-3260069
  • issue/cloud-3260255
  • issue/cloud-3260256
  • issue/cloud-3260285
  • issue/cloud-3260518
  • issue/cloud-3260523
  • issue/cloud-3260524
  • issue/cloud-3260747
  • issue/cloud-3260978
  • issue/cloud-3261006
  • issue/cloud-3261010
  • issue/cloud-3261175
  • issue/cloud-3261470
  • issue/cloud-3261648
  • issue/cloud-3261694
  • issue/cloud-3262075
  • issue/cloud-3262130
  • issue/cloud-3262131
  • issue/cloud-3262412
  • issue/cloud-3262416
  • issue/cloud-3262571
  • issue/cloud-3262574
  • issue/cloud-3262625
  • issue/cloud-3262802
  • issue/cloud-3262806
  • issue/cloud-3262829
  • issue/cloud-3263015
  • issue/cloud-3263099
  • issue/cloud-3263209
  • issue/cloud-3263292
  • issue/cloud-3263309
  • issue/cloud-3263327
  • issue/cloud-3263486
  • issue/cloud-3263543
  • issue/cloud-3263633
  • issue/cloud-3263739
  • issue/cloud-3263737
  • issue/cloud-3263954
  • issue/cloud-3264010
  • issue/cloud-3264095
  • issue/cloud-3264189
  • issue/cloud-3264224
  • issue/cloud-3264410
  • issue/cloud-3264457
  • issue/cloud-3264602
  • issue/cloud-3264618
  • issue/cloud-3264872
  • issue/cloud-3264898
  • issue/cloud-3265132
  • issue/cloud-3265149
  • issue/cloud-3265154
  • issue/cloud-3265544
  • issue/cloud-3265548
  • issue/cloud-3265561
  • issue/cloud-3265571
  • issue/cloud-3265587
  • issue/cloud-3265796
  • issue/cloud-3265817
  • issue/cloud-3265970
  • issue/cloud-3266025
  • issue/cloud-3266033
  • issue/cloud-3266054
  • issue/cloud-3266178
  • issue/cloud-3266233
  • issue/cloud-3266234
  • issue/cloud-3266237
  • issue/cloud-3266374
  • issue/cloud-3266446
  • issue/cloud-3266542
  • issue/cloud-3266679
  • issue/cloud-3266832
  • issue/cloud-3266848
  • issue/cloud-3266876
  • issue/cloud-3266865
  • issue/cloud-3267036
  • issue/cloud-3267275
  • issue/cloud-3267487
  • issue/cloud-3267642
  • issue/cloud-3267692
  • issue/cloud-3267695
  • issue/cloud-3267702
  • issue/cloud-3267693
  • issue/cloud-3267722
  • issue/cloud-3267726
  • issue/cloud-3267750
  • issue/cloud-3267873
  • issue/cloud-3267881
  • issue/cloud-3267883
  • issue/cloud-3267885
  • issue/cloud-3267888
  • issue/cloud-3267906
  • issue/cloud-3267960
  • issue/cloud-3268416
  • issue/cloud-3268507
  • issue/cloud-3268546
  • issue/cloud-3268479
  • issue/cloud-3268797
  • issue/cloud-3268806
  • issue/cloud-3268811
  • issue/cloud-3268968
  • issue/cloud-3268973
  • issue/cloud-3268673
  • issue/cloud-3269021
  • issue/cloud-3269054
  • issue/cloud-3269057
  • issue/cloud-3269155
  • issue/cloud-3269344
  • issue/cloud-3269366
  • issue/cloud-3269368
  • issue/cloud-3269370
  • issue/cloud-3269374
  • issue/cloud-3269377
  • issue/cloud-3269500
  • issue/cloud-3269602
  • issue/cloud-3269708
  • issue/cloud-3269781
  • issue/cloud-3269788
  • issue/cloud-3269811
  • issue/cloud-3269815
  • issue/cloud-3269993
  • issue/cloud-3270023
  • issue/cloud-3270036
  • issue/cloud-3270066
  • issue/cloud-3270163
  • issue/cloud-3270207
  • issue/cloud-3270265
  • issue/cloud-3270268
  • issue/cloud-3270280
  • issue/cloud-3270282
  • issue/cloud-3270269
  • issue/cloud-3270658
  • issue/cloud-3269930
  • issue/cloud-3271058
  • issue/cloud-3271141
  • issue/cloud-3271151
  • issue/cloud-3271155
  • issue/cloud-3271157
  • issue/cloud-3271348
  • issue/cloud-3271363
  • issue/cloud-3271364
  • issue/cloud-3271376
  • issue/cloud-3271378
  • issue/cloud-3271560
  • issue/cloud-3271565
  • issue/cloud-3271599
  • issue/cloud-3271600
  • issue/cloud-3271750
  • issue/cloud-3271949
  • issue/cloud-3271743
  • issue/cloud-3272138
  • issue/cloud-3272183
  • issue/cloud-3272190
  • issue/cloud-3272375
  • issue/cloud-3272416
  • issue/cloud-3272419
  • issue/cloud-3272544
  • issue/cloud-3272557
  • issue/cloud-3272624
  • issue/cloud-3272661
  • issue/cloud-3272897
  • issue/cloud-3273053
  • issue/cloud-3273058
  • issue/cloud-3273073
  • issue/cloud-3273084
  • issue/cloud-3271742
  • issue/cloud-3273413
  • issue/cloud-3273418
  • issue/cloud-3273615
  • issue/cloud-3273629
  • issue/cloud-3273643
  • issue/cloud-3273644
  • issue/cloud-3273748
  • issue/cloud-3273905
  • issue/cloud-3273889
  • issue/cloud-3273962
  • issue/cloud-3274078
  • issue/cloud-3274109
  • issue/cloud-3274116
  • issue/cloud-3274157
  • issue/cloud-3274196
  • issue/cloud-3274216
  • issue/cloud-3274374
  • issue/cloud-3274382
  • issue/cloud-3274386
  • issue/cloud-3274512
  • issue/cloud-3274523
  • issue/cloud-3274702
  • issue/cloud-3274946
  • issue/cloud-3274955
  • issue/cloud-3274982
  • issue/cloud-3275209
  • issue/cloud-3275355
  • issue/cloud-3275379
  • issue/cloud-3275389
  • issue/cloud-3275170
  • issue/cloud-3275690
  • issue/cloud-3275736
  • issue/cloud-3275840
  • issue/cloud-3275841
  • issue/cloud-3275892
  • issue/cloud-3275988
  • issue/cloud-3275521
  • issue/cloud-3276136
  • issue/cloud-3276138
  • issue/cloud-3276175
  • issue/cloud-3276185
  • issue/cloud-3276321
  • issue/cloud-3276323
  • issue/cloud-3276353
  • issue/cloud-3276369
  • issue/cloud-3276410
  • issue/cloud-3276570
  • issue/cloud-3276704
  • issue/cloud-3276714
  • issue/cloud-3276788
  • issue/cloud-3276897
  • issue/cloud-3276908
  • issue/cloud-3277300
  • issue/cloud-3277750
  • issue/cloud-3277765
  • issue/cloud-3277797
  • issue/cloud-3278037
  • issue/cloud-3278112
  • issue/cloud-3278113
  • issue/cloud-3278248
  • issue/cloud-3278308
  • issue/cloud-3278479
  • issue/cloud-3278023
  • issue/cloud-3280027
  • issue/cloud-3280787
  • issue/cloud-3281004
  • issue/cloud-3281282
  • issue/cloud-3281298
  • issue/cloud-3283959
  • issue/cloud-3284108
  • issue/cloud-3284224
  • issue/cloud-3284251
  • issue/cloud-3284360
  • issue/cloud-3284361
  • issue/cloud-3284363
  • issue/cloud-3284365
  • issue/cloud-3284370
  • issue/cloud-3284388
  • issue/cloud-3284466
  • issue/cloud-3284576
  • issue/cloud-3284565
  • issue/cloud-3284578
  • issue/cloud-3284587
  • issue/cloud-3284602
  • issue/cloud-3284606
  • issue/cloud-3284714
  • issue/cloud-3284774
  • issue/cloud-3284776
  • issue/cloud-3284782
  • issue/cloud-3285053
  • issue/cloud-3284947
  • issue/cloud-3285332
  • issue/cloud-3285338
  • issue/cloud-3285367
  • issue/cloud-3285519
  • issue/cloud-3285526
  • issue/cloud-3285536
  • issue/cloud-3285538
  • issue/cloud-3285539
  • issue/cloud-3285555
  • issue/cloud-3285693
  • issue/cloud-3285702
  • issue/cloud-3285478
  • issue/cloud-3285743
  • issue/cloud-3285749
  • issue/cloud-3285764
  • issue/cloud-3285770
  • issue/cloud-3285849
  • issue/cloud-3288063
  • issue/cloud-3285730
  • issue/cloud-3290773
  • issue/cloud-3290788
  • issue/cloud-3290795
  • issue/cloud-3290820
  • issue/cloud-3290984
  • issue/cloud-3290987
  • issue/cloud-3291000
  • issue/cloud-3291013
  • issue/cloud-3291081
  • issue/cloud-3291001
  • issue/cloud-3291234
  • issue/cloud-3291241
  • issue/cloud-3291253
  • issue/cloud-3291386
  • issue/cloud-3291389
  • issue/cloud-3291392
  • issue/cloud-3291395
  • issue/cloud-3291396
  • issue/cloud-3291595
  • issue/cloud-3291597
  • issue/cloud-3291605
  • issue/cloud-3291627
  • issue/cloud-3291661
  • issue/cloud-3291742
  • issue/cloud-3291766
  • issue/cloud-3291850
  • issue/cloud-3291858
  • issue/cloud-3291878
  • issue/cloud-3399374
  • issue/cloud-3292036
  • issue/cloud-3292089
  • issue/cloud-3292090
  • issue/cloud-3292096
  • issue/cloud-3292100
  • issue/cloud-3292101
  • issue/cloud-3292105
  • issue/cloud-3292111
  • issue/cloud-3292141
  • issue/cloud-3292142
  • issue/cloud-3292363
  • issue/cloud-3292372
  • issue/cloud-3292417
  • issue/cloud-3292330
  • issue/cloud-3292575
  • issue/cloud-3292582
  • issue/cloud-3292679
  • issue/cloud-3292685
  • issue/cloud-3292544
  • issue/cloud-3292767
  • issue/cloud-3292771
  • issue/cloud-3292791
  • issue/cloud-3292794
  • issue/cloud-3292812
  • issue/cloud-3292977
  • issue/cloud-3292981
  • issue/cloud-3292989
  • issue/cloud-3293000
  • issue/cloud-3293208
  • issue/cloud-3293211
  • issue/cloud-3293219
  • issue/cloud-3293224
  • issue/cloud-3293234
  • issue/cloud-3293244
  • issue/cloud-3293419
  • issue/cloud-3293207
  • issue/cloud-3293499
  • issue/cloud-3293505
  • issue/cloud-3293701
  • issue/cloud-3293736
  • issue/cloud-3293846
  • issue/cloud-3293949
  • issue/cloud-3294027
  • issue/cloud-3294030
  • issue/cloud-3294185
  • issue/cloud-3294189
  • issue/cloud-3294201
  • issue/cloud-3294227
  • issue/cloud-3294424
  • issue/cloud-3294427
  • issue/cloud-3294451
  • issue/cloud-3294631
  • issue/cloud-3294644
  • issue/cloud-3294865
  • issue/cloud-3294886
  • issue/cloud-3295011
  • issue/cloud-3295067
  • issue/cloud-3295095
  • issue/cloud-3295125
  • issue/cloud-3295194
  • issue/cloud-3295196
  • issue/cloud-3295237
  • issue/cloud-3295251
  • issue/cloud-3295254
  • issue/cloud-3295418
  • issue/cloud-3295646
  • issue/cloud-3295669
  • issue/cloud-3295673
  • issue/cloud-3295695
  • issue/cloud-3295873
  • issue/cloud-3296392
  • issue/cloud-3298293
  • issue/cloud-3296083
  • issue/cloud-3303765
  • issue/cloud-3303941
  • issue/cloud-3304247
  • issue/cloud-3304374
  • issue/cloud-3304580
  • issue/cloud-3305386
  • issue/cloud-3305476
  • issue/cloud-3305606
  • issue/cloud-3298542
  • issue/cloud-3298732
  • issue/cloud-3299211
  • issue/cloud-3299866
  • issue/cloud-3298957
  • issue/cloud-3300356
  • issue/cloud-3300110
  • issue/cloud-3300392
  • issue/cloud-3303800
  • issue/cloud-3303812
  • issue/cloud-3304166
  • issue/cloud-3304547
  • issue/cloud-3304644
  • issue/cloud-3300947
  • issue/cloud-3301042
  • issue/cloud-3301207
  • issue/cloud-3301951
  • issue/cloud-3301955
  • issue/cloud-3302049
  • issue/cloud-3302260
  • issue/cloud-3302747
  • issue/cloud-3302977
  • issue/cloud-3303222
  • issue/cloud-3303229
  • issue/cloud-3303236
  • issue/cloud-3303390
  • issue/cloud-3303428
  • issue/cloud-3303635
  • issue/cloud-3304212
  • issue/cloud-3304632
  • issue/cloud-3301956
  • issue/cloud-3304894
  • issue/cloud-3305398
  • issue/cloud-3306033
  • issue/cloud-3305650
  • issue/cloud-3306114
  • issue/cloud-3306116
  • issue/cloud-3310203
  • issue/cloud-3310210
  • issue/cloud-3310262
  • issue/cloud-3310457
  • issue/cloud-3310560
  • issue/cloud-3310642
  • issue/cloud-3310995
  • issue/cloud-3311042
  • issue/cloud-3309974
  • issue/cloud-3306321
  • issue/cloud-3306357
  • issue/cloud-3306359
  • issue/cloud-3306380
  • issue/cloud-3306643
  • issue/cloud-3306689
  • issue/cloud-3306521
  • issue/cloud-3306702
  • issue/cloud-3306754
  • issue/cloud-3306966
  • issue/cloud-3306981
  • issue/cloud-3306987
  • issue/cloud-3306988
  • issue/cloud-3307021
  • issue/cloud-3306990
  • issue/cloud-3307162
  • issue/cloud-3306991
  • issue/cloud-3307215
  • issue/cloud-3307239
  • issue/cloud-3307396
  • issue/cloud-3307397
  • issue/cloud-3307437
  • issue/cloud-3306992
  • issue/cloud-3307456
  • issue/cloud-3307462
  • issue/cloud-3307499
  • issue/cloud-3307668
  • issue/cloud-3307678
  • issue/cloud-3307733
  • issue/cloud-3307925
  • issue/cloud-3307933
  • issue/cloud-3308070
  • issue/cloud-3308279
  • issue/cloud-3308275
  • issue/cloud-3308490
  • issue/cloud-3308495
  • issue/cloud-3308496
  • issue/cloud-3308655
  • issue/cloud-3308676
  • issue/cloud-3308695
  • issue/cloud-3308708
  • issue/cloud-3308717
  • issue/cloud-3308270
  • issue/cloud-3308812
  • issue/cloud-3308934
  • issue/cloud-3308967
  • issue/cloud-3308974
  • issue/cloud-3308999
  • issue/cloud-3309150
  • issue/cloud-3309165
  • issue/cloud-3309286
  • issue/cloud-3309124
  • issue/cloud-3309333
  • issue/cloud-3309357
  • issue/cloud-3309517
  • issue/cloud-3309540
  • issue/cloud-3309587
  • issue/cloud-3309705
  • issue/cloud-3309758
  • issue/cloud-3309787
  • issue/cloud-3309788
  • issue/cloud-3309878
  • issue/cloud-3309971
  • issue/cloud-3309981
  • issue/cloud-3310024
  • issue/cloud-3310263
  • issue/cloud-3310707
  • issue/cloud-3310768
  • issue/cloud-3309596
  • issue/cloud-3311026
  • issue/cloud-3311463
  • issue/cloud-3311664
  • issue/cloud-3311665
  • issue/cloud-3311766
  • issue/cloud-3311779
  • issue/cloud-3311935
  • issue/cloud-3311268
  • issue/cloud-3312203
  • issue/cloud-3312218
  • issue/cloud-3312215
  • issue/cloud-3312472
  • issue/cloud-3311750
  • issue/cloud-3312576
  • issue/cloud-3312622
  • issue/cloud-3312708
  • issue/cloud-3312766
  • issue/cloud-3312549
  • issue/cloud-3312780
  • issue/cloud-3311749
  • issue/cloud-3312838
  • issue/cloud-3312996
  • issue/cloud-3313318
  • issue/cloud-3313353
  • issue/cloud-3317433
  • issue/cloud-3317489
  • issue/cloud-3317731
  • issue/cloud-3317919
  • issue/cloud-3318174
  • issue/cloud-3318236
  • issue/cloud-3317924
  • issue/cloud-3313550
  • issue/cloud-3313552
  • issue/cloud-3313770
  • issue/cloud-3313779
  • issue/cloud-3313812
  • issue/cloud-3313999
  • issue/cloud-3314252
  • issue/cloud-3314398
  • issue/cloud-3317496
  • issue/cloud-3317494
  • issue/cloud-3314603
  • issue/cloud-3314652
  • issue/cloud-3314804
  • issue/cloud-3314812
  • issue/cloud-3314400
  • issue/cloud-3314844
  • issue/cloud-3315043
  • issue/cloud-3315268
  • issue/cloud-3315586
  • issue/cloud-3315797
  • issue/cloud-3315878
  • issue/cloud-3316407
  • issue/cloud-3316471
  • issue/cloud-3316494
  • issue/cloud-3316681
  • issue/cloud-3317116
  • issue/cloud-3317301
  • issue/cloud-3318439
  • issue/cloud-3318463
  • issue/cloud-3318898
  • issue/cloud-3318641
  • issue/cloud-3325922
  • issue/cloud-3319229
  • issue/cloud-3319231
  • issue/cloud-3327455
  • issue/cloud-3327525
  • issue/cloud-3325925
  • issue/cloud-3326094
  • issue/cloud-3319611
  • issue/cloud-3326730
  • issue/cloud-3327023
  • issue/cloud-3327303
  • issue/cloud-3327527
  • issue/cloud-3327959
  • issue/cloud-3320297
  • issue/cloud-3326151
  • issue/cloud-3320385
  • issue/cloud-3320601
  • issue/cloud-3320310
  • issue/cloud-3320609
  • issue/cloud-3320654
  • issue/cloud-3320663
  • issue/cloud-3326999
  • issue/cloud-3327965
  • issue/cloud-3328378
  • issue/cloud-3329613
  • issue/cloud-3329614
  • issue/cloud-3329626
  • issue/cloud-3325459
  • issue/cloud-3325485
  • issue/cloud-3326711
  • issue/cloud-3326759
  • issue/cloud-3327068
  • issue/cloud-3327318
  • issue/cloud-3327495
  • issue/cloud-3327545
  • issue/cloud-3327733
  • issue/cloud-3328717
  • issue/cloud-3320860
  • issue/cloud-3320868
  • issue/cloud-3320301
  • issue/cloud-3320915
  • issue/cloud-3320944
  • issue/cloud-3320945
  • issue/cloud-3321029
  • issue/cloud-3321067
  • issue/cloud-3325489
  • issue/cloud-3326481
  • issue/cloud-3326682
  • issue/cloud-3326722
  • issue/cloud-3327003
  • issue/cloud-3327036
  • issue/cloud-3328728
  • issue/cloud-3328928
  • issue/cloud-3329000
  • issue/cloud-3321709
  • issue/cloud-3321712
  • issue/cloud-3321322
  • issue/cloud-3322010
  • issue/cloud-3322021
  • issue/cloud-3322024
  • issue/cloud-3325391
  • issue/cloud-3325462
  • issue/cloud-3327042
  • issue/cloud-3327092
  • issue/cloud-3327228
  • issue/cloud-3328138
  • issue/cloud-3328509
  • issue/cloud-3328964
  • issue/cloud-3322344
  • issue/cloud-3322368
  • issue/cloud-3322385
  • issue/cloud-3322638
  • issue/cloud-3322725
  • issue/cloud-3322833
  • issue/cloud-3322836
  • issue/cloud-3323031
  • issue/cloud-3319538
  • issue/cloud-3323489
  • issue/cloud-3323495
  • issue/cloud-3323705
  • issue/cloud-3323738
  • issue/cloud-3323864
  • issue/cloud-3323928
  • issue/cloud-3323929
  • issue/cloud-3324001
  • issue/cloud-3324002
  • issue/cloud-3324004
  • issue/cloud-3324005
  • issue/cloud-3324023
  • issue/cloud-3323516
  • issue/cloud-3322870
  • issue/cloud-3324489
  • issue/cloud-3324666
  • issue/cloud-3324707
  • issue/cloud-3324719
  • issue/cloud-3324821
  • issue/cloud-3324864
  • issue/cloud-3324903
  • issue/cloud-3324906
  • issue/cloud-3324924
  • issue/cloud-3325053
  • issue/cloud-3325239
  • issue/cloud-3324908
  • issue/cloud-3325245
  • issue/cloud-3325264
  • issue/cloud-3325269
  • issue/cloud-3325936
  • issue/cloud-3329673
  • issue/cloud-3329897
  • issue/cloud-3329909
  • issue/cloud-3329927
  • issue/cloud-3328760
  • issue/cloud-3329988
  • issue/cloud-3331383
  • issue/cloud-3331442
  • issue/cloud-3331666
  • issue/cloud-3332069
  • issue/cloud-3332132
  • issue/cloud-3332171
  • issue/cloud-3332242
  • issue/cloud-3332373
  • issue/cloud-3332492
  • issue/cloud-3332620
  • issue/cloud-3332862
  • issue/cloud-3333124
  • issue/cloud-3333520
  • issue/cloud-3333526
  • issue/cloud-3333674
  • issue/cloud-3327817
  • issue/cloud-3333686
  • issue/cloud-3332491
  • issue/cloud-3334130
  • issue/cloud-3345121
  • issue/cloud-3334371
  • issue/cloud-3343041
  • issue/cloud-3334693
  • issue/cloud-3335024
  • issue/cloud-3335029
  • issue/cloud-3335061
  • issue/cloud-3335087
  • issue/cloud-3342932
  • issue/cloud-3344161
  • issue/cloud-3341767
  • issue/cloud-3345098
  • issue/cloud-3345130
  • issue/cloud-3350756
  • issue/cloud-3335392
  • issue/cloud-3335148
  • issue/cloud-3335656
  • issue/cloud-3335692
  • issue/cloud-3335976
  • issue/cloud-3335023
  • issue/cloud-3336208
  • issue/cloud-3336316
  • issue/cloud-3336577
  • issue/cloud-3336021
  • issue/cloud-3336803
  • issue/cloud-3337420
  • issue/cloud-3337751
  • issue/cloud-3337755
  • issue/cloud-3341768
  • issue/cloud-3345671
  • issue/cloud-3337802
  • issue/cloud-3338098
  • issue/cloud-3338102
  • issue/cloud-3344162
  • issue/cloud-3344856
  • issue/cloud-3344882
  • issue/cloud-3345783
  • issue/cloud-3338419
  • issue/cloud-3338437
  • issue/cloud-3338444
  • issue/cloud-3338794
  • issue/cloud-3339470
  • issue/cloud-3343034
  • issue/cloud-3343350
  • issue/cloud-3343582
  • issue/cloud-3345631
  • issue/cloud-3339774
  • issue/cloud-3339828
  • issue/cloud-3339860
  • issue/cloud-3340098
  • issue/cloud-3340135
  • issue/cloud-3340157
  • issue/cloud-3340431
  • issue/cloud-3340440
  • issue/cloud-3340454
  • issue/cloud-3340720
  • issue/cloud-3340731
  • issue/cloud-3340733
  • issue/cloud-3340739
  • issue/cloud-3340764
  • issue/cloud-3340875
  • issue/cloud-3341036
  • issue/cloud-3341158
  • issue/cloud-3341166
  • issue/cloud-3341225
  • issue/cloud-3341272
  • issue/cloud-3341453
  • issue/cloud-3341310
  • issue/cloud-3341759
  • issue/cloud-3341770
  • issue/cloud-3341772
  • issue/cloud-3324909
  • issue/cloud-3342217
  • issue/cloud-3342235
  • issue/cloud-3341766
  • issue/cloud-3342543
  • issue/cloud-3342559
  • issue/cloud-3343270
  • issue/cloud-3343591
  • issue/cloud-3343619
  • issue/cloud-3344152
  • issue/cloud-3344592
  • issue/cloud-3344860
  • issue/cloud-3345154
  • issue/cloud-3342631
  • issue/cloud-3342633
  • issue/cloud-3343275
  • issue/cloud-3346151
  • issue/cloud-3346177
  • issue/cloud-3346180
  • issue/cloud-3346196
  • issue/cloud-3346423
  • issue/cloud-3346385
  • issue/cloud-3346437
  • issue/cloud-3346439
  • issue/cloud-3346864
  • issue/cloud-3346876
  • issue/cloud-3346902
  • issue/cloud-3347135
  • issue/cloud-3347138
  • issue/cloud-3347147
  • issue/cloud-3347172
  • issue/cloud-3347213
  • issue/cloud-3347446
  • issue/cloud-3347542
  • issue/cloud-3347557
  • issue/cloud-3347743
  • issue/cloud-3347752
  • issue/cloud-3347756
  • issue/cloud-3347774
  • issue/cloud-3347890
  • issue/cloud-3348036
  • issue/cloud-3341769
  • issue/cloud-3348048
  • issue/cloud-3348082
  • issue/cloud-3348349
  • issue/cloud-3348370
  • issue/cloud-3352191
  • issue/cloud-3352626
  • issue/cloud-3348610
  • issue/cloud-3348611
  • issue/cloud-3348828
  • issue/cloud-3348833
  • issue/cloud-3348632
  • issue/cloud-3349074
  • issue/cloud-3349192
  • issue/cloud-3349209
  • issue/cloud-3349784
  • issue/cloud-3349803
  • issue/cloud-3349813
  • issue/cloud-3350051
  • issue/cloud-3349505
  • issue/cloud-3350094
  • issue/cloud-3350107
  • issue/cloud-3351774
  • issue/cloud-3351990
  • issue/cloud-3352343
  • issue/cloud-3352839
  • issue/cloud-3352843
  • issue/cloud-3353083
  • issue/cloud-3353128
  • issue/cloud-3352095
  • issue/cloud-3352284
  • issue/cloud-3352627
  • issue/cloud-3352840
  • issue/cloud-3352861
  • issue/cloud-3353134
  • issue/cloud-3352618
  • issue/cloud-3352836
  • issue/cloud-3353073
  • issue/cloud-3353144
  • issue/cloud-3351227
  • issue/cloud-3351815
  • issue/cloud-3352337
  • issue/cloud-3352821
  • issue/cloud-3353170
  • issue/cloud-3353175
  • issue/cloud-3353180
  • issue/cloud-3353296
  • issue/cloud-3353191
  • issue/cloud-3353380
  • issue/cloud-3353595
  • issue/cloud-3353930
  • issue/cloud-3354139
  • issue/cloud-3354236
  • issue/cloud-3354374
  • issue/cloud-3354376
  • issue/cloud-3354379
  • issue/cloud-3354502
  • issue/cloud-3354505
  • issue/cloud-3354736
  • issue/cloud-3354768
  • issue/cloud-3354809
  • issue/cloud-3355219
  • issue/cloud-3355236
  • issue/cloud-3355256
  • issue/cloud-3355302
  • issue/cloud-3355515
  • issue/cloud-3355903
  • issue/cloud-3355942
  • issue/cloud-3355954
  • issue/cloud-3355965
  • issue/cloud-3356158
  • issue/cloud-3356230
  • issue/cloud-3356454
  • issue/cloud-3356456
  • issue/cloud-3356527
  • issue/cloud-3356528
  • issue/cloud-3356531
  • issue/cloud-3356744
  • issue/cloud-3356758
  • issue/cloud-3356775
  • issue/cloud-3356778
  • issue/cloud-3356780
  • issue/cloud-3356995
  • issue/cloud-3357000
  • issue/cloud-3357013
  • issue/cloud-3357099
  • issue/cloud-3357058
  • issue/cloud-3357545
  • issue/cloud-3357753
  • issue/cloud-3358765
  • issue/cloud-3358769
  • issue/cloud-3358768
  • issue/cloud-3358789
  • issue/cloud-3358803
  • issue/cloud-3358945
  • issue/cloud-3359271
  • issue/cloud-3359275
  • issue/cloud-3359313
  • issue/cloud-3359518
  • issue/cloud-3360272
  • issue/cloud-3360861
  • issue/cloud-3360865
  • issue/cloud-3360866
  • issue/cloud-3360896
  • issue/cloud-3360927
  • issue/cloud-3361130
  • issue/cloud-3361362
  • issue/cloud-3361479
  • issue/cloud-3361611
  • issue/cloud-3361750
  • issue/cloud-3362575
  • issue/cloud-3362605
  • issue/cloud-3362795
  • issue/cloud-3362829
  • issue/cloud-3363078
  • issue/cloud-3363113
  • issue/cloud-3363458
  • issue/cloud-3363744
  • issue/cloud-3363771
  • issue/cloud-3363773
  • issue/cloud-3363995
  • issue/cloud-3364325
  • issue/cloud-3364381
  • issue/cloud-3364561
  • issue/cloud-3364562
  • issue/cloud-3364581
  • issue/cloud-3364582
  • issue/cloud-3364603
  • issue/cloud-3364689
  • issue/cloud-3364751
  • issue/cloud-3365043
  • issue/cloud-3365220
  • issue/cloud-3365221
  • issue/cloud-3365226
  • issue/cloud-3365514
  • issue/cloud-3365773
  • issue/cloud-3366067
  • issue/cloud-3366115
  • issue/cloud-3366345
  • issue/cloud-3366349
  • issue/cloud-3366350
  • issue/cloud-3366436
  • issue/cloud-3366614
  • issue/cloud-3366618
  • issue/cloud-3366641
  • issue/cloud-3366900
  • issue/cloud-3367141
  • issue/cloud-3367261
  • issue/cloud-3367394
  • issue/cloud-3367407
  • issue/cloud-3367408
  • issue/cloud-3367793
  • issue/cloud-3367795
  • issue/cloud-3367838
  • issue/cloud-3367848
  • issue/cloud-3368747
  • issue/cloud-3368924
  • issue/cloud-3369296
  • issue/cloud-3369298
  • issue/cloud-3369977
  • issue/cloud-3370000
  • issue/cloud-3370030
  • issue/cloud-3402291
  • issue/cloud-3402708
  • issue/cloud-3406367
  • issue/cloud-3406626
  • issue/cloud-3370376
  • issue/cloud-3370570
  • issue/cloud-3400344
  • issue/cloud-3370819
  • issue/cloud-3370824
  • issue/cloud-3370846
  • issue/cloud-3403931
  • issue/cloud-3400408
  • issue/cloud-3405792
  • issue/cloud-3406395
  • issue/cloud-3406669
  • issue/cloud-3401036
  • issue/cloud-3401432
  • issue/cloud-3403261
  • issue/cloud-3404490
  • issue/cloud-3404789
  • issue/cloud-3399268
  • issue/cloud-3401037
  • issue/cloud-3401472
  • issue/cloud-3405390
  • issue/cloud-3405417
  • issue/cloud-3406378
  • issue/cloud-3399270
  • issue/cloud-3401473
  • issue/cloud-3406140
  • issue/cloud-3402646
  • issue/cloud-3402982
  • issue/cloud-3399472
  • issue/cloud-3399772
  • issue/cloud-3402301
  • issue/cloud-3406159
  • issue/cloud-3401049
  • issue/cloud-3406113
  • issue/cloud-3406635
  • issue/cloud-3406675
  • issue/cloud-3399993
  • issue/cloud-3405084
  • issue/cloud-3405425
  • issue/cloud-3399443
  • issue/cloud-3401420
  • issue/cloud-3400001
  • issue/cloud-3404519
  • issue/cloud-3371211
  • issue/cloud-3371251
  • issue/cloud-3371479
  • issue/cloud-3371480
  • issue/cloud-3371514
  • issue/cloud-3371922
  • issue/cloud-3372114
  • issue/cloud-3372119
  • issue/cloud-3372366
  • issue/cloud-3372415
  • issue/cloud-3373050
  • issue/cloud-3373136
  • issue/cloud-3373299
  • issue/cloud-3373456
  • issue/cloud-3373754
  • issue/cloud-3373789
  • issue/cloud-3374262
  • issue/cloud-3374538
  • issue/cloud-3374266
  • issue/cloud-3375128
  • issue/cloud-3375264
  • issue/cloud-3375434
  • issue/cloud-3375481
  • issue/cloud-3375708
  • issue/cloud-3375818
  • issue/cloud-3375970
  • issue/cloud-3376004
  • issue/cloud-3376008
  • issue/cloud-3376108
  • issue/cloud-3376363
  • issue/cloud-3376471
  • issue/cloud-3376804
  • issue/cloud-3377028
  • issue/cloud-3377300
  • issue/cloud-3377611
  • issue/cloud-3377631
  • issue/cloud-3377667
  • issue/cloud-3377984
  • issue/cloud-3378118
  • issue/cloud-3378152
  • issue/cloud-3378661
  • issue/cloud-3378883
  • issue/cloud-3378898
  • issue/cloud-3378678
  • issue/cloud-3379058
  • issue/cloud-3379176
  • issue/cloud-3379178
  • issue/cloud-3379196
  • issue/cloud-3379427
  • issue/cloud-3379498
  • issue/cloud-3379581
  • issue/cloud-3379826
  • issue/cloud-3379831
  • issue/cloud-3379866
  • issue/cloud-3380153
  • issue/cloud-3380164
  • issue/cloud-3380403
  • issue/cloud-3380604
  • issue/cloud-3380806
  • issue/cloud-3380859
  • issue/cloud-3380867
  • issue/cloud-3380950
  • issue/cloud-3381113
  • issue/cloud-3381159
  • issue/cloud-3399745
  • issue/cloud-3400002
  • issue/cloud-3405430
  • issue/cloud-3381738
  • issue/cloud-3381795
  • issue/cloud-3382016
  • issue/cloud-3382020
  • issue/cloud-3382180
  • issue/cloud-3382217
  • issue/cloud-3382223
  • issue/cloud-3382242
  • issue/cloud-3382222
  • issue/cloud-3382427
  • issue/cloud-3382740
  • issue/cloud-3382739
  • issue/cloud-3382746
  • issue/cloud-3382783
  • issue/cloud-3383005
  • issue/cloud-3383010
  • issue/cloud-3383054
  • issue/cloud-3383248
  • issue/cloud-3383258
  • issue/cloud-3383329
  • issue/cloud-3383507
  • issue/cloud-3383575
  • issue/cloud-3383633
  • issue/cloud-3383636
  • issue/cloud-3383641
  • issue/cloud-3383642
  • issue/cloud-3383687
  • issue/cloud-3384450
  • issue/cloud-3384636
  • issue/cloud-3384506
  • issue/cloud-3385077
  • issue/cloud-3385085
  • issue/cloud-3385104
  • issue/cloud-3385244
  • issue/cloud-3385247
  • issue/cloud-3385269
  • issue/cloud-3385261
  • issue/cloud-3385308
  • issue/cloud-3385535
  • issue/cloud-3385807
  • issue/cloud-3385822
  • issue/cloud-3385981
  • issue/cloud-3386037
  • issue/cloud-3386224
  • issue/cloud-3386250
  • issue/cloud-3386259
  • issue/cloud-3386365
  • issue/cloud-3386366
  • issue/cloud-3386367
  • issue/cloud-3386384
  • issue/cloud-3386471
  • issue/cloud-3386601
  • issue/cloud-3386610
  • issue/cloud-3386619
  • issue/cloud-3386712
  • issue/cloud-3386739
  • issue/cloud-3386873
  • issue/cloud-3386883
  • issue/cloud-3387181
  • issue/cloud-3387448
  • issue/cloud-3387454
  • issue/cloud-3387479
  • issue/cloud-3387562
  • issue/cloud-3387722
  • issue/cloud-3387724
  • issue/cloud-3387728
  • issue/cloud-3387819
  • issue/cloud-3387854
  • issue/cloud-3387938
  • issue/cloud-3387987
  • issue/cloud-3388149
  • issue/cloud-3388428
  • issue/cloud-3388430
  • issue/cloud-3388435
  • issue/cloud-3388469
  • issue/cloud-3388533
  • issue/cloud-3388714
  • issue/cloud-3388999
  • issue/cloud-3389044
  • issue/cloud-3389063
  • issue/cloud-3389266
  • issue/cloud-3389343
  • issue/cloud-3389344
  • issue/cloud-3389352
  • issue/cloud-3389430
  • issue/cloud-3389433
  • issue/cloud-3389470
  • issue/cloud-3389474
  • issue/cloud-3389704
  • issue/cloud-3389830
  • issue/cloud-3390034
  • issue/cloud-3390522
  • issue/cloud-3390564
  • issue/cloud-3390573
  • issue/cloud-3390762
  • issue/cloud-3390897
  • issue/cloud-3390908
  • issue/cloud-3390991
  • issue/cloud-3391015
  • issue/cloud-3391487
  • issue/cloud-3391488
  • issue/cloud-3392084
  • issue/cloud-3392090
  • issue/cloud-3392095
  • issue/cloud-3392108
  • issue/cloud-3392127
  • issue/cloud-3392137
  • issue/cloud-3392305
  • issue/cloud-3392432
  • issue/cloud-3392783
  • issue/cloud-3392803
  • issue/cloud-3393133
  • issue/cloud-3393432
  • issue/cloud-3393448
  • issue/cloud-3393450
  • issue/cloud-3395061
  • issue/cloud-3396478
  • issue/cloud-3396494
  • issue/cloud-3396497
  • issue/cloud-3396782
  • issue/cloud-3396841
  • issue/cloud-3397568
  • issue/cloud-3397597
  • issue/cloud-3396795
  • issue/cloud-3397917
  • issue/cloud-3397921
  • issue/cloud-3398036
  • issue/cloud-3398238
  • issue/cloud-3398925
  • issue/cloud-3399189
  • issue/cloud-3406842
  • issue/cloud-3406908
  • issue/cloud-3406963
  • issue/cloud-3407721
  • issue/cloud-3407815
  • issue/cloud-3407818
  • issue/cloud-3407819
  • issue/cloud-3407826
  • issue/cloud-3407829
  • issue/cloud-3407830
  • issue/cloud-3407982
  • issue/cloud-3407990
  • issue/cloud-3408015
  • issue/cloud-3408028
  • issue/cloud-3408068
  • issue/cloud-3408070
  • issue/cloud-3408104
  • issue/cloud-3408343
  • issue/cloud-3408346
  • issue/cloud-3408134
  • issue/cloud-3408372
  • issue/cloud-3408385
  • issue/cloud-3408832
  • issue/cloud-3408899
  • issue/cloud-3408933
  • issue/cloud-3408939
  • issue/cloud-3408965
  • issue/cloud-3408967
  • issue/cloud-3409356
  • issue/cloud-3409363
  • issue/cloud-3409375
  • issue/cloud-3409382
  • issue/cloud-3409553
  • issue/cloud-3409555
  • issue/cloud-3446961
  • issue/cloud-3409889
  • issue/cloud-3409911
  • issue/cloud-3409916
  • issue/cloud-3410153
  • issue/cloud-3410164
  • issue/cloud-3410185
  • issue/cloud-3410475
  • issue/cloud-3410677
  • issue/cloud-3410766
  • issue/cloud-3410771
  • issue/cloud-3410780
  • issue/cloud-3410824
  • issue/cloud-3410830
  • issue/cloud-3410832
  • issue/cloud-3410852
  • issue/cloud-3410853
  • issue/cloud-3410955
  • issue/cloud-3410968
  • issue/cloud-3410970
  • issue/cloud-3411114
  • issue/cloud-3411116
  • issue/cloud-3411129
  • issue/cloud-3411135
  • issue/cloud-3411149
  • issue/cloud-3411154
  • issue/cloud-3413903
  • issue/cloud-3413926
  • issue/cloud-3413928
  • issue/cloud-3413929
  • issue/cloud-3414125
  • issue/cloud-3414192
  • issue/cloud-3414204
  • issue/cloud-3414209
  • issue/cloud-3414221
  • issue/cloud-3414223
  • issue/cloud-3415106
  • issue/cloud-3415190
  • issue/cloud-3415219
  • issue/cloud-3415363
  • issue/cloud-3415372
  • issue/cloud-3415697
  • issue/cloud-3416044
  • issue/cloud-3416628
  • issue/cloud-3418203
  • issue/cloud-3418510
  • issue/cloud-3420266
  • issue/cloud-3422779
  • issue/cloud-3422777
  • issue/cloud-3423102
  • issue/cloud-3424163
  • issue/cloud-3424203
  • issue/cloud-3424219
  • issue/cloud-3424234
  • issue/cloud-3424222
  • issue/cloud-3425376
  • issue/cloud-3425385
  • issue/cloud-3425508
  • issue/cloud-3425630
  • issue/cloud-3425894
  • issue/cloud-3425931
  • issue/cloud-3426516
  • issue/cloud-3426535
  • issue/cloud-3426534
  • issue/cloud-3426964
  • issue/cloud-3427185
  • issue/cloud-3426240
  • issue/cloud-3427759
  • issue/cloud-3428019
  • issue/cloud-3436665
  • issue/cloud-3428380
  • issue/cloud-3437561
  • issue/cloud-3437562
  • issue/cloud-3437563
  • issue/cloud-3437159
  • issue/cloud-3436606
  • issue/cloud-3443311
  • issue/cloud-3436314
  • issue/cloud-3443330
  • issue/cloud-3436316
  • issue/cloud-3431187
  • issue/cloud-3432015
  • issue/cloud-3432549
  • issue/cloud-3432891
  • issue/cloud-3432907
  • issue/cloud-3447759
  • issue/cloud-3447760
  • issue/cloud-3449171
  • issue/cloud-3452826
  • issue/cloud-3452874
  • issue/cloud-3452875
  • issue/cloud-3452876
  • issue/cloud-3458095
  • issue/cloud-3458421
  • issue/cloud-3458886
  • issue/cloud-3458887
  • issue/cloud-3458885
  • issue/cloud-3458897
  • issue/cloud-3461750
  • issue/cloud-3461928
  • issue/cloud-3464812
  • issue/cloud-3467938
  • issue/cloud-3487684
  • issue/cloud-3487704
  • issue/cloud-3488325
  • issue/cloud-3504976
  • issue/cloud-3505229
  • issue/cloud-3506005
  • issue/cloud-3506006
  • issue/cloud-3506535
1985 results
Show changes
Showing
with 5106 additions and 357 deletions
......@@ -3,8 +3,9 @@ type: module
description: 'Allows users to manage Cloud module by SPA Form.'
package: Cloud
configure: cloud_dashboard.settings
core_version_requirement: ^9.3
core_version_requirement: ^10.3 || ^11
dependencies:
- drupal:simple_oauth
- drupal:jsonapi
- drupal:geocoder
- cloud:cloud
<?php
/**
* @file
* Install and updates for cloud_dashboard.
*/
use Drupal\Component\Serialization\Yaml;
/**
* Add settings for cloud_dashboard.
*/
function cloud_dashboard_update_10101(): void {
$config_path = realpath(\Drupal::service('extension.path.resolver')->getPath('module', 'cloud_dashboard')) . '/config/install';
$filename = $config_path . '/cloud_dashboard.settings.yml';
$file = file_get_contents($filename);
if ($file) {
$values = Yaml::decode($file);
if (!empty($values) && is_array($values)) {
$config_factory = \Drupal::configFactory();
$config = $config_factory->getEditable('cloud_dashboard.settings');
foreach ($values ?: [] as $key => $value) {
if (!empty($config->get($key))) {
continue;
}
$config->set($key, $value);
}
$config->save();
}
}
}
/**
* Update config of the location map config uri.
*/
function k8s_update_8cloud_dashboard_update_10102(): void {
$config_path = realpath(\Drupal::service('extension.path.resolver')->getPath('module', 'cloud_dashboard')) . '/config/install';
$filename = $config_path . '/cloud_dashboard.settings.yml';
$file = file_get_contents($filename);
if ($file) {
$values = Yaml::decode($file);
if (!empty($values) && is_array($values) && isset($values['cloud_dashboard_location_map_config_uri'])) {
$config_factory = \Drupal::configFactory();
$config = $config_factory->getEditable('cloud_dashboard.settings');
$config->set('cloud_dashboard_location_map_config_uri', $values['cloud_dashboard_location_map_config_uri']);
$config->save();
}
}
}
react_app:
version: 5.x-dev
version: 8.x-dev
js:
js/2.chunk.js: { minified: true }
js/3.chunk.js: { minified: true }
js/main.chunk.js: { minified: true }
js/runtime-main.js: { minified: true }
js/index.js: { minified: true }
css:
theme:
css/2.chunk.css: { minified: true }
css/index.css: { minified: true }
......@@ -5,7 +5,12 @@
* Cloud Dashboard module.
*/
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\cloud\Service\CloudService;
/**
* Implements hook_help().
......@@ -25,3 +30,34 @@ function cloud_dashboard_help($route_name, RouteMatchInterface $route_match): st
return '';
}
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function cloud_dashboard_form_simple_oauth_authorize_form_alter(array &$form, FormStateInterface $form_state, $form_id): void {
// Make grant button as a btn-primary button.
$form['submit']['#prefix'] = '<div class="btn btn-primary">';
$form['submit']['#suffix'] = '</div>';
}
/**
* Implements hook_jsonapi_entity_filter_access().
*/
function cloud_dashboard_jsonapi_entity_filter_access(EntityTypeInterface $entity_type, AccountInterface $account) {
$entity_type_id = CloudService::convertUnderscoreToWhitespace($entity_type->id());
$mapping = [
'cloud launch template' => 'cloud server template',
'openstack stack event' => 'openstack stack',
'openstack stack resource' => 'openstack stack',
];
if (!empty($mapping[$entity_type_id])) {
$entity_type_id = $mapping[$entity_type_id];
}
$permission = 'list ' . ($entity_type_id === 'cloud launch template' ? 'cloud server template' : $entity_type_id);
return [
JSONAPI_FILTER_AMONG_ALL => AccessResult::allowedIfHasPermission($account, $permission),
];
}
......@@ -18,7 +18,7 @@ cloud_dashboard.endpoint1:
_title: Cloud Dashboard
_form: '\Drupal\cloud_dashboard\Form\React\CloudDashboardForm'
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# Ex.
# * /clouds/dashboard/aws_cloud/instance
......@@ -30,7 +30,7 @@ cloud_dashboard.endpoint2:
_title: Cloud Dashboard
_form: '\Drupal\cloud_dashboard\Form\React\CloudDashboardForm'
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# Ex.
# * /clouds/dashboard/aws_cloud/sample_client1/instance
......@@ -41,7 +41,7 @@ cloud_dashboard.endpoint3:
_title: Cloud Dashboard
_form: '\Drupal\cloud_dashboard\Form\React\CloudDashboardForm'
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# Ex.
# * /clouds/dashboard/aws_cloud/sample_client1/instance/1
......@@ -52,7 +52,7 @@ cloud_dashboard.endpoint4:
_title: Cloud Dashboard
_form: '\Drupal\cloud_dashboard\Form\React\CloudDashboardForm'
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# Ex.
# * /clouds/dashboard/aws_cloud/sample_client1/instance/1/edit
......@@ -63,7 +63,17 @@ cloud_dashboard.endpoint5:
_title: Cloud Dashboard
_form: '\Drupal\cloud_dashboard\Form\React\CloudDashboardForm'
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# Ex.
# * /clouds/dashboard/openstack/sample_client3/image/6/resource/1
cloud_dashboard.endpoint6:
path: '/clouds/dashboard/{parameter1}/{parameter2}/{parameter3}/{parameter4}/{parameter5}/{parameter6}'
defaults:
_title: Cloud Dashboard
_form: '\Drupal\cloud_dashboard\Form\React\CloudDashboardForm'
requirements:
_permission: 'access dashboard'
# Cloud Admin Settings.
cloud_dashboard.settings:
......@@ -72,7 +82,7 @@ cloud_dashboard.settings:
_title: 'Cloud Dashboard'
_form: '\Drupal\cloud_dashboard\Form\Config\CloudDashboardAdminSettings'
requirements:
_permission: 'administer'
_permission: 'administer cloud'
# Callback URI for Cloud Admin Settings.
cloud_dashboard.callback_uri:
......@@ -101,7 +111,7 @@ cloud_dashboard.jsonapi_server_uri:
_controller: '\Drupal\cloud_dashboard\Controller\CloudDashboardConfigController::getJsonApiServerUri'
methods: [GET]
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# URL of the image to be displayed as the default marker icon in Leaflet.js.
cloud_dashboard.marker_icon_uri:
......@@ -110,7 +120,7 @@ cloud_dashboard.marker_icon_uri:
_controller: '\Drupal\cloud_dashboard\Controller\CloudDashboardConfigController::getMakerIconUri'
methods: [GET]
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# The URL of the coordinate data for drawing the world map, expressed in GeoJson format.
cloud_dashboard.map_geojson_uri:
......@@ -119,4 +129,22 @@ cloud_dashboard.map_geojson_uri:
_controller: '\Drupal\cloud_dashboard\Controller\CloudDashboardConfigController::getMapGeoJsonUri'
methods: [GET]
requirements:
_permission: 'administer'
_permission: 'access dashboard'
# Configuration information about the location map.
cloud_dashboard.location_map_config:
path: '/clouds/cloud_dashboard/config/location_map_config'
defaults:
_controller: '\Drupal\cloud_dashboard\Controller\CloudDashboardConfigController::getLocationMapConfig'
methods: [GET]
requirements:
_permission: 'access dashboard'
# By turning on this option, the loading spinner icon is disabled for the debug purpose.
cloud_dashboard.bypass_animation:
path: '/clouds/cloud_dashboard/config/bypass_animation'
defaults:
_controller: '\Drupal\cloud_dashboard\Controller\CloudDashboardConfigController::getBypassAnimation'
methods: [GET]
requirements:
_permission: 'access dashboard'
v15.14.0
v16.19.0
# Build cloud_dashboard
export YARN='yarn'
if [ "$(cat /etc/issue | grep -e Debian -e Ubuntu)" ]; then
export YARN='yarnpkg'
fi
#!/bin/bash
# Read the .po file and convert it to translation code.
sed '/^#/d;/^$/d' ../../../translations/ja.po |
tr '\n' ' ' |
sed 's/ msgid /\nmsgid /g' |
sed 's/ msgstr /\nmsgstr /g' |
sed 's/ msgstr\[0\] /\nmsgstr /g' |
sed 's/ msgstr\[1\] /\nmsgstr /g' |
sed 's/ msgid_plural /\nmsgid /g' |
sed '/^msgstr/d' |
sed 's/msgid "" "/msgid "/g' |
sed 's/" "/\\n/g' |
sed '/^msgid ""/d' |
sort |
uniq |
sed -n 's/^msgid "\(.*\)"/Drupal.t("\1");/p' > src/constant/translations/translation.ts
"${YARN}" react-scripts build
# Build cloud_dashboard
npx vite build
# Remove old files
rm -f ../js/2.chunk.js
rm -f ../js/3.chunk.js
rm -f ../js/main.chunk.js
rm -f ../js/runtime-main.js
rm -f ../css/2.chunk.css
rm -f ../js/index.js
rm -f ../css/index.css
# Copy new files from build directory
cp build/static/js/2.*.chunk.js ../js/2.chunk.js
cp build/static/js/3.*.chunk.js ../js/3.chunk.js
cp build/static/js/main.*.chunk.js ../js/main.chunk.js
cp build/static/js/runtime-main.*.js ../js/runtime-main.js
cp build/static/css/2.*.chunk.css ../css/2.chunk.css
cp build/assets/index.*.js ../js/index.js
cp build/assets/index.*.css ../css/index.css
# Add csslint ignore to bypass DrupalCI checking
# of the compiled css file.
tee ../css/index.css >/dev/null << EOF
/* stylelint-disable */
/* csslint ignore:start */
$(cat ../css/index.css)
/* csslint ignore:end */
EOF
......@@ -9,6 +9,8 @@
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script>window.global = window;</script>
<script type="module" src="/src/index.tsx"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
</body>
......
This diff is collapsed.
{
"name": "cloud_dashboard",
"version": "0.1.0",
"private": true,
"dependencies": {
"@docomoinnovations/horizon-chart": "^1.1.0",
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"@types/chart.js": "^2.9.34",
"@types/d3": "^7.1.0",
"@types/jest": "^26.0.15",
"@types/leaflet": "^1.7.5",
"@types/node": "^12.0.0",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@types/react-leaflet": "^2.8.2",
"@types/react-loader-spinner": "^4.0.0",
"@types/react-router-dom": "^5.1.7",
"bootstrap-icons": "^1.8.2",
"chart.js": "2.9.4",
"d3": "^7.1.1",
"i18next": "^21.3.2",
"leaflet": "^1.7.1",
"react": "^17.0.2",
"react-bootstrap": "^2.4.0",
"react-chartjs-2": "2.11.1",
"react-dom": "^17.0.2",
"react-i18next": "^11.12.0",
"react-icons": "^4.3.1",
"react-leaflet": "^3.2.2",
"react-loader-spinner": "^4.0.0",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"typescript": "^4.1.2",
"web-vitals": "^1.0.1"
},
"version": "0.1.0",
"type": "module",
"scripts": {
"start": "react-scripts start",
"dev": "vite",
"build": "sh build.sh",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
"preview": "vite preview",
"test": "tsc"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"dependencies": {
"@docomoinnovations/horizon-chart": "^1.1.0",
"d3": "^7.8.5",
"leaflet": "^1.9.4",
"react": "^18.2.0",
"react-bootstrap": "^2.8.0",
"react-dom": "^18.2.0",
"react-leaflet": "^4.2.1",
"react-loader-spinner": "^5.4.5",
"react-router-dom": "^5.3.4"
},
"resolutions": {
"@typescript-eslint/typescript-estree": "5.9.0"
"devDependencies": {
"@types/d3": "^7.4.0",
"@types/leaflet": "^1.9.4",
"@types/react": "^18.2.21",
"@types/react-dom": "^18.2.7",
"@types/react-router-dom": "^5.3.3",
"@vitejs/plugin-react": "^2.2.0",
"typescript": "^4.6.4",
"vite": "^3.2.3",
"vite-tsconfig-paths": "^4.2.1"
}
}
import App from 'App';
import { render, screen } from '@testing-library/react';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
import 'leaflet/dist/leaflet.css';
import 'react-loader-spinner/dist/loader/css/react-spinner-loader.css';
import { ROUTE_URL } from 'constant/other';
import { BypassAnimationContext, useBypassAnimation } from 'hooks/bypass_animation';
import { CloudContextListContext, useCloudContextList } from 'hooks/cloud_context_list';
import {
OpenStackHeatFormTemplateContext, useOpenStackHeatFormTemplate
} from 'hooks/openstack_heat_form_template';
import { StatusMessageContext, useStatusMessage } from 'hooks/status_message';
import { UserInformationContext, useUserInformation } from 'hooks/user_information';
import CallbackPage from 'pages/CallbackPage';
import CloudProjectPage from 'pages/CloudProjectPage';
import CloudResourceStorePage from 'pages/CloudResourceStorePage';
import CloudServerTemplatePage from 'pages/CloudServerTemplatePage';
import CloudStorePage from 'pages/CloudStorePage';
import EntityCreatePage from 'pages/EntityCreatePage';
import EntityDetailPage from 'pages/EntityDetailPage';
import EntitySubDetailPage from 'pages/EntitySubDetailPage';
import EntityViewPage from 'pages/EntityViewPage';
import EntityXxudPage from 'pages/EntityXxudPage';
import LoginPage from 'pages/LoginPage';
import OpenStackHeatInputExtraPage from 'pages/openstack/heat/OpenStackHeatInputExtraPage';
import OpenStackHeatInputTemplatePage from 'pages/openstack/heat/OpenStackHeatInputTemplatePage';
import OpenStackInstanceActionLogPage from 'pages/openstack/instance/OpenStackInstanceActionLogPage';
import OpenStackInstanceConsoleOutputPage from 'pages/openstack/instance/OpenStackInstanceConsoleOutputPage';
import OpenStackInstanceConsolePage from 'pages/openstack/instance/OpenStackInstanceConsolePage';
import ProviderPage from 'pages/ProviderPage';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import { AppContext, useAppState } from 'service/state';
import TemplateCreatePage from 'pages/TemplateCreatePage';
import { useEffect } from 'react';
import { Route, Switch, useLocation } from 'react-router-dom';
import { DataTableSelectedRowsContext, useDataTableSelectedRows } from 'hooks/data_table_selected_row';
/**
* Application routes.
*/
const routes = [
{ path: '/', component: LoginPage, exact: true },
{ path: '/callback', component: CallbackPage },
{ path: '/providers', component: ProviderPage },
{ path: '/k8s_cost_store', component: () => <CloudStorePage bundleId="k8s_cost_store" /> },
{ path: '/k8s_namespace_resource_store', component: () => <CloudStorePage bundleId="k8s_namespace_resource_store" /> },
{ path: '/k8s_node_resource_store', component: () => <CloudStorePage bundleId="k8s_node_resource_store" /> },
{ path: '/k8s_pod_resource_store', component: () => <CloudStorePage bundleId="k8s_pod_resource_store" /> },
{ path: '/design/:cloudServiceProvider/server_template_list', component: CloudServerTemplatePage },
{ path: '/design/server_template/:cloudContext/:cloudServiceProvider/add', component: TemplateCreatePage },
{ path: '/design/server_template/:cloudContext/:entityId/:action', component: () => <EntityXxudPage entityName="cloud_launch_template" /> },
{ path: '/design/server_template/:cloudContext/:entityId', component: () => <EntityDetailPage entityName="cloud_launch_template" /> },
{ path: '/design/server_template/:cloudContext', component: CloudServerTemplatePage },
{ path: '/:cloudServiceProvider/cloud_project', component: CloudProjectPage },
{ path: '/:cloudServiceProvider/:cloudContext/cloud_project', component: CloudProjectPage },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName/:entityId/remove_interface/:subEntityId', component: () => <EntityXxudPage entityName="port" anotherEntityName="interface" action="delete" entityId="subEntityId" /> },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName/:entityId/:subType/:subEntityId', component: EntitySubDetailPage },
{ path: '/openstack/:cloudContext/stack/:entityId/edit', component: () => <OpenStackHeatInputTemplatePage action="edit" titleText="Edit @name" />, exact: true },
{ path: '/openstack/:cloudContext/stack/:entityId/edit_extra', component: () => <OpenStackHeatInputExtraPage action="edit" titleText="Edit @name" />, exact: true },
{ path: '/openstack/:cloudContext/instance/:entityId/console_output', component: OpenStackInstanceConsoleOutputPage, exact: true },
{ path: '/openstack/:cloudContext/instance/:entityId/console', component: OpenStackInstanceConsolePage, exact: true },
{ path: '/openstack/:cloudContext/instance/:entityId/action_log', component: OpenStackInstanceActionLogPage, exact: true },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName/:entityId/:action', component: EntityXxudPage },
{ path: '/openstack/:cloudContext/stack/add', component: () => <OpenStackHeatInputTemplatePage action="create" titleText="Add stack - template" />, exact: true },
{ path: '/openstack/:cloudContext/stack/add_extra', component: () => <OpenStackHeatInputExtraPage action="create" titleText="Add stack - template" />, exact: true },
{ path: '/openstack/:cloudContext/stack/preview', component: () => <OpenStackHeatInputTemplatePage action="preview" titleText="Preview stack - template" />, exact: true },
{ path: '/openstack/:cloudContext/stack/preview_extra', component: () => <OpenStackHeatInputExtraPage action="preview" titleText="Preview stack - template" />, exact: true },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName/add', component: () => <EntityCreatePage action="create" />, exact: true },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName/import', component: () => <EntityCreatePage action="import" />, exact: true },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName/:entityId', component: EntityDetailPage },
{ path: '/:cloudServiceProvider/:cloudContext/:entityName', component: EntityViewPage },
{ path: '/:cloudServiceProvider/:entityName', component: EntityViewPage },
];
/**
* Component for application route.
*/
const App = () => {
const appState = useAppState();
const statusMessage = useStatusMessage();
const cloudContextList = useCloudContextList();
const bypassAnimation = useBypassAnimation();
const userInformation = useUserInformation();
const heatTemplate = useOpenStackHeatFormTemplate();
const dataTableSelectedRows = useDataTableSelectedRows();
const location = useLocation();
useEffect(() => {
statusMessage.removeAllMessage();
}, [location]);
return <BrowserRouter basename={ROUTE_URL}>
<Switch>
<Route exact path="/">
<LoginPage />
</Route>
<Route path="/callback">
<CallbackPage />
</Route>
<AppContext.Provider value={appState}>
<Route path="/providers">
<ProviderPage />
</Route>
<Route path="/k8s_cost_store">
<CloudResourceStorePage bundleId="k8s_cost_store" />
</Route>
<Route path="/k8s_namespace_resource_store">
<CloudResourceStorePage bundleId="k8s_namespace_resource_store" />
</Route>
<Route path="/k8s_node_resource_store">
<CloudResourceStorePage bundleId="k8s_node_resource_store" />
</Route>
<Route path="/k8s_pod_resource_store">
<CloudResourceStorePage bundleId="k8s_pod_resource_store" />
</Route>
<Switch>
<Route path="/:cloudServiceProvider/project">
<CloudProjectPage />
</Route>
<Route path="/:cloudServiceProvider/server_template">
<CloudServerTemplatePage />
</Route>
<Switch>
<Route path="/:cloudServiceProvider/:cloudContext/project">
<CloudProjectPage />
</Route>
<Route path="/:cloudServiceProvider/:cloudContext/server_template">
<CloudServerTemplatePage />
</Route>
<Route path="/:cloudServiceProvider/:cloudContext/:entityName/:entityId/:action">
<EntityXxudPage />
</Route>
<Route exact path="/:cloudServiceProvider/:cloudContext/:entityName/create">
<EntityCreatePage />
</Route>
<Route path="/:cloudServiceProvider/:cloudContext/:entityName/:entityId">
<EntityDetailPage />
</Route>
<Route path="/:cloudServiceProvider/:cloudContext/:entityName">
<EntityViewPage />
</Route>
<Route path="/:cloudServiceProvider/:entityName">
<EntityViewPage />
</Route>
</Switch>
</Switch>
</AppContext.Provider>
</Switch>
</BrowserRouter>;
return <CloudContextListContext.Provider value={cloudContextList}>
<BypassAnimationContext.Provider value={bypassAnimation}>
<StatusMessageContext.Provider value={statusMessage}>
<UserInformationContext.Provider value={userInformation}>
<OpenStackHeatFormTemplateContext.Provider value={heatTemplate}>
<DataTableSelectedRowsContext.Provider value={dataTableSelectedRows}>
<Switch>
{routes.map((route, i) => (
<Route key={i} exact={route.exact} path={route.path} component={route.component} />
))}
</Switch>
</DataTableSelectedRowsContext.Provider>
</OpenStackHeatFormTemplateContext.Provider>
</UserInformationContext.Provider>
</StatusMessageContext.Provider>
</BypassAnimationContext.Provider>
</CloudContextListContext.Provider>;
}
......
This diff is collapsed.
import { Form } from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
/**
* Label parts in form.
*
* @param children Children Node.
*/
const FormSelect = ({ value, setvalue, dataList }: {
const FormSelect = ({ value, setvalue, dataList, className }: {
value: string,
setvalue: (s: string) => void,
dataList: string[]
dataList: string[],
className?: string
}) => {
const { t } = useTranslation();
return <Form.Select value={value}
return <Form.Select className={className} value={value}
onChange={(e) => {
setvalue(e.currentTarget.value);
}}>
<option value="">- {t('All')} -</option>
<option value="">- {Drupal.t('All')} -</option>
{dataList.map((data) => {
return <option value={data} key={data}>{data}</option>
})}
......
/**
* The wrapper of glyphicon.
* @param type The type of glyphicon.
* @param unMargin Whether to remove the right margin.
*/
const Glyphicon = ({ type, unMargin}: {
type: string,
unMargin?: boolean,
}) => {
return <span className={`glyphicon glyphicon-${type}`} style={
unMargin ? {'marginRight': 0} : {}
}></span>;
}
export default Glyphicon;
import Glyphicon from 'atoms/Glyphicon';
import { LABEL_ICON_LIST } from 'constant/others/other';
/**
* Return the translated text with icon.
* @param text The text to be translated.
*/
const LabelText = ({ text, args }: {
text: string;
args?: Record<string, string>;
}) => {
let iconInfo = LABEL_ICON_LIST.matches.find((record) => {
return record.label === text;
});
if (!iconInfo) {
iconInfo = LABEL_ICON_LIST.contains.find((record) => {
return text.includes(record.label);
});
}
return (
<>
{
iconInfo
? <Glyphicon type={iconInfo.icon} />
: <></>
} {Drupal.t(text, args)}
</>
);
};
export default LabelText;
import useDrupalTranslation from 'hooks/drupal_translation';
import { Card } from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
const PanelWrapper = ({ children, title }: {
children: React.ReactNode,
title: string
}) => {
const { t } = useTranslation();
const { t } = useDrupalTranslation();
return <details className="card" open>
<summary role="button" aria-expanded="true" area-pressed="true"
......@@ -14,6 +15,7 @@ const PanelWrapper = ({ children, title }: {
{children}
</Card.Body>
</details>;
}
export default PanelWrapper;
import { BsChevronDown, BsChevronUp } from 'react-icons/bs';
/**
* Icon glyph for showing sort direction.
*
* @param direction Sort direction.
*/
const SortDirectionIcon = ({ direction }: { direction: "ASC" | "DESC" }) => {
const SortDirectionIcon = ({ direction }: { direction: 'ASC' | 'DESC' }) => {
switch (direction) {
case 'ASC':
return <BsChevronUp aria-hidden="true" data-toggle="tooltip"
data-placement="bottom" title=""
data-original-title="Sort by descending order" />;
return <span className='caret downarrow'></span>;
case 'DESC':
return <BsChevronDown aria-hidden="true" data-toggle="tooltip"
data-placement="bottom" title=""
data-original-title="Sort by ascending order" />;
return <span className='caret'></span>;
}
};
......
import EntityInfoTemplate from 'model/EntityInfoTemplate';
const OPENSTACK_NETWORK_INTERFACE_TEMPLATE: EntityInfoTemplate = {
cloudServiceProvider: 'openstack',
entityName: 'network_interface',
entityRecords: [
{
panelName: 'Network interface',
tableRecordList: [],
keyValueRecords: [
{ labelName: 'Description', name: 'description', type: 'default' },
{ labelName: 'Network interface ID', name: 'network_interface_id', type: 'default' },
{ labelName: 'Instance ID', name: 'instance_id', type: 'default' },
{ labelName: 'Allocation ID', name: 'allocation_id', type: 'default' },
{ labelName: 'Mac Address', name: 'mac_address', type: 'default' },
{ labelName: 'Device Index', name: 'device_index', type: 'number' },
{ labelName: 'Status', name: 'status', type: 'default' },
{ labelName: 'Delete on Termination', name: 'delete_on_termination', type: 'default' },
{ labelName: 'Created', name: 'created', type: 'datetime' },
]
},
{
panelName: 'Network',
tableRecordList: [],
keyValueRecords: [
{ labelName: 'Security Groups', name: 'security_groups', type: 'default' },
{ labelName: 'VPC ID', name: 'vpc_id', type: 'default' },
{ labelName: 'CIDR Block', name: 'cidr_block', type: 'default' },
{ labelName: 'Subnet ID', name: 'subnet_id', type: 'default' },
{ labelName: 'Public IPs', name: 'public_ips', type: 'default' },
{ labelName: 'Primary Private IP', name: 'primary_private_ip', type: 'default' },
{ labelName: 'Secondary Private IPs', name: 'secondary_private_ips', type: 'default' },
{ labelName: 'Private DNS', name: 'private_dns', type: 'default' },
]
},
{
panelName: 'Attachment',
tableRecordList: [],
keyValueRecords: [
{ labelName: 'Attachment ID', name: 'attachment_id', type: 'default' },
{ labelName: 'Attachment Owner', name: 'attachment_owner', type: 'default' },
{ labelName: 'Attachment Status', name: 'attachment_status', type: 'default' },
]
},
{
panelName: 'Owner',
tableRecordList: [],
keyValueRecords: [
{ labelName: 'AWS account ID', name: 'account_id', type: 'default' },
]
},
{
panelName: 'Others',
tableRecordList: [],
keyValueRecords: [
{ labelName: 'Cloud service provider ID', name: 'cloud_context', type: 'default' },
]
},
]
};
export default OPENSTACK_NETWORK_INTERFACE_TEMPLATE;