コード例 #1
0
ファイル: tree.js プロジェクト: achernar/shiftedit
function processUploads() {
	var params;

	var node = getSelected()[0];
	var parent = getDir(node);
	var path = '';

	if(parent.id!=='#root')
		path = parent.id+'/';

	if (uploadFolders.length) {
		var folder = path + uploadFolders.shift();
		params = util.clone(ajaxOptions.params);

		//check exists
		loading.stop();
		loading.fetch(ajaxOptions.url+'&cmd=file_exists&file='+encodeURIComponent(folder), {
			action: 'Checking '+folder,
			data: params,
			success: function(data) {
				if(data.file_exists===false) {
					var params = util.clone(ajaxOptions.params);
					params.dir = folder;

					loading.stop();
					loading.fetch(ajaxOptions.url+'&cmd=newdir&path='+encodeURIComponent(folder), {
						data: params,
						action: 'Uploading '+folder,
						success: function(data) {
							processUploads();
						}
					});
				}else{
					processUploads();
				}
			}
		});
	} else if(uploadFiles.length) {
		var file = uploadFiles.shift();
		params = util.clone(ajaxOptions.params);
		params.file = path + file.path;
		params.content = file.content;

		loading.stop();
		loading.fetch(ajaxOptions.url+'&cmd=upload', {
			action: 'uploading '+file.path,
			data: params,
			success: function(data) {
				processUploads();
			}
		});
	} else {
		//done!
		loading.stop();
		refresh();
	}
}
コード例 #2
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
 handler: function() {
     loading.fetch('/api/sites?cmd=reboot&site='+currentSite, {
         action: 'Rebooting site '+site.name,
         success: function(data) {
         }
     });
 },
コード例 #3
0
ファイル: prefs.js プロジェクト: andyiwest/shiftedit
				OK: function() {
					var values = util.serializeObject($('#removeMasterPasswordForm'));
					var error = '';
					//check password
					if (values.forceRemovePassword != 1) {
						if (createHash(createHash($('#currentMasterPassword').val())) != prefs.masterPasswordHash) {
							error += lang.currentPasswordIncorrectText;
						}
					}

					if (error) {
						prompt.alert({title:lang.errorText, msg:error});
					} else {
						//create hash
						var params = {};
						params.masterPassword = createHash(values.currentMasterPassword);
						params.forceRemovePassword = values.forceRemovePassword;

						loading.fetch(config.apiBaseUrl+'prefs?cmd=save_master_password', {
							action: 'removing master password',
							data: params,
							success: function(data) {
								prefs.useMasterPassword = false;
								storage.set('masterPassword', '');
								prefs.masterPasswordHash = '';

								$('#useMasterPassword').prop('checked', false);
								$('#changeMasterPassword').prop('disabled', true);
								$( "#dialog-removeMasterPasword" ).dialog( "close" );
								$( "#dialog-removeMasterPasword" ).remove();
							}
						});
					}
				}
コード例 #4
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
        handler: function() {
            loading.fetch('/api/sites?cmd=logs&site='+currentSite, {
                action: 'Fetching logs '+site.name,
                success: function(data) {
					editors.create("server.log", data.content);
                }
            });
        },
コード例 #5
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
         $('#shareSiteForm').on('click', 'a.delete', function() {
             loading.fetch('/api/share?cmd=delete&site='+currentSite+'&contact='+$(this).data('id'), {
                 action: 'deleting user',
                 success: function(data) {
 					loadUsers();
                 }
             });
         });
コード例 #6
0
ファイル: tree.js プロジェクト: achernar/shiftedit
			OK: function() {
				var url = combo.combobox('val');

				if( !url ){
					combo.combobox('focus');
					return;
				}

				var extractFile = $('[name=extract]').prop('checked');
				var node = getSelected()[0];
				var parent = getDir(node);
				var path = parent.id;

				loading.fetch(ajaxOptions.url+'&cmd=uploadByURL', {
					action: 'uploading '+url,
					data: {
						url: url,
						path: path
					},
					success: function(data) {
						//add node if it doesn't exist
						var node = tree.jstree(true).get_node(data.file);

						if(!node) {
							node = tree.jstree('create_node', parent, {
								'type' : "file", 
								'id' : data.file, 
								'text' : util.basename(data.file),
								'data' : {
									'noRename' : true
								}
							}, 'last');
						}

						//select node
						tree.jstree(true).deselect_all();
						tree.jstree(true).select_node(node);

						//extract?
						if(extractFile) {
							extract({reference: node});
						}

						//save url
						/*
						loading.fetch(config.apiBaseUrl+'uploadurls', {
							action: 'saving url '+url
							data: {url: url},
						});
						*/
					},
					context: this
				});

				$( this ).dialog( "close" );
			}
