Skip to content

Commit 83087ed

Browse files
Merge pull request #24 from misterunknown/editoroptions
Editoroptions
2 parents 6c70936 + cb9b1ff commit 83087ed

File tree

2 files changed

+94
-46
lines changed

2 files changed

+94
-46
lines changed

Diff for: ifm.php

+47-23
Original file line numberDiff line numberDiff line change
@@ -559,8 +559,6 @@ function IFM() {
559559
$('.clickable-row').click(function(event) {
560560
if( event.ctrlKey ) {
561561
$(this).toggleClass( 'selectedItem' );
562-
} else {
563-
self.highlightItem( $(this) );
564562
}
565563
});
566564
}
@@ -597,14 +595,38 @@ function IFM() {
597595
this.showFileForm = function () {
598596
var filename = arguments.length > 0 ? arguments[0] : "newfile.txt";
599597
var content = arguments.length > 1 ? arguments[1] : "";
600-
var overlay = '<form id="showFile">';
601-
overlay += '<div class="modal-body"><fieldset><label>Filename:</label><input onkeypress="return ifm.preventEnter(event);" type="text" class="form-control" name="filename" value="'+filename+'" /><br>';
602-
overlay += '<div id="content" name="content"></div><input type="checkbox" id="aceWordWrap"> word wrap</input></fieldset></div>';
603-
overlay += '<div class="modal-footer"><button type="button" class="btn btn-default" onclick="ifm.saveFile();ifm.hideModal();return false;">Save';
604-
overlay += '</button><button type="button" onclick="ifm.saveFile();return false;" class="btn btn-default">Save without closing</button>';
605-
overlay += '<button type="button" class="btn btn-default" onclick="ifm.hideModal();return false;">Close</button></div></form>';
598+
var overlay = '<form id="showFile">' +
599+
'<div class="modal-body"><fieldset><label>Filename:</label><input onkeypress="return ifm.preventEnter(event);" type="text" class="form-control" name="filename" value="'+filename+'" /><br>' +
600+
'<div id="content" name="content"></div><br>' +
601+
'<button type="button" class="btn btn-default" id="editoroptions">editor options</button><div class="hide" id="editoroptions-head">options</div><div class="hide" id="editoroptions-content">' +
602+
'<input type="checkbox" id="editor-wordwrap"> word wrap</input><br>' +
603+
'<input type="checkbox" id="editor-softtabs"> use soft tabs</input>' +
604+
'<div class="input-group"><span class="input-group-addon">tabsize</span><input class="form-control" type="text" size="2" id="editor-tabsize"title="tabsize"></div>' +
605+
'</div></fieldset></div>' +
606+
'<div class="modal-footer"><button type="button" class="btn btn-default" onclick="ifm.saveFile();ifm.hideModal();return false;">Save' +
607+
'</button><button type="button" onclick="ifm.saveFile();return false;" class="btn btn-default">Save without closing</button>' +
608+
'<button type="button" class="btn btn-default" onclick="ifm.hideModal();return false;">Close</button></div></form>';
606609
self.showModal( overlay, { large: true } );
607-
$('#ifmmodal').on('remove', function () { self.editor = null; self.fileChanged = false; });
610+
$('#editoroptions').popover({
611+
html: true,
612+
title: function() { return $('#editoroptions-head').html(); },
613+
content: function() {
614+
var content = $('#editoroptions-content').clone()
615+
var aceSession = self.editor.getSession();
616+
content.removeClass( 'hide' );
617+
content.find( '#editor-wordwrap' )
618+
.prop( 'checked', ( aceSession.getOption( 'wrap' ) == 'off' ? false : true ) )
619+
.on( 'change', function() { self.editor.setOption( 'wrap', $( this ).is( ':checked' ) ); });
620+
content.find( '#editor-softtabs' )
621+
.prop( 'checked', aceSession.getOption( 'useSoftTabs' ) )
622+
.on( 'change', function() { self.editor.setOption( 'useSoftTabs', $( this ).is( ':checked' ) ); });
623+
content.find( '#editor-tabsize' )
624+
.val( aceSession.getOption( 'tabSize' ) )
625+
.on( 'keydown', function( e ) { if( e.key == 'Enter' ) { self.editor.setOption( 'tabSize', $( this ).val() ); } });
626+
return content;
627+
}
628+
});
629+
$('#ifmmodal').on( 'remove', function () { self.editor = null; self.fileChanged = false; });
608630
// Start ACE
609631
self.editor = ace.edit("content");
610632
self.editor.$blockScrolling = 'Infinity';
@@ -1048,7 +1070,7 @@ function IFM() {
10481070
$(document.body).prepend('<div id="waitqueue"></div>');
10491071
//$("#waitqueue").on("mouseover", function() { $(this).toggleClass("left"); });
10501072
}
1051-
$("#waitqueue").append('<div id="'+id+'" class="panel panel-default"><div class="panel-body"><div class="progress"><div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemax="100" style="width:100%"></div><span class="progbarlabel">'+name+'</span></div></div></div>');
1073+
$("#waitqueue").prepend('<div id="'+id+'" class="panel panel-default"><div class="panel-body"><div class="progress"><div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemax="100" style="width:100%"></div><span class="progbarlabel">'+name+'</span></div></div></div>');
10521074
};
10531075
this.task_done = function(id) {
10541076
$("#"+id).remove();
@@ -1060,27 +1082,29 @@ function IFM() {
10601082
$('#'+id+' .progress-bar').css('width', progress+'%').attr('aria-valuenow', progress);
10611083
};
10621084
this.highlightItem = function( param ) {
1085+
var highlight = function( el ) {
1086+
el.addClass( 'highlightedItem' ).siblings().removeClass( 'highlightedItem' );
1087+
el.find( 'a' ).first().focus();
1088+
if( ! self.isElementInViewport( el ) ) {
1089+
var scrollOffset = 0;
1090+
if( param=="prev" )
1091+
scrollOffset = el.offset().top - ( window.innerHeight || document.documentElement.clientHeight ) + el.height() + 15;
1092+
else
1093+
scrollOffset = el.offset().top - 55;
1094+
$('html, body').animate( { scrollTop: scrollOffset }, 500 );
1095+
}
1096+
};
10631097
if( param.jquery ) {
1064-
param.addClass( 'highlightedItem' ).siblings().removeClass( 'highlightedItem' );
1098+
highlight( param );
10651099
} else {
10661100
var highlightedItem = $('.highlightedItem');
10671101
if( ! highlightedItem.length ) {
1068-
$('#filetable tbody tr:first-child').addClass( 'highlightedItem' );
1102+
highlight( $('#filetable tbody tr:first-child') );
10691103
} else {
10701104
var newItem = ( param=="next" ? highlightedItem.next() : highlightedItem.prev() );
10711105

10721106
if( newItem.is( 'tr' ) ) {
1073-
highlightedItem.removeClass( 'highlightedItem' );
1074-
newItem.addClass( 'highlightedItem' );
1075-
newItem.find( 'a' ).first().focus();
1076-
if( ! this.isElementInViewport( newItem ) ) {
1077-
var scrollOffset = 0;
1078-
if( param=="next" )
1079-
scrollOffset = highlightedItem.offset().top - 15;
1080-
else
1081-
scrollOffset = highlightedItem.offset().top - ( window.innerHeight || document.documentElement.clientHeight ) + highlightedItem.height() + 15;
1082-
$('html, body').animate( { scrollTop: scrollOffset }, 500 );
1083-
}
1107+
highlight( newItem );
10841108
}
10851109
}
10861110
}

Diff for: src/ifm.js

+47-23
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,6 @@ function IFM() {
124124
$('.clickable-row').click(function(event) {
125125
if( event.ctrlKey ) {
126126
$(this).toggleClass( 'selectedItem' );
127-
} else {
128-
self.highlightItem( $(this) );
129127
}
130128
});
131129
}
@@ -162,14 +160,38 @@ function IFM() {
162160
this.showFileForm = function () {
163161
var filename = arguments.length > 0 ? arguments[0] : "newfile.txt";
164162
var content = arguments.length > 1 ? arguments[1] : "";
165-
var overlay = '<form id="showFile">';
166-
overlay += '<div class="modal-body"><fieldset><label>Filename:</label><input onkeypress="return ifm.preventEnter(event);" type="text" class="form-control" name="filename" value="'+filename+'" /><br>';
167-
overlay += '<div id="content" name="content"></div><input type="checkbox" id="aceWordWrap"> word wrap</input></fieldset></div>';
168-
overlay += '<div class="modal-footer"><button type="button" class="btn btn-default" onclick="ifm.saveFile();ifm.hideModal();return false;">Save';
169-
overlay += '</button><button type="button" onclick="ifm.saveFile();return false;" class="btn btn-default">Save without closing</button>';
170-
overlay += '<button type="button" class="btn btn-default" onclick="ifm.hideModal();return false;">Close</button></div></form>';
163+
var overlay = '<form id="showFile">' +
164+
'<div class="modal-body"><fieldset><label>Filename:</label><input onkeypress="return ifm.preventEnter(event);" type="text" class="form-control" name="filename" value="'+filename+'" /><br>' +
165+
'<div id="content" name="content"></div><br>' +
166+
'<button type="button" class="btn btn-default" id="editoroptions">editor options</button><div class="hide" id="editoroptions-head">options</div><div class="hide" id="editoroptions-content">' +
167+
'<input type="checkbox" id="editor-wordwrap"> word wrap</input><br>' +
168+
'<input type="checkbox" id="editor-softtabs"> use soft tabs</input>' +
169+
'<div class="input-group"><span class="input-group-addon">tabsize</span><input class="form-control" type="text" size="2" id="editor-tabsize"title="tabsize"></div>' +
170+
'</div></fieldset></div>' +
171+
'<div class="modal-footer"><button type="button" class="btn btn-default" onclick="ifm.saveFile();ifm.hideModal();return false;">Save' +
172+
'</button><button type="button" onclick="ifm.saveFile();return false;" class="btn btn-default">Save without closing</button>' +
173+
'<button type="button" class="btn btn-default" onclick="ifm.hideModal();return false;">Close</button></div></form>';
171174
self.showModal( overlay, { large: true } );
172-
$('#ifmmodal').on('remove', function () { self.editor = null; self.fileChanged = false; });
175+
$('#editoroptions').popover({
176+
html: true,
177+
title: function() { return $('#editoroptions-head').html(); },
178+
content: function() {
179+
var content = $('#editoroptions-content').clone()
180+
var aceSession = self.editor.getSession();
181+
content.removeClass( 'hide' );
182+
content.find( '#editor-wordwrap' )
183+
.prop( 'checked', ( aceSession.getOption( 'wrap' ) == 'off' ? false : true ) )
184+
.on( 'change', function() { self.editor.setOption( 'wrap', $( this ).is( ':checked' ) ); });
185+
content.find( '#editor-softtabs' )
186+
.prop( 'checked', aceSession.getOption( 'useSoftTabs' ) )
187+
.on( 'change', function() { self.editor.setOption( 'useSoftTabs', $( this ).is( ':checked' ) ); });
188+
content.find( '#editor-tabsize' )
189+
.val( aceSession.getOption( 'tabSize' ) )
190+
.on( 'keydown', function( e ) { if( e.key == 'Enter' ) { self.editor.setOption( 'tabSize', $( this ).val() ); } });
191+
return content;
192+
}
193+
});
194+
$('#ifmmodal').on( 'remove', function () { self.editor = null; self.fileChanged = false; });
173195
// Start ACE
174196
self.editor = ace.edit("content");
175197
self.editor.$blockScrolling = 'Infinity';
@@ -613,7 +635,7 @@ function IFM() {
613635
$(document.body).prepend('<div id="waitqueue"></div>');
614636
//$("#waitqueue").on("mouseover", function() { $(this).toggleClass("left"); });
615637
}
616-
$("#waitqueue").append('<div id="'+id+'" class="panel panel-default"><div class="panel-body"><div class="progress"><div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemax="100" style="width:100%"></div><span class="progbarlabel">'+name+'</span></div></div></div>');
638+
$("#waitqueue").prepend('<div id="'+id+'" class="panel panel-default"><div class="panel-body"><div class="progress"><div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemax="100" style="width:100%"></div><span class="progbarlabel">'+name+'</span></div></div></div>');
617639
};
618640
this.task_done = function(id) {
619641
$("#"+id).remove();
@@ -625,27 +647,29 @@ function IFM() {
625647
$('#'+id+' .progress-bar').css('width', progress+'%').attr('aria-valuenow', progress);
626648
};
627649
this.highlightItem = function( param ) {
650+
var highlight = function( el ) {
651+
el.addClass( 'highlightedItem' ).siblings().removeClass( 'highlightedItem' );
652+
el.find( 'a' ).first().focus();
653+
if( ! self.isElementInViewport( el ) ) {
654+
var scrollOffset = 0;
655+
if( param=="prev" )
656+
scrollOffset = el.offset().top - ( window.innerHeight || document.documentElement.clientHeight ) + el.height() + 15;
657+
else
658+
scrollOffset = el.offset().top - 55;
659+
$('html, body').animate( { scrollTop: scrollOffset }, 500 );
660+
}
661+
};
628662
if( param.jquery ) {
629-
param.addClass( 'highlightedItem' ).siblings().removeClass( 'highlightedItem' );
663+
highlight( param );
630664
} else {
631665
var highlightedItem = $('.highlightedItem');
632666
if( ! highlightedItem.length ) {
633-
$('#filetable tbody tr:first-child').addClass( 'highlightedItem' );
667+
highlight( $('#filetable tbody tr:first-child') );
634668
} else {
635669
var newItem = ( param=="next" ? highlightedItem.next() : highlightedItem.prev() );
636670

637671
if( newItem.is( 'tr' ) ) {
638-
highlightedItem.removeClass( 'highlightedItem' );
639-
newItem.addClass( 'highlightedItem' );
640-
newItem.find( 'a' ).first().focus();
641-
if( ! this.isElementInViewport( newItem ) ) {
642-
var scrollOffset = 0;
643-
if( param=="next" )
644-
scrollOffset = highlightedItem.offset().top - 15;
645-
else
646-
scrollOffset = highlightedItem.offset().top - ( window.innerHeight || document.documentElement.clientHeight ) + highlightedItem.height() + 15;
647-
$('html, body').animate( { scrollTop: scrollOffset }, 500 );
648-
}
672+
highlight( newItem );
649673
}
650674
}
651675
}

0 commit comments

Comments
 (0)