cpee 1.3.173 → 1.3.174

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/ui.css +31 -17
  3. data/cockpit/index.html +27 -21
  4. data/cockpit/js/instance.js +74 -46
  5. data/cockpit/js/wfadaptor.cpee.js +1 -1
  6. data/cockpit/lib/{contextmenu.css → custommenu.css} +14 -8
  7. data/cockpit/lib/custommenu.js +101 -0
  8. data/cpee.gemspec +1 -1
  9. data/lib/cpee/controller.rb +1 -1
  10. data/lib/cpee/handler_properties.rb +2 -0
  11. data/lib/cpee/implementation.rb +5 -3
  12. data/server/handlerwrappers/default.rb +5 -0
  13. data/server/instances/12/notifications/7ace1a6f6974fe3574107a19b5e9d036/consumer-secret +1 -0
  14. data/server/instances/12/notifications/7ace1a6f6974fe3574107a19b5e9d036/producer-secret +1 -0
  15. data/server/instances/12/notifications/7ace1a6f6974fe3574107a19b5e9d036/subscription.xml +33 -0
  16. data/server/instances/15/properties.xml +44 -0
  17. data/server/instances/16/properties.xml +44 -0
  18. data/server/instances/17/properties.xml +44 -0
  19. data/server/instances/18/properties.xml +45 -0
  20. data/server/instances/19/properties.xml +45 -0
  21. data/server/instances/20/properties.xml +46 -0
  22. data/server/instances/21/properties.xml +46 -0
  23. data/server/instances/22/notifications/f9c504b8c715ec94a99fc3c6a660c53a/consumer-secret +1 -0
  24. data/server/instances/22/notifications/f9c504b8c715ec94a99fc3c6a660c53a/producer-secret +1 -0
  25. data/server/instances/22/notifications/f9c504b8c715ec94a99fc3c6a660c53a/subscription.xml +23 -0
  26. data/server/instances/22/properties.xml +112 -0
  27. data/server/instances/23/notifications/0a5a059f4ae897aee1446d560210dec0/consumer-secret +1 -0
  28. data/server/instances/23/notifications/0a5a059f4ae897aee1446d560210dec0/producer-secret +1 -0
  29. data/server/instances/23/notifications/0a5a059f4ae897aee1446d560210dec0/subscription.xml +23 -0
  30. data/server/instances/23/properties.xml +148 -0
  31. data/server/resources/properties.init +4 -2
  32. data/server/resources/properties.schema.active +2 -5
  33. data/server/resources/properties.schema.finished +2 -5
  34. data/server/resources/properties.schema.inactive +2 -5
  35. data/server/resources/topics.xml +3 -0
  36. data/server/server.pid +1 -0
  37. metadata +23 -4
  38. data/cockpit/lib/contextmenu.js +0 -63
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 634af027b5d421c3970d9b0a4c9ca41dd7e591f4
4
- data.tar.gz: c7f933eb5da1e8caca0840f04e8261c6ddc87943
3
+ metadata.gz: 57b2bcb0a54d9ba22dfe122a16356af176febe0d
4
+ data.tar.gz: b268f6cedef78bc4265d8564fdb72f7f940daaf6
5
5
  SHA512:
6
- metadata.gz: 46c1fe5f626db906f673df9ff082c15ab03aae33fc79ad1feb4b2a873cf804f97b54d50c403b726d8399891c4058377dd2a14eee3f0ff6a79bbbcc58f758cd4b
7
- data.tar.gz: 898e37f45da9d133ddcf0c10392c347ab88832387873a314892a85b679a7ddcb230ab3f7c7c382425762c624d45bbef1831b7bb2e567d216ce4abe69feeebb2a
6
+ metadata.gz: 37cc26d6baf204364d8b6852e8948c1a49bf6c47729aa7a8d323d5fc9e552d5e099e451562cfa5f58d747e629659f22829e8329b7690a3f384c8ee022bbe5e8e
7
+ data.tar.gz: a018352784375f69df6129f536d6d10a35cfc355c64b07b922962250165f4efc1174351d27763214f4e10fafc44bfaf25ed85037572b0de1b20ba9b8eb809500
@@ -3,8 +3,23 @@ body {
3
3
  -moz-user-select: -moz-none;
4
4
  -ms-user-select: none;
5
5
  user-select: none;
6
+ font-family: sans-serif;
7
+ font-size: 1em;
6
8
  }
