@@ -211,21 +211,35 @@ Segmentation = (function($) {
211211 }
212212
213213
214- injClass = "" ;
214+ injClass = [ ] ;
215215 var checkSelected = segment . definition ;
216+ var escapedSegmentName = ( segment . definition ) . replace ( / " / g, '"' ) ;
216217
217- if ( checkSelected == self . currentSegmentStr ||
218- checkSelected == decodeURIComponent ( self . currentSegmentStr )
219- ) {
220- injClass = 'class="segmentSelected"' ;
218+ if ( checkSelected === self . currentSegmentStr || checkSelected === decodeURIComponent ( self . currentSegmentStr ) ) {
219+ injClass . push ( 'segmentSelected' ) ;
220+ }
221+ if ( segment . starred ) {
222+ injClass . push ( 'segmentStarred' ) ;
221223 }
222- listHtml += '<li data-idsegment="' + segment . idsegment + '" data-definition="' + ( segment . definition ) . replace ( / " / g, '"' ) + '" '
223- + injClass + ' title="' + getSegmentTooltipEnrichedWithUsername ( segment ) + '"><span class="segname" tabindex="4">' + getSegmentName ( segment ) + '</span>' ;
224- if ( self . segmentAccess == "write" ) {
225- listHtml += '<span class="editSegment" title="' + self . translations [ 'General_Edit' ] . toLocaleLowerCase ( ) + '"></span>' ;
224+ listHtml += '' +
225+ '<li class="' + injClass . join ( ' ' ) + '"' +
226+ 'data-idsegment="' + segment . idsegment + '"' +
227+ 'data-definition="' + escapedSegmentName + '"' +
228+ 'title="' + getSegmentTooltipEnrichedWithUsername ( segment ) + '"' +
229+ '>' +
230+ '<span class="segname" tabindex="4">' + getSegmentName ( segment ) + '</span>' ;
231+ if ( self . segmentAccess === "write" ) {
232+ listHtml += '' +
233+ '<button data-star class="starSegment">️' +
234+ '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24">' +
235+ '<path stroke="black" stroke-width="3" fill="none" d="M9.153 5.408C10.42 3.136 11.053 2 12 2c.947 0 1.58 1.136 2.847 3.408l.328.588c.36.646.54.969.82 1.182.28.213.63.292 1.33.45l.636.144c2.46.557 3.689.835 3.982 1.776.292.94-.546 1.921-2.223 3.882l-.434.507c-.476.557-.715.836-.822 1.18-.107.345-.071.717.001 1.46l.066.677c.253 2.617.38 3.925-.386 4.506-.766.582-1.918.051-4.22-1.009l-.597-.274c-.654-.302-.981-.452-1.328-.452-.347 0-.674.15-1.329.452l-.595.274c-2.303 1.06-3.455 1.59-4.22 1.01-.767-.582-.64-1.89-.387-4.507l.066-.676c.072-.744.108-1.116 0-1.46-.106-.345-.345-.624-.821-1.18l-.434-.508c-1.677-1.96-2.515-2.941-2.223-3.882.293-.941 1.523-1.22 3.983-1.776l.636-.144c.699-.158 1.048-.237 1.329-.45.28-.213.46-.536.82-1.182l.328-.588Z"/>' +
236+ '</svg>' +
237+ '</button>' ;
238+ listHtml += '<span class="editSegment" title="' + self . translations [ 'General_Edit' ] . toLocaleLowerCase ( ) + '"></span>' ;
226239 }
227- if ( comparisonService . isComparisonEnabled ( )
228- || comparisonService . isComparisonEnabled ( ) === null // may not be initialized since this code is outside of Vue
240+ if (
241+ comparisonService . isComparisonEnabled ( ) ||
242+ comparisonService . isComparisonEnabled ( ) === null // may not be initialized since this code is outside of Vue
229243 ) {
230244 listHtml += '<span class="compareSegment" title="' + _pk_translate ( 'SegmentEditor_CompareThisSegment' ) + '"></span>' ;
231245 }
@@ -405,6 +419,27 @@ Segmentation = (function($) {
405419 e . preventDefault ( ) ;
406420 } ) ;
407421
422+ self . target . on ( 'click' , '[data-star]' , function ( e ) {
423+ e . stopPropagation ( ) ;
424+ e . preventDefault ( ) ;
425+ const $root = $ ( this ) . closest ( 'li' ) ;
426+ const idSegment = $root . data ( 'idsegment' ) ;
427+ const segment = getSegmentFromId ( idSegment ) ;
428+ segment . starred = ! segment . starred ;
429+ const method = segment . starred ? 'star' : 'unstar' ;
430+ $root . toggleClass ( 'segmentStarred' , segment . starred ) ;
431+
432+ var ajaxHandler = new ajaxHelper ( ) ;
433+ ajaxHandler . addParams ( {
434+ "module" : 'API' ,
435+ "format" : 'json' ,
436+ "method" : 'SegmentEditor.' + method ,
437+ "userLogin" : piwik . userLogin ,
438+ "idSegment" : idSegment ,
439+ } , 'GET' ) ;
440+ ajaxHandler . send ( ) ;
441+ } ) ;
442+
408443 self . target . on ( 'click' , '.compareSegment' , function ( e ) {
409444 e . stopPropagation ( ) ;
410445 e . preventDefault ( ) ;
0 commit comments