cpee 1.3.173 → 1.3.174

Sign up to get free protection for your applications and to get access to all the features.
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
-