7
9
 
10
+ button {
11
+ padding: .5em 2em .55em;
12
+ border: 1px solid ButtonShadow;
13
+ border-radius: 0.2em;
14
+ padding: 0px;
15
+ margin: 0;
16
+ font-family: sans-serif;
17
+ font-size: 0.9em;
18
+ background: ButtonFace;
19
+ background: -webkit-gradient(linear, left top, left bottom, from(ButtonHighlight), to(ButtonFace));
20
+ background: -moz-linear-gradient(top, ButtonHighlight, ButtonFace);
21
+ }
22
+ input { font-family: sans-serif; font-size: 1em; }
8
23
 
9
24
  #areanew { height: 7em; }
10
25
  #areanew td:nth-child(1) { width: 7em; padding-right: 1em; }
@@ -20,7 +35,6 @@ div.tabbed table.tabbar td.tabbehind input {
20
35
  }
21
36
 
22
37
  div.tabbed table.tabbar td.tabbehind button {
23
- border: 1pt solid buttonshadow;
24
38
  margin-left: 0.5em;
25
39
  }
26
40
 
@@ -31,22 +45,22 @@ button.highlight { background-color: #cc0000; }
31
45
  #areadataelements { height: 100%; overflow-x: hidden; overflow-y: scroll; }
32
46
  #areaendpoints { height: 100%; overflow: auto; }
33
47
 
34
- #areainstance { height: 7em; overflow: hidden; }
35
- #areainstance input { padding: 0; margin:0; }
36
- #areainstance button { white-space:nowrap; }
37
- #areainstance select { width: 18em; }
38
- #areainstance input[type=file] { width: 18em; }
39
-
40
-
41
- #areainstance table.compact tbody.loadsave td:nth-child(2) { padding-right: 0.5em; }
42
- #areainstance table.compact tbody.loadsave td:nth-child(3) { padding: 0 0.5em; border-left: 1px solid ButtonShadow; }
43
- #areainstance table.compact tbody.loadsave td:nth-child(3) button { height: 5em; }
44
- #areainstance table.compact tbody.loadsave td:nth-child(4) { padding: 0 0.5em; border-left: 1px solid ButtonShadow; }
45
- #areainstance table.compact tbody.loadsave td:nth-child(4) button { height: 5em; }
46
-
47
- #areainstance table.compact button[name=loadmodeltype] { width: 10em; }
48
- #areainstance table.compact button[name=loadtestset] { width: 10em; }
49
- #areainstance table.compact button[name=loadmodelfile] { width: 10em; }
48
+ #areainstance input[type=file] { display: none; }
49
+ #areainstance div.section { display: table-cell; vertical-align: middle; }
50
+ #areainstance div.section:nth-child(1) { padding: 0 0.5em 0 0; }
51
+ #areainstance div.section:nth-child(2) { border-left: 1px solid ButtonShadow; padding: 0 0.5em; }
52
+ #areainstance div.section:nth-child(3) { border-left: 1px solid ButtonShadow; padding: 0 0 0 0.5em; }
53
+
54
+ #areainstance div.section:nth-child(1) div { vertical-align: middle; margin: 0; padding: 0; }
55
+ #areainstance div.section:nth-child(1) button { vertical-align: middle; margin: 0; padding: 0; }
56
+ #areainstance div.section:nth-child(1) div:nth-child(2) { text-align: right; }
57
+ #areainstance div.section:nth-child(1) button[name=loadtestset] { width: 10em; height: 3.5em; }
58
+ #areainstance div.section:nth-child(1) button[name=loadtestsetfile] { width: 10em; height: 3.5em; margin-left: 0.2em; }
59
+ #areainstance div.section:nth-child(1) button[name=loadmodelfile] { width: 10em; height: 2em; margin-top: 0.2em; }
60
+
61
+ #areainstance div.section:nth-child(2) button { width: 6em; height: 4.5em; vertical-align: middle; margin: 0; padding: 0; }
62
+ #areainstance div.section:nth-child(3) div { vertical-align: middle; margin: 0; padding: 0; }
63
+ #areainstance div.section:nth-child(3) button[name=loadmodeltype] { width: 10em; height: 2em; }
50
64
 
51
65
  #areaexecution { height: 7em; overflow: auto; }
52
66
  #areaexecution input { padding: 0; margin:0; }
@@ -36,12 +36,12 @@
36
36
  <script type="text/javascript" src="lib/jquery.cookie.js"></script>
37
37
  <script type="text/javascript" src="lib/jquery.redraw.js"></script>
38
38
 
39
- <script type="text/javascript" src="lib/contextmenu.js"></script>
39
+ <script type="text/javascript" src="lib/custommenu.js"></script>
40
40
  <script type="text/javascript" src="lib/wfadaptor.js"></script>
41
41
  <script type="text/javascript" src="lib/ui.js"></script>
42
42
 
43
43
  <link rel="stylesheet" href="lib/wfadaptor.css" type="text/css"/>
44
- <link rel="stylesheet" href="lib/contextmenu.css" type="text/css"/>
44
+ <link rel="stylesheet" href="lib/custommenu.css" type="text/css"/>
45
45
  <link rel="stylesheet" href="lib/ui.css" type="text/css"/>
46
46
 
47
47
  <!-- custom stuff, play arround -->
@@ -104,7 +104,6 @@
104
104
  <button id='icontinue' disabled='disabled'>Continue</button>
105
105
  </p>
106
106
  </div>
107
-
108
107
 
109
108
  <!-- The following six are templates that get used during ui generation, change them carefully -->
110
109
  <table id="dat_template_pair" class='hidden'> <!--{{{-->
@@ -164,6 +163,9 @@
164
163
  </tr>
165
164
  </table> <!--}}}-->
166
165
 
166
+ <div class='menu' id='predefinedtestsets'></div>
167
+ <div class='menu' id='modeltypes'></div>
168
+
167
169
  <div class="tabbed" id="instance">
168
170
  <table class="tabbar">
169
171
  <tr>
@@ -191,24 +193,28 @@
191
193
  </table>
192
194
  </div> <!--}}}-->