コード例 #7
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
 handler: function() {
     loading.fetch('/api/sites?cmd=export&site='+currentSite, {
         action: 'Exporting site',
         success: function(data) {
             var link = $('<a href="data:text/xml;base64,'+btoa(data.content)+'" download="'+data.file+'"></a>').appendTo('body');
             link.get(0).click();
             link.remove();
         }
     });
 },
コード例 #8
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
            $('#shareSiteForm').submit(function(event){
                event.preventDefault();

                loading.fetch('/api/share?cmd=save&site=' + currentSite + '&email=' + $('#shareSiteForm input[name=email]').val(), {
                    action: 'saving user',
                    success: function(data) {
                        $('#shareSiteForm input[name=email]').val('');
    					loadUsers();
                    }
                });
            });
コード例 #9
0
ファイル: tree.js プロジェクト: achernar/shiftedit
	$('#uploadUrlForm .delete').click(function() {
		var url = combo.combobox('val');

		if(!url)
			return;

		loading.fetch(config.apiBaseUrl+'uploadurls?cmd=delete', {
			action: 'Deleting upload url',
			data: {url: url},
			success: function(data) {
				combo.combobox('val', '');
				loadUploadUrls();
			}
		});
	});
コード例 #10
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
            function doImport(content){
                $( "#dialog-import" ).dialog( "close" );
                $( "#dialog-import" ).remove();

                loading.fetch('/api/sites?cmd=import', {
                    action: 'Importing site',
            	    data: {
            	        content: content
            	    },
                    success: function(data) {
						prompt.alert({title: 'Success', msg: data.imported+' site(s) imported.'});
						currentSite = data.site;
						load();
                    }
                });
            }
コード例 #11
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
function loadUsers() {
    loading.fetch('/api/share?cmd=list&site='+currentSite, {
        action: 'getting users',
        success: function(data) {
			var html = '';

			data.shared.forEach(function(item){
			    html = '<p>' + item.name + ' <a href="#" data-id="'+item.id+'" class="delete">X</a></p>';
			});

			$('#users').html(html);

			$('#shareSiteForm input[name=email]').focus();
        }
    });
}
コード例 #12
0
ファイル: tree.js プロジェクト: achernar/shiftedit
			success: function(data) {
				if(data.file_exists===false) {
					var params = util.clone(ajaxOptions.params);
					params.dir = folder;

					loading.stop();
					loading.fetch(ajaxOptions.url+'&cmd=newdir&path='+encodeURIComponent(folder), {
						data: params,
						action: 'Uploading '+folder,
						success: function(data) {
							processUploads();
						}
					});
				}else{
					processUploads();
				}
			}
コード例 #13
0
ファイル: prefs.js プロジェクト: andyiwest/shiftedit
				OK: function(){
					var values = util.serializeObject($('#masterPasswordForm'));

					var error = '';
					//check password
					if (prefs.useMasterPassword) {
						if (createHash(createHash(values.currentMasterPassword)) != prefs.masterPasswordHash) {
							error += lang.currentPasswordIncorrectText + '<br>';
						}
					}
					//check password length
					if (values.newMasterPassword.length < 1) {
						error += lang.passwordMinLengthText + '<br>';
					}
					//check passwords match
					if (values.newMasterPassword != values.confirmMasterPassword) {
						error += lang.passwordNotMatchText + '<br>';
					}
					if (error) {
						prompt.alert({title: lang.errorText, msg:error});
					} else {
						//create hash
						var params = {};
						if (prefs.useMasterPassword) {
							params.masterPassword = createHash(values.currentMasterPassword);
							params.masterPasswordHash = createHash(params.masterPassword);
						}
						params.useMasterPassword = true;
						params.newMasterPassword = createHash(values.newMasterPassword);

						loading.fetch(config.apiBaseUrl+'prefs?cmd=save_master_password', {
							action: 'saving master password',
							data: params,
							success: function(data) {
								storage.set('masterPassword', values.newMasterPassword);
								prefs.masterPasswordHash = data.masterPasswordHash;
								prefs.useMasterPassword = true;

								$('#useMasterPassword').prop('checked', true);
								$('#changeMasterPassword').prop('disabled', false);
								$( "#dialog-changeMasterPasword" ).dialog( "close" );
							}
						});
					}
				}
