Upgrade to Bootstrap 3
This commit is contained in:
parent
5e03ebbc35
commit
f33bfef15f
118
js/extensions/documentPanel.js
Normal file
118
js/extensions/documentPanel.js
Normal file
@ -0,0 +1,118 @@
|
||||
define([
|
||||
"jquery",
|
||||
"underscore",
|
||||
"utils",
|
||||
"classes/Extension",
|
||||
"folderList",
|
||||
"fileSystem",
|
||||
], function($, _, utils, Extension, folderList, fileSystem) {
|
||||
|
||||
var documentPanel = new Extension("documentPanel", 'Document Panel');
|
||||
|
||||
var fileMgr = undefined;
|
||||
documentPanel.onFileMgrCreated = function(fileMgrParameter) {
|
||||
fileMgr = fileMgrParameter;
|
||||
};
|
||||
|
||||
var folderEltTmpl = [
|
||||
'<a href="#" class="list-group-item folder clearfix" data-folder-index="<%= folderDesc.folderIndex %>" data-toggle="collapse" data-target=".document-panel .nav.<%= id %>">',
|
||||
'<div class="pull-right file-count"><%= _.size(folderDesc.fileList) %></div>',
|
||||
'<i class="icon-folder"></i> <%= folderDesc.name %></a>',
|
||||
'<ul class="nav collapse <%= id %>"><%= fileListHtml %></ul>'
|
||||
].join('');
|
||||
var documentEltTmpl = [
|
||||
'<a href="#" class="list-group-item file action-close-panel<%= fileDesc === selectedFileDesc ? " active" : "" %>" data-file-index="<%= fileDesc.fileIndex %>">',
|
||||
'<%= fileDesc.composeTitle() %></a>',
|
||||
].join('');
|
||||
|
||||
var panelElt = undefined;
|
||||
var documentListElt = undefined;
|
||||
var refreshPanel = function() {
|
||||
|
||||
// List orphan documents
|
||||
var orphanDocumentList = _.filter(fileSystem, function(fileDesc) {
|
||||
return fileDesc.folder === undefined;
|
||||
});
|
||||
|
||||
// Add orphan documents
|
||||
var documentListHtml = _.chain(orphanDocumentList).sortBy(function(fileDesc) {
|
||||
return fileDesc.title.toLowerCase();
|
||||
}).reduce(function(result, fileDesc) {
|
||||
return result + '<li>' + _.template(documentEltTmpl, {
|
||||
fileDesc: fileDesc,
|
||||
}) + '</li>';
|
||||
}, '').value();
|
||||
documentListHtml = '<ul class="nav">' + documentListHtml + '</ul>';
|
||||
|
||||
// Build directories
|
||||
_.chain(folderList).sortBy(function(folderDesc) {
|
||||
return folderDesc.name.toLowerCase();
|
||||
}).each(function(folderDesc) {
|
||||
var fileListHtml = _.chain(folderDesc.fileList).sortBy(function(fileDesc) {
|
||||
return fileDesc.title.toLowerCase();
|
||||
}).reduce(function(result, fileDesc) {
|
||||
return result + _.template(documentEltTmpl, {
|
||||
fileDesc: fileDesc,
|
||||
});
|
||||
}, '').value();
|
||||
documentListHtml += _.template(folderEltTmpl, {
|
||||
folderDesc: folderDesc,
|
||||
fileListHtml: fileListHtml,
|
||||
id: folderDesc.folderIndex.replace('.', '')
|
||||
});
|
||||
});
|
||||
|
||||
documentListElt.innerHTML = documentListHtml;
|
||||
|
||||
// Add click listeners
|
||||
_.each(documentListElt.querySelectorAll('.file'), function(fileElt) {
|
||||
fileElt = $(fileElt);
|
||||
fileElt.click(function(e) {
|
||||
var fileDesc = fileSystem[fileElt.data('fileIndex')];
|
||||
if(fileDesc && fileDesc !== selectedFileDesc) {
|
||||
fileMgr.selectFile(fileDesc);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
documentPanel.onFileSelected = function(fileDesc) {
|
||||
selectedFileDesc = fileDesc;
|
||||
refreshPanel();
|
||||
};
|
||||
|
||||
documentPanel.onFileCreated = refreshPanel;
|
||||
documentPanel.onFileDeleted = refreshPanel;
|
||||
documentPanel.onTitleChanged = refreshPanel;
|
||||
documentPanel.onSyncExportSuccess = refreshPanel;
|
||||
documentPanel.onSyncRemoved = refreshPanel;
|
||||
documentPanel.onNewPublishSuccess = refreshPanel;
|
||||
documentPanel.onPublishRemoved = refreshPanel;
|
||||
documentPanel.onFoldersChanged = refreshPanel;
|
||||
|
||||
// Filter for search input in file selector
|
||||
function filterFileSelector(filter) {
|
||||
var liList = $(".file-selector > li");
|
||||
liList.show();
|
||||
if(filter) {
|
||||
var words = filter.toLowerCase().split(/\s+/);
|
||||
liList.each(function() {
|
||||
var fileTitle = $(this).text().toLowerCase();
|
||||
if(_.some(words, function(word) {
|
||||
return fileTitle.indexOf(word) === -1;
|
||||
})) {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
documentPanel.onReady = function() {
|
||||
panelElt = document.querySelector('.document-panel');
|
||||
documentListElt = panelElt.querySelector('.list-group');
|
||||
};
|
||||
|
||||
return documentPanel;
|
||||
|
||||
});
|
15
js/folderList.js
Normal file
15
js/folderList.js
Normal file
@ -0,0 +1,15 @@
|
||||
define([
|
||||
"underscore",
|
||||
"utils",
|
||||
"classes/FolderDescriptor",
|
||||
"storage",
|
||||
], function(_, utils, FolderDescriptor) {
|
||||
var folderList = {};
|
||||
|
||||
// Retrieve folder descriptors from localStorage
|
||||
_.each(utils.retrieveIndexArray("folder.list"), function(folderIndex) {
|
||||
folderList[folderIndex] = new FolderDescriptor(folderIndex);
|
||||
});
|
||||
|
||||
return folderList;
|
||||
});
|
Loading…
Reference in New Issue
Block a user