Files
keppler/site/public/javascript/services/project.js
T
2016-06-09 19:07:15 +02:00

170 lines
5.3 KiB
JavaScript

application.factory(
'project',
[
'config',
'$timeout',
function( config, $timeout )
{
var update_callback = null;
// Result
var result = {};
result.data = null;
result.each_folder = function( folder, callback )
{
// Only callback provided
if( typeof folder === 'function' )
{
callback = folder;
folder = result.data;
}
// Apply callback
callback.apply( folder, [ folder ] );
// Each folder
for(var _folder_key in folder.folders)
{
var _folder = folder.folders[ _folder_key ];
result.each_folder( _folder, callback );
}
}
result.each_file = function( folder, callback )
{
// Only callback provided
if( typeof folder === 'function' )
{
callback = folder;
folder = result.data;
}
// Each folder
result.each_folder( folder, function( folder )
{
// Each file
for(var _file_key in folder.files)
{
var _file = folder.files[ _file_key ];
callback.apply( _file, [ _file ] );
}
} );
}
result.each_version = function( folder, callback )
{
// Only callback provided
if( typeof folder === 'function' )
{
callback = folder;
folder = result.data;
}
// Each file
result.each_file( folder, function( file )
{
// Each version
for(var _version_key in file.versions)
{
var _version = file.versions[ _version_key ];
callback.apply( _version, [ _version ] );
}
} );
}
// Update callback
result.on_update = function( callback )
{
update_callback = callback;
};
// Connect
result.connect = function( project_name )
{
// Connect to socket
var socket = io( config.domain + '/project/' + project_name );
// Connect event
socket.on( 'connect', function()
{
console.log('connected');
} );
socket.on( 'update_file', function( data )
{
console.log('update_file');
console.log(data);
} );
socket.on( 'delete_file', function( data )
{
console.log('delete_file');
console.log(data);
} );
socket.on( 'update_folders', function( data )
{
console.log('update_folders');
console.log(data);
} );
// Update project event
socket.on( 'update_project', function( data )
{
console.log('update_folders');
console.log(data);
// Reformat versions
result.each_version( data, function( version )
{
// Date
version.moment_date = moment( version.date );
version.date_formated = version.moment_date.format( 'LTS' );
version.time_from_now = version.moment_date.fromNow();
// Differencies
var count = 0,
modified = 0;
if( !version.diff )
{
version.diff_ratio = 1;
count = 1;
modified = 1;
}
else
{
for( var _diff_key in version.diff )
{
var _diff = version.diff[ _diff_key ];
count += _diff.count;
if( _diff.added /*|| _diff.removed*/ )
modified += _diff.count;
}
version.diff_ratio = modified / count;
}
version.diff_percent = Math.round( version.diff_ratio * 100 ) + '%';
} );
// Save in results
result.data = data;
// Apply callback
if( typeof update_callback === 'function' )
update_callback.apply( this, [ data ] );
} );
};
result.data = {'name':'',folders:{},files:{}};
return result;
}
]
);