コード例 #14
0
ファイル: tree.js プロジェクト: achernar/shiftedit
function downloadFile(data) {
	var inst = $.jstree.reference(data.reference),
		node = inst.get_node(data.reference);

	var file = node.id;

	loading.fetch(ajaxOptions.url+'&cmd=download&file='+encodeURIComponent(file), {
		action: 'downloading file',
		success: function(data) {
			var blob = util.b64toBlob(data.content);
			var evt = new Event('click');
			var a = document.createElement('a');
			a.download = util.basename(file);
			a.href = URL.createObjectURL(blob);
			a.dispatchEvent(evt);
		}
	});
}
コード例 #15
0
ファイル: tree.js プロジェクト: achernar/shiftedit
			OK: function() {
				var node = getSelected()[0];
				var mode = $('#chmod-value').val();
				var params = util.clone(ajaxOptions.params);
				params.file = node.id;
				params.mode = mode;

				loading.fetch(ajaxOptions.url+'&cmd=chmod&file='+encodeURIComponent(node.id)+'&mode='+mode, {
					action: 'chmod file',
					data: params,
					success: function(data) {
						node.data.perms = mode;
						var el = inst.get_node(node, true);
						el.trigger("change_node.jstree"); //FIXME supposed to update column

						$( "#dialog-chmod" ).dialog( "close" );
					}
				});
			}
コード例 #16
0
ファイル: site.js プロジェクト: ucabgao/Experiment3
        handler: function(undef, e, confirmed) {
            if(!confirmed) {
                var me = this;
                prompt.confirm({
                    title: 'Delete site',
                    msg: 'Are you sure?',
                    fn: function(value) {
                       switch(value) {
                            case 'yes':
                                $(me).trigger('click', [true]);
                                return;
                            default:
                                return false;
                       }
                    }
                });
                return;
            }

            loading.fetch('/api/sites?cmd=delete&site='+currentSite, {
                action: 'Deleting site '+site.name,
                success: function(data) {
                    //remove this site from any active tabs
                    $("li[data-site='"+currentSite+"']").attr('data-site', '');

                    //disable file tree
                    $('#tree-container').hide();

                    //disable site options
                    disableMenuItems();

                    currentSite = 0;
                    storage.set('currentSite', currentSite);

                    //refresh combo
                    $( "#sites" ).combobox('val', '');
                    load();
                }
            });
        },
コード例 #17
0
ファイル: tree.js プロジェクト: achernar/shiftedit
function _processQueue(queue) {
	if (queue.length) {
		var item = queue.shift();

		var url = ajaxOptions.url;
		if(url.indexOf('?')==-1) {
			url+='?';
		}else{
			url+='&';
		}
		url += 'cmd=paste';

		var params = util.clone(ajaxOptions.params);
		params.dest = item.dest;
		params.path = item.path;
		params.isDir = item.isDir ? 1 : '';
		params.site = clipboard.site;
		params.cut = clipboard.cut;

		loading.fetch(url, {
			action: 'Putting '+item.dest,
			data: params,
			success: function (result, request) {
				_processQueue(queue);
			}
		});
	} else {
		if(clipboard.dest) {
			tree.jstree(true).refresh_node(clipboard.dest);
		}else{
			refresh();
		}

		loading.stop();
	}
}
コード例 #18
0
ファイル: tree.js プロジェクト: achernar/shiftedit
function buildQueue(nodes, d) {
	var node;
	if(nodes.length) {
		node = nodes.shift();
	} else {
		//console.log(queue); return;
		_processQueue(queue);
		return;
	}

	var parent = d ? d : inst.get_node(node.parent);
	var dest = parent.id;
	if (dest.substr(0,1)==='#') {
		dest = '';
	}

	var path = node.id;
	var newName = node.text;

	if(node.text == newName) {
		newName = findAvailableName(parent, newName);
	}

	var newPath = newName;
	if (dest) {
		newPath = dest+'/'+newPath;
	}

	queue.push({
		path: path,
		dest: dest+'/'+newName,
		isDir: (node.type!=='file')
	});

	if (node.type=='file') {
		buildQueue(nodes, d);
	}else{
		//get file list
		var url = ajaxOptions.url;
		if(url.indexOf('?')==-1) {
			url+='?';
		} else {
			url+='&';
		}
		url += 'cmd=list_all&site='+clipboard.site+'&path='+encodeURIComponent(path);

		var params = util.clone(ajaxOptions.params);
		params.path = path;
		params.site = clipboard.site;

		loading.fetch(url, {
			data: params,
			success: function (data) {
				for( i=0; i<data.files.length; i++ ){
					//console.log(data.files[i]);

					var destPath = newPath + data.files[i].path.substr(path.length);
					if (dest) {
						dest = dest +'/' + destPath;
					}

					queue.push({
						path: data.files[i].path,
						dest: destPath,
						isDir: data.files[i].isDir
					});
				}

				//console.log(queue);

				buildQueue(nodes, d);
			}
		});
	}
}