193
195
  <div id="areainstance" class="inactive"> <!--{{{-->
194
- <table class='compact'>
195
- <tbody class='loadsave'>
196
- <tr>
197
- <td><input type='file' name='testsetfile' id='testsetfile' style='display:none'/><select title='a testset includes various setting, subscriptions and a model' name="testset-names"><optgroup label='Local Files'><option value='###'>Select file ...</option></optgroup><optgroup label='Predefined examples'></optgroup></select></td>
198
- <td><button title='a testset includes various setting, subscriptions and a model' name="loadtestset">load testset</button></td>
199
- <td rowspan='3'><button title='a testset includes various setting, subscriptions and a model' name="savetestset">save testset</button><a id="savetestset" href="" download=""></a></td>
200
- <td rowspan='3'><button title='a testset includes various setting, subscriptions and a model' name="savesvg">save svg graph</button><a id="savesvg" href="" download=""></a></td>
201
- </tr>
202
- <tr>
203
- <td><select title='the model type affects the transformation property of an instance' name="transformation-names"><option value='???'>???</option></select></td>
204
- <td><button title='a testset includes various setting, subscriptions and a model' name="loadmodeltype">set model type</button></td>
205
- </tr>
206
- <tr>
207
- <td><input type='file' name='modelfile' id='modelfile' style='display:none'/></td>
208
- <td><button title='a standalone process model is only loadable if the currently loaded testset sucessfully prepared the current instance for the type of model' name="loadmodelfile">load model</button></td>
209
- </tr>
210
- </tbody>
211
- </table>
196
+ <div class='section'>
197
+ <div>
198
+ <input type='file' name='testsetfile' id='testsetfile'/>
199
+ <button title='a testset includes various setting, subscriptions and a model' name="loadtestset">load predefined testset</button><button title='a testset includes various setting, subscriptions and a model' name="loadtestsetfile">load testset file</button>
200
+ </div>
201
+ <div>
202
+ <input type='file' name='modelfile' id='modelfile'/>
203
+ <button title='a standalone process model is only loadable if the currently loaded testset sucessfully prepared the current instance for the type of model' name="loadmodelfile">load model</button>
204
+ </div>
205
+ </div><div class='section'>
206
+ <a id="savetestset" href="" download=""></a>
207
+ <a id="savesvg" href="" download=""></a>
208
+ <button title='a testset includes various setting, subscriptions and a model' name="savetestset">save testset</button>
209
+ <button title='a testset includes various setting, subscriptions and a model' name="savesvg">save svg graph</button>
210
+ </div><div class='section'>
211
+ <div>
212
+ Current model: <span id='currentmodel'></span>
213
+ </div>
214
+ <div>
215
+ <button title='a testset includes various setting, subscriptions and a model' name="loadmodeltype">set model type</button>
216
+ </div>
217
+ </div>
212
218
  </div> <!--}}}-->
