@@ -20,6 +20,8 @@ var getLines = function(lineString) {
20
20
//matches one or more digits
21
21
} else if ( / ^ [ \d ] + $ / . test ( val ) ) {
22
22
result [ val - 1 ] = true ;
23
+ } else {
24
+ result [ val ] = true ;
23
25
}
24
26
25
27
}
@@ -61,15 +63,61 @@ function addHighlights() {
61
63
} ) ;
62
64
63
65
codeBlock . empty ( ) ;
66
+ if ( lines . only ) {
67
+ var segments = [ ] ;
68
+ lineMap . forEach ( function ( lineNodes , lineNumber ) {
69
+ var visible = lines [ lineNumber ] ;
70
+ var lineNode = document . createElement ( 'span' ) ;
71
+ $ ( lineNode ) . append ( lineNodes ) ;
72
+ lineNode . className = lines [ lineNumber ] ? 'line highlight' : 'line' ;
64
73
65
- for ( var key in lineMap ) {
66
- if ( lineMap . hasOwnProperty ( key ) ) {
67
- var newNode = document . createElement ( 'span' ) ;
68
- newNode . className = lines [ key ] ? 'line highlight' : 'line' ;
69
- $ ( newNode ) . append ( lineMap [ key ] ) ;
70
- codeBlock . append ( newNode ) ;
71
- }
74
+ var lastSegment = segments [ segments . length - 1 ] ;
75
+ if ( ! lastSegment || lastSegment . visible !== visible ) {
76
+ segments . push ( lastSegment = { visible : visible , lines : [ ] } ) ;
77
+ }
78
+ lastSegment . lines . push ( lineNode ) ;
79
+
80
+
81
+ } ) ;
82
+ segments . forEach ( function ( segment , index ) {
83
+ var next = segments [ index + 1 ] ;
84
+
85
+ if ( segment . visible ) {
86
+ // take 3 lines from next if possible
87
+ if ( next ) {
88
+ var first = next . lines . splice ( 0 , 3 ) ;
89
+ segment . lines = segment . lines . concat ( first ) ;
90
+ }
91
+ codeBlock . append ( segment . lines ) ;
92
+ } else {
93
+ // move 3 lines to next if possible
94
+ if ( next ) {
95
+ var last = segment . lines . splice ( segment . lines . length - 3 ) ;
96
+ next . lines = last . concat ( next . lines ) ;
97
+ }
98
+ if ( segment . lines . length > 2 ) {
99
+ var expander = document . createElement ( 'div' ) ;
100
+ expander . className = "expand" ;
101
+ expander . addEventListener ( "click" , function ( ) {
102
+ $ ( expander ) . replaceWith ( segment . lines ) ;
103
+ } ) ;
104
+ codeBlock . append ( expander ) ;
105
+ } else {
106
+ codeBlock . append ( segment . lines ) ;
107
+ }
108
+ }
109
+ } ) ;
110
+
111
+
112
+ } else {
113
+ lineMap . forEach ( function ( lineNodes , lineNumber ) {
114
+ var newNode = document . createElement ( 'span' ) ;
115
+ newNode . className = lines [ lineNumber ] ? 'line highlight' : 'line' ;
116
+ $ ( newNode ) . append ( lineNodes ) ;
117
+ codeBlock . append ( newNode ) ;
118
+ } ) ;
72
119
}
120
+
73
121
} ) ;
74
122
}
75
123
0 commit comments