original_string: protected function callback($args) {
  		$checkReg = '/[^a-zA-Z0-9;._-]/';
  		$node = (isset($args['node']) && !preg_match($checkReg, $args['node']))? $args['node'] : '';
  		$json = (isset($args['json']) && @json_decode($args['json']))? $args['json'] : '{}';
  		$bind  = (isset($args['bind']) && !preg_match($checkReg, $args['bind']))? $args['bind'] : '';
  		$done = (!empty($args['done']));
  		
  		while( ob_get_level() ) {
  			if (! ob_end_clean()) {
  				break;
  			}
  		}
  		
  		if ($done || ! $this->callbackWindowURL) {
  			$script = '';
  			if ($node) {
  				$script .= '
  					var w = window.opener || weindow.parent || window
  					var elf = w.document.getElementById(\''.$node.'\').elfinder;
  					if (elf) {
  						var data = '.$json.';
  						data.warning && elf.error(data.warning);
  						data.removed && data.removed.length && elf.remove(data);
  						data.added   && data.added.length   && elf.add(data);
  						data.changed && data.changed.length && elf.change(data);';
  				if ($bind) {
  					$script .= '
  						elf.trigger(\''.$bind.'\', data);';
  				}
  				$script .= '
  						data.sync && elf.sync();
  					}';
  			}
  			$script .= 'window.close();';
  			
  			$out = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script>'.$script.'</script></head><body><a href="#" onlick="window.close();return false;">Close this window</a></body></html>';
  			
  			header('Content-Type: text/html; charset=utf-8');
  			header('Content-Length: '.strlen($out));
  			header('Cache-Control: private');
  			header('Pragma: no-cache');
  			
  			echo $out;
  			
  		} else {
  			$url = $this->callbackWindowURL;
  			$url .= ((strpos($url, '?') === false)? '?' : '&')
  				 . '&node=' . rawurlencode($node)
  				 . (($json !== '{}')? ('&json=' . rawurlencode($json)) : '')
  				 . ($bind? ('&bind=' .  rawurlencode($bind)) : '')
  				 . '&done=1';
  			
  			header('Location: ' . $url);
  			
  		}
  		exit();
  	}
code: protected function callback($args) {
  		$checkReg = '/[^a-zA-Z0-9;._-]/';
  		$node = (isset($args['node']) && !preg_match($checkReg, $args['node']))? $args['node'] : '';
  		$json = (isset($args['json']) && @json_decode($args['json']))? $args['json'] : '{}';
  		$bind  = (isset($args['bind']) && !preg_match($checkReg, $args['bind']))? $args['bind'] : '';
  		$done = (!empty($args['done']));
  		
  		while( ob_get_level() ) {
  			if (! ob_end_clean()) {
  				break;
  			}
  		}
  		
  		if ($done || ! $this->callbackWindowURL) {
  			$script = '';
  			if ($node) {
  				$script .= '
  					var w = window.opener || weindow.parent || window
  					var elf = w.document.getElementById(\''.$node.'\').elfinder;
  					if (elf) {
  						var data = '.$json.';
  						data.warning && elf.error(data.warning);
  						data.removed && data.removed.length && elf.remove(data);
  						data.added   && data.added.length   && elf.add(data);
  						data.changed && data.changed.length && elf.change(data);';
  				if ($bind) {
  					$script .= '
  						elf.trigger(\''.$bind.'\', data);';
  				}
  				$script .= '
  						data.sync && elf.sync();
  					}';
  			}
  			$script .= 'window.close();';
  			
  			$out = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script>'.$script.'</script></head><body><a href="#" onlick="window.close();return false;">Close this window</a></body></html>';
  			
  			header('Content-Type: text/html; charset=utf-8');
  			header('Content-Length: '.strlen($out));
  			header('Cache-Control: private');
  			header('Pragma: no-cache');
  			
  			echo $out;
  			
  		} else {
  			$url = $this->callbackWindowURL;
  			$url .= ((strpos($url, '?') === false)? '?' : '&')
  				 . '&node=' . rawurlencode($node)
  				 . (($json !== '{}')? ('&json=' . rawurlencode($json)) : '')
  				 . ($bind? ('&bind=' .  rawurlencode($bind)) : '')
  				 . '&done=1';
  			
  			header('Location: ' . $url);
  			
  		}
  		exit();
  	}
code_tokens: protected function callback ( $ args ) { $ checkReg = '/[^a-zA-Z0-9;._-]/' ; $ node = ( isset ( $ args [ 'node' ] ) && ! preg_match ( $ checkReg , $ args [ 'node' ] ) ) ? $ args [ 'node' ] : '' ; $ json = ( isset ( $ args [ 'json' ] ) && @ json_decode ( $ args [ 'json' ] ) ) ? $ args [ 'json' ] : '{}' ; $ bind = ( isset ( $ args [ 'bind' ] ) && ! preg_match ( $ checkReg , $ args [ 'bind' ] ) ) ? $ args [ 'bind' ] : '' ; $ done = ( ! empty ( $ args [ 'done' ] ) ) ; while ( ob_get_level ( ) ) { if ( ! ob_end_clean ( ) ) { break ; } } if ( $ done || ! $ this -> callbackWindowURL ) { $ script = '' ; if ( $ node ) { $ script .= '
  					var w = window.opener || weindow.parent || window
  					var elf = w.document.getElementById(\'' . $ node . '\').elfinder;
  					if (elf) {
  						var data = ' . $ json . ';
  						data.warning && elf.error(data.warning);
  						data.removed && data.removed.length && elf.remove(data);
  						data.added   && data.added.length   && elf.add(data);
  						data.changed && data.changed.length && elf.change(data);' ; if ( $ bind ) { $ script .= '
  						elf.trigger(\'' . $ bind . '\', data);' ; } $ script .= '
  						data.sync && elf.sync();
  					}' ; } $ script .= 'window.close();' ; $ out = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script>' . $ script . '</script></head><body><a href="#" onlick="window.close();return false;">Close this window</a></body></html>' ; header ( 'Content-Type: text/html; charset=utf-8' ) ; header ( 'Content-Length: ' . strlen ( $ out ) ) ; header ( 'Cache-Control: private' ) ; header ( 'Pragma: no-cache' ) ; echo $ out ; } else { $ url = $ this -> callbackWindowURL ; $ url .= ( ( strpos ( $ url , '?' ) === false ) ? '?' : '&' ) . '&node=' . rawurlencode ( $ node ) . ( ( $ json !== '{}' ) ? ( '&json=' . rawurlencode ( $ json ) ) : '' ) . ( $ bind ? ( '&bind=' . rawurlencode ( $ bind ) ) : '' ) . '&done=1' ; header ( 'Location: ' . $ url ) ; } exit ( ) ; }
docstring: Output callback result with JavaScript that control elFinder
  or HTTP redirect to callbackWindowURL
  
  @param  array  command arguments
  @author Naoki Sawada
docstring_tokens: Output callback result with JavaScript that control elFinder or HTTP redirect to callbackWindowURL