213
219
  <div id="areaexecution" class='inactive'> <!--{{{-->
214
220
  <table class='compact'>
@@ -24,6 +24,8 @@ var sub_more = 'topic' + '=' + 'running' + '&' +// {{{
24
24
  'events' + '=' + 'change' + '&' +
25
25
  'topic' + '=' + 'properties/endpoints' + '&' +
26
26
  'events' + '=' + 'change' + '&' +
27
+ 'topic' + '=' + 'properties/transformation' + '&' +
28
+ 'events' + '=' + 'change' + '&' +
27
29
  'topic' + '=' + 'properties/handlerwrapper' + '&' +
28
30
  'events' + '=' + 'result' + '&' +
29
31
  'topic' + '=' + 'properties/handlers' + '&' +
@@ -40,6 +42,8 @@ var sub_less = 'topic' + '=' + 'running' + '&' +// {{{
40
42
  'events' + '=' + 'change' + '&' +
41
43
  'topic' + '=' + 'properties/endpoints' + '&' +
42
44
  'events' + '=' + 'change' + '&' +
45
+ 'topic' + '=' + 'properties/transformation' + '&' +
46
+ 'events' + '=' + 'change' + '&' +
43
47
  'topic' + '=' + 'properties/handlerwrapper' + '&' +
44
48
  'events' + '=' + 'result' + '&' +
45
49
  'topic' + '=' + 'properties/handlers' + '&' +
@@ -49,9 +53,10 @@ $(document).ready(function() {// {{{
49
53
  $("input[name=base-url]").val(location.protocol + "//" + location.host + ":" + $('body').data('defaultport'));
50
54
  $("button[name=base]").click(function(){ create_instance(null); });
51
55
  $("button[name=instance]").click(function(){ ui_tab_click("#tabinstance"); monitor_instance(false); });
52
- $("button[name=loadtestset]").click(load_testset);
53
- $("button[name=loadmodeltype]").click(load_modeltype);
54
- $("button[name=loadmodelfile]").click(load_model);
56
+ $("button[name=loadtestset]").click(function(e){new CustomMenu(e).menu($('#predefinedtestsets'),load_testset); });
57
+ $("button[name=loadtestsetfile]").click(load_testsetfile);
58
+ $("button[name=loadmodelfile]").click(load_modelfile);
59
+ $("button[name=loadmodeltype]").click(function(e){new CustomMenu(e).menu($('#modeltypes'),load_modeltype, $("button[name=loadmodeltype]")); });
55
60
  $("button[name=savetestset]").click(function(){ save_testset(); });
56
61
  $("button[name=savesvg]").click(function(){ save_svg(); });
57
62
  $("input[name=votecontinue]").click(check_subscription);
@@ -64,11 +69,8 @@ $(document).ready(function() {// {{{
64
69
  success: function(res){
65
70
  $('testset',res).each(function(){
66
71
  var ts = $(this).text();
67
- $('select[name=testset-names] optgroup:last-child').append(
68
- $("<option></option>").attr("value",ts).text(ts)
69
- );
72
+ $('#predefinedtestsets').append($("<div class='menuitem'></div>").text(ts));
70
73
  });
71
- $('select[name=testset-names] optgroup:last-child option:first-child').attr('selected','selected');
72
74
  var q = $.parseQuery();
73
75
  if (q.monitor && q.load) {
74
76
  $("input[name=instance-url]").val(q.monitor);
@@ -93,9 +95,7 @@ $(document).ready(function() {// {{{
93
95
  success: function(res){
94
96
  $('transformation',res).each(function(){
95
97
  var ts = $(this).text();
96
- $('select[name=transformation-names]').append(
97
- $("<option></option>").attr("value",ts).text(ts)
98
- );
98
+ $('#modeltypes').append($("<div class='menuitem'></div>").text(ts));
99
99
  });
100
100
  }
101
101
  });
@@ -216,6 +216,9 @@ function monitor_instance(load) {// {{{
216
216
  case 'properties/position':
217
217
  monitor_instance_pos_change($('event > notification',data).text());
218
218
  break;
219
+ case 'properties/transformation':
220
+ monitor_instance_transformation();
221
+ break;
219
222
  case 'running':
220
223
  monitor_instance_running($('event > notification',data).text(),$('event > event',data).text());
221
224
  break;
@@ -237,6 +240,7 @@ function monitor_instance(load) {// {{{
237
240
 
238
241
  monitor_instance_dataelements();
239
242
  monitor_instance_endpoints();
243
+ monitor_instance_transformation();
240
244
  monitor_instance_dsl();
241
245
  monitor_instance_state();
242
246
  },
@@ -355,6 +359,19 @@ function monitor_instance_state() {// {{{
355
359
  }
356
360
  });
357
361
  }// }}}
362
+ function monitor_instance_transformation() {// {{{
363
+ var url = $("input[name=current-instance]").val();
364
+ $.ajax({
365
+ type: "GET",
366
+ url: url + "/properties/values/attributes/modeltype",
367
+ success: function(res){
368
+ $("#currentmodel").text($(res.documentElement).text());
369
+ },
370
+ error: function() {
371
+ $("#currentmodel").text('???');
372
+ }
373
+ });
374
+ }// }}}
358
375
 
359
376
  function monitor_instance_pos() {// {{{
360
377
  var url = $("input[name=current-instance]").val();
@@ -520,9 +537,13 @@ function save_testset() {// {{{
520
537
  testset.append(pars);
521
538
  $.ajax({
522
539
  type: "GET",
523
- url: base + "/properties/values/info/",
540
+ url: base + "/properties/values/attributes/",
524
541
  success: function(res){
525
- var name = res;
542
+ var pars = $X('<attributes/>');
543
+ pars.append($(res.documentElement));
544
+ testset.append(pars);
545
+ var name = $("values > info",res);
546
+ console.log(res);
526
547
  $('#savetestset').attr('download',name + '.xml');
527
548
  $('#savetestset').attr('href','data:application/xml;charset=utf-8;base64,' + window.btoa(testset.serializeXML()));
528
549
  document.getElementById('savetestset').click();
@@ -557,7 +578,7 @@ function save_svg() {// {{{
557
578
  gc.prepend($X('<style xmlns="http://www.w3.org/2000/svg" type="text/css"><![CDATA[' + res + ']]></style>'));
558
579
  $.ajax({
559
580
  type: "GET",
560
- url: base + "/properties/values/info/",
581
+ url: base + "/properties/values/attributes/info/",
561
582
  success: function(res){
562
583
  var name = res;
563
584
 
@@ -626,7 +647,8 @@ function set_testset(testset) {// {{{
626
647
  }
627
648
  });
628
649
  }// }}}
629
- function load_testsetfile() { //{{{
650
+
651
+ function load_testsetfile_after() { //{{{
630
652
  if (running) return;
631
653
  running = true;
632
654
  if (typeof window.FileReader !== 'function') {
@@ -643,7 +665,12 @@ function load_testsetfile() { //{{{
643
665
  reader.onabort = function(){ running = false; }
644
666
  reader.readAsText(files[0]);
645
667
  } //}}}
646
- function load_modelfile() { //{{{
668
+ function load_testsetfile() {// {{{
669
+ if (running) return;
670
+ document.getElementById('testsetfile').click();
671
+ }// }}}
672
+
673
+ function load_modelfile_after() { //{{{
647
674
  if (running) return;
648
675
  running = true;
649
676
  if (typeof window.FileReader !== 'function') {
@@ -661,52 +688,53 @@ function load_modelfile() { //{{{
661
688
  reader.onabort = function(){ running = false; }
662
689
  reader.readAsText(files[0]);
663
690
  } //}}}
691
+ function load_modelfile() {// {{{
692
+ if (running) return;
693
+ document.getElementById('modelfile').click();
694
+ }// }}}
695
+
664
696
  function load_testset() {// {{{
665
697
  if (running) return;
666
698
  running = true;
667
- save['dsl'] = null; // reload dsl and position under all circumstances
668
-
669
- $('#main .tabbehind button').hide();
670
- $('#dat_details').empty();
671
699
 
672
- var name = $("select[name=testset-names]").val();
673
-
674
- if (name == '###') {
675
- running = false;
676
- document.getElementById('testsetfile').click();
677
- } else {
678
- $.ajax({
679
- cache: false,
680
- dataType: 'xml',
681
- url: "testsets/" + name + ".xml",
682
- success: function(res){
683
- document.title = name;
684
- set_testset(res);
685
- },
686
- complete: function() {
687
- running = false;
688
- }
689
- });
690
- }
691
- }// }}}
700
+ var name = $("#predefinedtestsets div.menuitem[data-selected=selected]").text();
701
+ $.ajax({
702
+ cache: false,
703
+ dataType: 'xml',
704
+ url: "testsets/" + name + ".xml",
705
+ success: function(res){
706
+ save['dsl'] = null; // reload dsl and position under all circumstances
707
+ $('#main .tabbehind button').hide();
708
+ $('#dat_details').empty();
692
709
 
693
- function load_model() {// {{{
694
- if (running) return;
695
- document.getElementById('modelfile').click();
710
+ document.title = name;
711
+ set_testset(res);
712
+ },
713
+ complete: function() {
714
+ running = false;
715
+ }
716
+ });
696
717
  }// }}}
697
-
698
718
  function load_modeltype() {// {{{
699
719
  if (running) return;
720
+ var url = $("input[name=current-instance]").val();
700
721
  running = true;
701
722
 
702
- var name = $("select[name=transformation-names]").val();
703
-
723
+ var name = $("#modeltypes div.menuitem[data-selected=selected]").text();
704
724
  $.ajax({
705
725
  cache: false,
706
726
  dataType: 'xml',
707
727
  url: "testsets/" + name + ".xml",
708
728
  success: function(res){
709
- set_testset(res);
729
+ $.ajax({
730
+ type: "PUT",
731
+ url: url + "/properties/values/attributes/modeltype",
732
+ data: ({value: name}),
733
+ success: function(){
734
+ set_testset(res);
735
+ },
736
+ error: report_failure
737
+ });
710
738
  },
711
739
  complete: function() {
712
740
  running = false;
@@ -108,7 +108,7 @@ function CPEE(adaptor) {
108
108
  },
109
109
  'params': ['> manipulate', xml_node]});
110
110
  }
111
- contextmenu(menu, e);
111
+ new CustomMenu(e).contextmenu(menu);
112
112
  }
113
113
  return false;
114
114
  } // }}}
@@ -14,17 +14,18 @@
14
14
  <http://www.gnu.org/licenses/>.
15
15
  */
16
16
 
17
- div.contextmenu {
17
+ div.contextmenu, div.menu {
18
18
  padding: 0;
19
19
  margin: 0;
20
20
  z-index: 100000;
21
21
  position: absolute;
22
22
  display:none;
23
23
  background: Menu;
24
- border: 1px solid ButtonShadow;
24
+ border: 1px solid ActiveBorder;
25
25
  -moz-box-sizing: border-box;
26
26
  -webkit-box-sizing: border-box;
27
27
  box-sizing: border-box;
28
+ box-shadow: 0.1em 0.1em 0.1em ThreeDShadow;
28
29
  }
29
30
 
30
31
  table.contextmenu {
@@ -46,22 +47,28 @@ tr.contextmenuheader > td{
46
47
  padding-right: 1em;
47
48
  }
48
49
  tr.contextmenuheader:not(:first-child) {
49
- border-top: 1px solid ButtonShadow;
50
+ border-top: 1px solid ActiveBorder;
50
51
  }
51
52
 
52
- tr.contextmenuitem {
53
+ div.menu > div {
54
+ height: 1.5em;
55
+ }
56
+
57
+ tr.contextmenuitem, div.menu > div {
53
58
  font-size: small;
54
59
  color: MenuText;
55
60
  }
56
- tr.contextmenuitem:hover {
61
+ tr.contextmenuitem:hover, div.menu > div:hover {
57
62
  background-color:Highlight;
58
63
  color: HighlightText;
59
64
  }
60
- tr.contextmenuitem > td{
65
+ tr.contextmenuitem > td, div.menu > div {
66
+ padding: 0;
67
+ margin: 0;
61
68
  padding-left: 0.5em;
62
69
  padding-right: 1em;
63
70
  }
64
- tr.contextmenuitem > .contextmenuicon{
71
+ tr.contextmenuitem > .contextmenuicon {
65
72
  margin-left: 0.7em;
66
73
  padding-right: 0em;
67
74
  }
@@ -75,4 +82,3 @@ tr.contextmenuitem > .contextmenuicon div svg {
75
82
  width: 1.5em;
76
83
  vertical-align:bottom;
77
84
  }
78
-