/*
* Copyright 2012 OSBI Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* The save query dialog
*/
var OpenDialog = Modal.extend({
type: "save",
closeText: "Open",
events: {
'click': 'select_root_folder', /* select root folder */
'click .dialog_footer a' : 'call',
'click .query': 'select_name',
'dblclick .query': 'open_query',
'click li.folder': 'toggle_folder',
'keyup .search_file' : 'search_file',
'click .cancel_search' : 'cancel_search',
'click .export_btn' : 'export_zip',
'change .file' : 'select_file'
},
buttons: [
{ id: "test", text: "Open", method: "open_query" },
{ text: "Cancel", method: "close" }
],
initialize: function(args) {
// Append events
var self = this;
var name = "";
// this.message = "
Please select a file.....
Loading....
" +
// " " +
// 'Search: ' +
// '
';
this.message = 'Search: ' +
'
' +
"Loading...
" +
" " +
"Please select a file.....
";
if (Settings.ALLOW_IMPORT_EXPORT) {
this.message += " Import or Export Files for Folder : < Select Folder... > " +
" " +
" ";
}
_.extend(this.options, {
title: "Open"
});
this.selected_folder = null;
// Initialize repository
this.repository = new Repository({}, { dialog: this });
this.bind( 'open', function( ) {
var height = ( $( "body" ).height() / 2 ) + ( $( "body" ).height() / 6 );
if( height > 420 ) {
height = 420;
}
var perc = (((($( "body" ).height() - 600) / 2) * 100) / $( "body" ).height());
$(this.el).find('.RepositoryObjects').height( height );
$(this.el).dialog( 'option', 'position', 'center' );
$(this.el).parents('.ui-dialog').css({ width: "550px", top: perc+'%' });
$(this.el).find('.dialog_footer').find('a[href="#open_query"]').hide();
self.repository.fetch( );
if (Settings.REPOSITORY_LAZY) {
this.$el.find('.box-search-file').hide();
}
} );
// Maintain `this`
_.bindAll( this, "close", "toggle_folder", "select_name", "populate" , "cancel_search", "export_zip", "select_folder", "select_file", "select_last_location");
},
populate: function( repository ) {
var self = this;
$( this.el ).find( '.RepositoryObjects' ).html(
_.template( $( '#template-repository-objects' ).html( ) )( {
repoObjects: repository
} )
);
self.queries = {};
function getQueries( entries ) {
_.forEach( entries, function( entry ) {
self.queries[ entry.path ] = entry;
if( entry.type === 'FOLDER' ) {
getQueries( entry.repoObjects );
}
} );
}
getQueries( repository );
this.context_menu_disabled();
this.select_last_location();
},
context_menu_disabled: function() {
this.$el.find('.RepositoryObjects').find('.folder_row, .query').addClass('context-menu-disabled');
},
select_root_folder: function( event ) {
var isNameInputField = $( event.target ).attr( 'name' ) === 'name';
if( !isNameInputField ) {
this.unselect_current_selected_folder( );
}
},
toggle_folder: function( event ) {
var $target = $( event.currentTarget );
var path = $target.children('.folder_row').find('a').attr('href');
path = path.replace('#', '');
this.unselect_current_selected_folder( );
$target.children('.folder_row').addClass( 'selected' );
var $queries = $target.children( '.folder_content' );
var isClosed = $target.children( '.folder_row' ).find('.sprite').hasClass( 'collapsed' );
if( isClosed ) {
$target.children( '.folder_row' ).find('.sprite').removeClass( 'collapsed' );
$queries.removeClass( 'hide' );
if (Settings.REPOSITORY_LAZY) {
this.fetch_lazyload($target, path);
}
} else {
$target.children( '.folder_row' ).find('.sprite').addClass( 'collapsed' );
$queries.addClass( 'hide' );
if (Settings.REPOSITORY_LAZY) {
$target.find('.folder_content').remove();
}
}
this.select_folder();
this.set_last_location(path);
return false;
},
fetch_lazyload: function(target, path) {
var repositoryLazyLoad = new RepositoryLazyLoad({}, { dialog: this, folder: target, path: path });
repositoryLazyLoad.fetch();
Saiku.ui.block('Loading...');
},
template_repository_folder_lazyload: function(folder, repository) {
folder.find('.folder_content').remove();
folder.append(
_.template($('#template-repository-folder-lazyload').html())({
repoObjects: repository
})
);
},
populate_lazyload: function(folder, repository) {
Saiku.ui.unblock();
this.template_repository_folder_lazyload(folder, repository);
},
select_name: function( event ) {
var $currentTarget = $( event.currentTarget );
this.unselect_current_selected_folder( );
//$currentTarget.parent( ).parent( ).has( '.folder' ).children('.folder_row').addClass( 'selected' );
var path = $currentTarget.parent( ).parent( ).has( '.folder' ).children('.folder_row').find( 'a' ).attr('href');
path = path.replace('#' , '');
this.set_last_location(path);
$currentTarget.addClass('selected');
var name = $currentTarget.find( 'a' ).attr('href');
name = name.replace('#','');
$(this.el).find('.query_name').html( $('
').text( name ).html() );
$(this.el).find('.dialog_footer').find('a[href="#open_query"]').show();
this.select_folder();
return false;
},
unselect_current_selected_folder: function( ) {
$( this.el ).find( '.selected' ).removeClass( 'selected' );
},
// XXX - duplicaten from OpenQuery
search_file: function(event) {
var filter = $(this.el).find('.search_file').val().toLowerCase();
var isEmpty = (typeof filter == "undefined" || filter === "" || filter === null);
if (isEmpty || event.which == 27 || event.which == 9) {
this.cancel_search();
} else {
if ($(this.el).find('.search_file').val()) {
$(this.el).find('.cancel_search').show();
} else {
$(this.el).find('.cancel_search').hide();
}
$(this.el).find('li.query').removeClass('hide');
$(this.el).find('li.query a').filter(function (index) {
return $(this).text().toLowerCase().indexOf(filter) == -1;
}).parent().addClass('hide');
$(this.el).find('li.folder').addClass('hide');
$(this.el).find('li.query').not('.hide').parents('li.folder').removeClass('hide');
//$(this.el).find( 'li.folder .folder_content').not(':has(.query:visible)').parent().addClass('hide');
//not(':contains("' + filter + '")').parent().hide();
$(this.el).find( 'li.folder .folder_row' ).find('.sprite').removeClass( 'collapsed' );
$(this.el).find( 'li.folder .folder_content' ).removeClass('hide');
}
return false;
},
cancel_search: function(event) {
$(this.el).find('input.search_file').val('');
$(this.el).find('.cancel_search').hide();
$(this.el).find('li.query, li.folder').removeClass('hide');
$(this.el).find( '.folder_row' ).find('.sprite').addClass( 'collapsed' );
$(this.el).find( 'li.folder .folder_content' ).addClass('hide');
$(this.el).find('.search_file').val('').focus();
$(this.el).find('.cancel_search').hide();
},
export_zip: function(event) {
var file = this.selected_folder;
if (typeof file != "undefined" && file !== "") {
var url = Settings.REST_URL + (new RepositoryZipExport({ directory : file })).url();
window.open(url + "?directory=" + file + "&type=saiku");
}
},
select_folder: function() {
var foldersSelected = $( this.el ).find( '.selected' );
var file = foldersSelected.length > 0 ? foldersSelected.children('a').attr('href').replace('#','') : null;
if (typeof file != "undefined" && file !== null && file !== "") {
var form = $('#importForm');
form.find('.directory').val(file);
var url = Settings.REST_URL + (new RepositoryZipExport()).url() + "upload";
form.attr('action', url);
$(this.el).find('.zip_folder').text(file);
this.selected_folder = file;
$(this.el).find('.export_btn, .import_btn').removeAttr('disabled');
this.select_file();
} else {
$(this.el).find('.import_btn, .export_btn').attr('disabled', 'true');
}
},
select_file: function() {
var form = $('#importForm');
var filename = form.find('.file').val();
if (typeof filename != "undefined" && filename !== "" && filename !== null && this.selected_folder !== null) {
$(this.el).find('.import_btn').removeAttr('disabled');
} else {
$(this.el).find('.import_btn').attr('disabled', 'true');
}
},
open_query: function(event) {
// Save the name for future reference
var $currentTarget = $( event.currentTarget );
var file = $(this.el).find('.query_name').html();
if ($currentTarget.hasClass('query')) {
file = $currentTarget.find( 'a' ).attr('href').replace('#','');
}
var selected_query = new SavedQuery({ file: file });
this.close();
Saiku.ui.block("Opening query...");
var item = this.queries[file];
var params = _.extend({
file: file,
formatter: Settings.CELLSET_FORMATTER
}, Settings.PARAMS);
var query = new Query(params,{ name: file });
var tab = Saiku.tabs.add(new Workspace({ query: query, item: item, processURI: false }));
event.preventDefault();
return false;
},
set_last_location: function(path){
if (typeof localStorage !== "undefined" && localStorage && !Settings.REPOSITORY_LAZY) {
if (!Settings.LOCALSTORAGE_EXPIRATION || Settings.LOCALSTORAGE_EXPIRATION === 0) {
localStorage.clear();
}
else {
localStorage.setItem('last-folder', path);
}
}
},
select_last_location: function(){
if(localStorage.getItem('last-folder') && !Settings.REPOSITORY_LAZY){
var p = $(this.el).find('a[href="\\#'+localStorage.getItem('last-folder')+'"]')
var path = p.parent().parent().has('.folder').children('.folder_row').find('.sprite').removeClass('collapsed');
var parents = path.parentsUntil($("div.RepositoryObjects"));
parents.each(function () {
if ($(this).hasClass('folder')) {
$(this).children('.folder_row').find('.sprite').removeClass('collapsed');
$(this).children('.folder_content').removeClass('hide');
}
});
}
}
});