Updated SDKs
This commit is contained in:
parent
839428ce9c
commit
13bc97bd7e
|
@ -1223,8 +1223,8 @@ $collections = [
|
|||
],
|
||||
[
|
||||
'$collection' => Database::SYSTEM_COLLECTION_RULES,
|
||||
'label' => 'Active',
|
||||
'key' => 'active',
|
||||
'label' => 'Tag',
|
||||
'key' => 'tag',
|
||||
'type' => Database::SYSTEM_VAR_TYPE_KEY,
|
||||
'default' => '',
|
||||
'required' => false,
|
||||
|
|
|
@ -38,7 +38,7 @@ $utopia->post('/v1/functions')
|
|||
'dateCreated' => time(),
|
||||
'dateUpdated' => time(),
|
||||
'name' => $name,
|
||||
'active' => '',
|
||||
'tag' => '',
|
||||
'vars' => '', //$vars, // TODO Should be encrypted
|
||||
'trigger' => $trigger,
|
||||
'events' => $events,
|
||||
|
@ -146,17 +146,17 @@ $utopia->put('/v1/functions/:functionId')
|
|||
}
|
||||
);
|
||||
|
||||
$utopia->patch('/v1/functions/:functionId/active')
|
||||
->desc('Update Function Active Tag')
|
||||
$utopia->patch('/v1/functions/:functionId/tag')
|
||||
->desc('Update Function Tag')
|
||||
->label('scope', 'functions.write')
|
||||
->label('sdk.platform', [APP_PLATFORM_SERVER])
|
||||
->label('sdk.namespace', 'functions')
|
||||
->label('sdk.method', 'updateTag')
|
||||
->label('sdk.description', '/docs/references/functions/update-tag.md')
|
||||
->param('functionId', '', function () { return new UID(); }, 'Function unique ID.')
|
||||
->param('active', '', function () { return new UID(); }, 'Active tag unique ID.')
|
||||
->param('tag', '', function () { return new UID(); }, 'Tag unique ID.')
|
||||
->action(
|
||||
function ($functionId, $active) use ($response, $projectDB) {
|
||||
function ($functionId, $tag) use ($response, $projectDB) {
|
||||
$function = $projectDB->getDocument($functionId);
|
||||
|
||||
if (empty($function->getId()) || Database::SYSTEM_COLLECTION_FUNCTIONS != $function->getCollection()) {
|
||||
|
@ -164,7 +164,7 @@ $utopia->patch('/v1/functions/:functionId/active')
|
|||
}
|
||||
|
||||
$function = $projectDB->updateDocument(array_merge($function->getArrayCopy(), [
|
||||
'active' => $active,
|
||||
'tag' => $tag,
|
||||
]));
|
||||
|
||||
if (false === $function) {
|
||||
|
@ -381,7 +381,7 @@ $utopia->post('/v1/functions/:functionId/executions')
|
|||
throw new Exception('Failed saving execution to DB', 500);
|
||||
}
|
||||
|
||||
$tag = $projectDB->getDocument($function->getAttribute('active'));
|
||||
$tag = $projectDB->getDocument($function->getAttribute('tag'));
|
||||
|
||||
if($tag->getAttribute('functionId') !== $function->getId()) {
|
||||
throw new Exception('Tag not found. Deploy tag before trying to execute a function', 404);
|
||||
|
|
|
@ -265,15 +265,15 @@ $utopia->get('/console/users')
|
|||
->setParam('body', $page);
|
||||
});
|
||||
|
||||
$utopia->get('/console/users/view')
|
||||
$utopia->get('/console/users/user')
|
||||
->desc('Platform console project user')
|
||||
->label('permission', 'public')
|
||||
->label('scope', 'console')
|
||||
->action(function () use ($layout) {
|
||||
$page = new View(__DIR__.'/../../views/console/users/view.phtml');
|
||||
$page = new View(__DIR__.'/../../views/console/users/user.phtml');
|
||||
|
||||
$layout
|
||||
->setParam('title', APP_NAME.' - View User')
|
||||
->setParam('title', APP_NAME.' - User')
|
||||
->setParam('body', $page);
|
||||
});
|
||||
|
||||
|
@ -285,6 +285,18 @@ $utopia->get('/console/functions')
|
|||
$page = new View(__DIR__.'/../../views/console/functions/index.phtml');
|
||||
|
||||
$layout
|
||||
->setParam('title', APP_NAME.' - Users')
|
||||
->setParam('title', APP_NAME.' - Functions')
|
||||
->setParam('body', $page);
|
||||
});
|
||||
|
||||
$utopia->get('/console/functions/function')
|
||||
->desc('Platform console project function')
|
||||
->label('permission', 'public')
|
||||
->label('scope', 'console')
|
||||
->action(function () use ($layout) {
|
||||
$page = new View(__DIR__.'/../../views/console/functions/function.phtml');
|
||||
|
||||
$layout
|
||||
->setParam('title', APP_NAME.' - Function')
|
||||
->setParam('body', $page);
|
||||
});
|
|
@ -5,7 +5,7 @@ sdk
|
|||
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
|
||||
;
|
||||
|
||||
let promise = sdk.functions.updateTag('[FUNCTION_ID]', '[ACTIVE]');
|
||||
let promise = sdk.functions.updateTag('[FUNCTION_ID]', '[TAG]');
|
||||
|
||||
promise.then(function (response) {
|
||||
console.log(response); // Success
|
||||
|
|
|
@ -1801,38 +1801,6 @@
|
|||
}, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Update Function Active Tag
|
||||
*
|
||||
*
|
||||
* @param {string} functionId
|
||||
* @param {string} active
|
||||
* @throws {Error}
|
||||
* @return {Promise}
|
||||
*/
|
||||
updateTag: function(functionId, active) {
|
||||
if(functionId === undefined) {
|
||||
throw new Error('Missing required parameter: "functionId"');
|
||||
}
|
||||
|
||||
if(active === undefined) {
|
||||
throw new Error('Missing required parameter: "active"');
|
||||
}
|
||||
|
||||
let path = '/functions/{functionId}/active'.replace(new RegExp('{functionId}', 'g'), functionId);
|
||||
|
||||
let payload = {};
|
||||
|
||||
if(active) {
|
||||
payload['active'] = active;
|
||||
}
|
||||
|
||||
return http
|
||||
.patch(path, {
|
||||
'content-type': 'application/json',
|
||||
}, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* List Executions
|
||||
*
|
||||
|
@ -1932,6 +1900,38 @@
|
|||
}, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Update Function Tag
|
||||
*
|
||||
*
|
||||
* @param {string} functionId
|
||||
* @param {string} tag
|
||||
* @throws {Error}
|
||||
* @return {Promise}
|
||||
*/
|
||||
updateTag: function(functionId, tag) {
|
||||
if(functionId === undefined) {
|
||||
throw new Error('Missing required parameter: "functionId"');
|
||||
}
|
||||
|
||||
if(tag === undefined) {
|
||||
throw new Error('Missing required parameter: "tag"');
|
||||
}
|
||||
|
||||
let path = '/functions/{functionId}/tag'.replace(new RegExp('{functionId}', 'g'), functionId);
|
||||
|
||||
let payload = {};
|
||||
|
||||
if(tag) {
|
||||
payload['tag'] = tag;
|
||||
}
|
||||
|
||||
return http
|
||||
.patch(path, {
|
||||
'content-type': 'application/json',
|
||||
}, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* List Tags
|
||||
*
|
||||
|
|
10
app/sdks/console-javascript/src/sdk.min.js
vendored
10
app/sdks/console-javascript/src/sdk.min.js
vendored
|
@ -154,10 +154,7 @@ if(events){payload.events=events}
|
|||
if(schedule){payload.schedule=schedule}
|
||||
if(timeout){payload.timeout=timeout}
|
||||
return http.put(path,{'content-type':'application/json',},payload)},delete:function(functionId){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
let path='/functions/{functionId}'.replace(new RegExp('{functionId}','g'),functionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},updateTag:function(functionId,active){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
if(active===undefined){throw new Error('Missing required parameter: "active"')}
|
||||
let path='/functions/{functionId}/active'.replace(new RegExp('{functionId}','g'),functionId);let payload={};if(active){payload.active=active}
|
||||
return http.patch(path,{'content-type':'application/json',},payload)},listExecutions:function(functionId,search='',limit=25,offset=0,orderType='ASC'){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
let path='/functions/{functionId}'.replace(new RegExp('{functionId}','g'),functionId);let payload={};return http.delete(path,{'content-type':'application/json',},payload)},listExecutions:function(functionId,search='',limit=25,offset=0,orderType='ASC'){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
let path='/functions/{functionId}/executions'.replace(new RegExp('{functionId}','g'),functionId);let payload={};if(search){payload.search=search}
|
||||
if(limit){payload.limit=limit}
|
||||
if(offset){payload.offset=offset}
|
||||
|
@ -166,7 +163,10 @@ return http.get(path,{'content-type':'application/json',},payload)},createExecut
|
|||
let path='/functions/{functionId}/executions'.replace(new RegExp('{functionId}','g'),functionId);let payload={};if(async){payload.async=async}
|
||||
return http.post(path,{'content-type':'application/json',},payload)},getExecution:function(functionId,executionId){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
if(executionId===undefined){throw new Error('Missing required parameter: "executionId"')}
|
||||
let path='/functions/{functionId}/executions/{executionId}'.replace(new RegExp('{functionId}','g'),functionId).replace(new RegExp('{executionId}','g'),executionId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},listTags:function(functionId,search='',limit=25,offset=0,orderType='ASC'){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
let path='/functions/{functionId}/executions/{executionId}'.replace(new RegExp('{functionId}','g'),functionId).replace(new RegExp('{executionId}','g'),executionId);let payload={};return http.get(path,{'content-type':'application/json',},payload)},updateTag:function(functionId,tag){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
if(tag===undefined){throw new Error('Missing required parameter: "tag"')}
|
||||
let path='/functions/{functionId}/tag'.replace(new RegExp('{functionId}','g'),functionId);let payload={};if(tag){payload.tag=tag}
|
||||
return http.patch(path,{'content-type':'application/json',},payload)},listTags:function(functionId,search='',limit=25,offset=0,orderType='ASC'){if(functionId===undefined){throw new Error('Missing required parameter: "functionId"')}
|
||||
let path='/functions/{functionId}/tags'.replace(new RegExp('{functionId}','g'),functionId);let payload={};if(search){payload.search=search}
|
||||
if(limit){payload.limit=limit}
|
||||
if(offset){payload.offset=offset}
|
||||
|
|
22
app/sdks/console-javascript/types/index.d.ts
vendored
22
app/sdks/console-javascript/types/index.d.ts
vendored
|
@ -656,17 +656,6 @@ declare namespace Appwrite {
|
|||
*/
|
||||
delete(functionId: string): Promise<object>;
|
||||
|
||||
/**
|
||||
* Update Function Active Tag
|
||||
*
|
||||
*
|
||||
* @param {string} functionId
|
||||
* @param {string} active
|
||||
* @throws {Error}
|
||||
* @return {Promise}
|
||||
*/
|
||||
updateTag(functionId: string, active: string): Promise<object>;
|
||||
|
||||
/**
|
||||
* List Executions
|
||||
*
|
||||
|
@ -703,6 +692,17 @@ declare namespace Appwrite {
|
|||
*/
|
||||
getExecution(functionId: string, executionId: string): Promise<object>;
|
||||
|
||||
/**
|
||||
* Update Function Tag
|
||||
*
|
||||
*
|
||||
* @param {string} functionId
|
||||
* @param {string} tag
|
||||
* @throws {Error}
|
||||
* @return {Promise}
|
||||
*/
|
||||
updateTag(functionId: string, tag: string): Promise<object>;
|
||||
|
||||
/**
|
||||
* List Tags
|
||||
*
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit d3fe8a096c74cdfe90b44ad26cf70aebaa17a0b7
|
|
@ -15,7 +15,7 @@ func main() {
|
|||
client: &client
|
||||
}
|
||||
|
||||
var response, error := service.UpdateTag("[FUNCTION_ID]", "[ACTIVE]")
|
||||
var response, error := service.UpdateTag("[FUNCTION_ID]", "[TAG]")
|
||||
|
||||
if error != nil {
|
||||
panic(error)
|
||||
|
|
|
@ -86,18 +86,6 @@ func (srv *Functions) Delete(FunctionId string) (map[string]interface{}, error)
|
|||
return srv.client.Call("DELETE", path, nil, params)
|
||||
}
|
||||
|
||||
// UpdateTag
|
||||
func (srv *Functions) UpdateTag(FunctionId string, Active string) (map[string]interface{}, error) {
|
||||
r := strings.NewReplacer("{functionId}", FunctionId)
|
||||
path := r.Replace("/functions/{functionId}/active")
|
||||
|
||||
params := map[string]interface{}{
|
||||
"active": Active,
|
||||
}
|
||||
|
||||
return srv.client.Call("PATCH", path, nil, params)
|
||||
}
|
||||
|
||||
// ListExecutions
|
||||
func (srv *Functions) ListExecutions(FunctionId string, Search string, Limit int, Offset int, OrderType string) (map[string]interface{}, error) {
|
||||
r := strings.NewReplacer("{functionId}", FunctionId)
|
||||
|
@ -136,6 +124,18 @@ func (srv *Functions) GetExecution(FunctionId string, ExecutionId string) (map[s
|
|||
return srv.client.Call("GET", path, nil, params)
|
||||
}
|
||||
|
||||
// UpdateTag
|
||||
func (srv *Functions) UpdateTag(FunctionId string, Tag string) (map[string]interface{}, error) {
|
||||
r := strings.NewReplacer("{functionId}", FunctionId)
|
||||
path := r.Replace("/functions/{functionId}/tag")
|
||||
|
||||
params := map[string]interface{}{
|
||||
"tag": Tag,
|
||||
}
|
||||
|
||||
return srv.client.Call("PATCH", path, nil, params)
|
||||
}
|
||||
|
||||
// ListTags
|
||||
func (srv *Functions) ListTags(FunctionId string, Search string, Limit int, Offset int, OrderType string) (map[string]interface{}, error) {
|
||||
r := strings.NewReplacer("{functionId}", FunctionId)
|
||||
|
|
|
@ -114,23 +114,6 @@ public class Functions extends Service {
|
|||
return client.call("DELETE", path, headers, params);
|
||||
}
|
||||
|
||||
/// Update Function Active Tag
|
||||
public Call updateTag(String functionId, String active) {
|
||||
final String path = "/functions/{functionId}/active".replace("{functionId}", functionId);
|
||||
|
||||
final Map<String, Object> params = Map.ofEntries(
|
||||
entry("active", active)
|
||||
);
|
||||
|
||||
|
||||
|
||||
final Map<String, String> headers = Map.ofEntries(
|
||||
entry("content-type", "application/json")
|
||||
);
|
||||
|
||||
return client.call("PATCH", path, headers, params);
|
||||
}
|
||||
|
||||
/// List Executions
|
||||
public Call listExecutions(String functionId, String search, int limit, int offset, OrderType orderType) {
|
||||
final String path = "/functions/{functionId}/executions".replace("{functionId}", functionId);
|
||||
|
@ -184,6 +167,23 @@ public class Functions extends Service {
|
|||
return client.call("GET", path, headers, params);
|
||||
}
|
||||
|
||||
/// Update Function Tag
|
||||
public Call updateTag(String functionId, String tag) {
|
||||
final String path = "/functions/{functionId}/tag".replace("{functionId}", functionId);
|
||||
|
||||
final Map<String, Object> params = Map.ofEntries(
|
||||
entry("tag", tag)
|
||||
);
|
||||
|
||||
|
||||
|
||||
final Map<String, String> headers = Map.ofEntries(
|
||||
entry("content-type", "application/json")
|
||||
);
|
||||
|
||||
return client.call("PATCH", path, headers, params);
|
||||
}
|
||||
|
||||
/// List Tags
|
||||
public Call listTags(String functionId, String search, int limit, int offset, OrderType orderType) {
|
||||
final String path = "/functions/{functionId}/tags".replace("{functionId}", functionId);
|
||||
|
|
|
@ -10,7 +10,7 @@ client
|
|||
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
|
||||
;
|
||||
|
||||
let promise = functions.updateTag('[FUNCTION_ID]', '[ACTIVE]');
|
||||
let promise = functions.updateTag('[FUNCTION_ID]', '[TAG]');
|
||||
|
||||
promise.then(function (response) {
|
||||
console.log(response);
|
||||
|
|
|
@ -117,25 +117,6 @@ class Functions extends Service {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Function Active Tag
|
||||
*
|
||||
* @param string functionId
|
||||
* @param string active
|
||||
* @throws Exception
|
||||
* @return {}
|
||||
*/
|
||||
async updateTag(functionId, active) {
|
||||
let path = '/functions/{functionId}/active'.replace(new RegExp('{functionId}', 'g'), functionId);
|
||||
|
||||
return await this.client.call('patch', path, {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
{
|
||||
'active': active
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* List Executions
|
||||
*
|
||||
|
@ -198,6 +179,25 @@ class Functions extends Service {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Function Tag
|
||||
*
|
||||
* @param string functionId
|
||||
* @param string tag
|
||||
* @throws Exception
|
||||
* @return {}
|
||||
*/
|
||||
async updateTag(functionId, tag) {
|
||||
let path = '/functions/{functionId}/tag'.replace(new RegExp('{functionId}', 'g'), functionId);
|
||||
|
||||
return await this.client.call('patch', path, {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
{
|
||||
'tag': tag
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* List Tags
|
||||
*
|
||||
|
|
|
@ -12,4 +12,4 @@ $client
|
|||
|
||||
$functions = new Functions($client);
|
||||
|
||||
$result = $functions->updateTag('[FUNCTION_ID]', '[ACTIVE]');
|
||||
$result = $functions->updateTag('[FUNCTION_ID]', '[TAG]');
|
|
@ -74,19 +74,6 @@ DELETE https://appwrite.io/v1/functions/{functionId}
|
|||
| --- | --- | --- | --- |
|
||||
| functionId | string | **Required** Function unique ID. | |
|
||||
|
||||
## Update Function Active Tag
|
||||
|
||||
```http request
|
||||
PATCH https://appwrite.io/v1/functions/{functionId}/active
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
| Field Name | Type | Description | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| functionId | string | **Required** Function unique ID. | |
|
||||
| active | string | Active tag unique ID. | |
|
||||
|
||||
## List Executions
|
||||
|
||||
```http request
|
||||
|
@ -129,6 +116,19 @@ GET https://appwrite.io/v1/functions/{functionId}/executions/{executionId}
|
|||
| functionId | string | **Required** Function unique ID. | |
|
||||
| executionId | string | **Required** Execution unique ID. | |
|
||||
|
||||
## Update Function Tag
|
||||
|
||||
```http request
|
||||
PATCH https://appwrite.io/v1/functions/{functionId}/tag
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
| Field Name | Type | Description | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| functionId | string | **Required** Function unique ID. | |
|
||||
| tag | string | Tag unique ID. | |
|
||||
|
||||
## List Tags
|
||||
|
||||
```http request
|
||||
|
|
|
@ -128,26 +128,6 @@ class Functions extends Service
|
|||
], $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Function Active Tag
|
||||
*
|
||||
* @param string $functionId
|
||||
* @param string $active
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public function updateTag(string $functionId, string $active):array
|
||||
{
|
||||
$path = str_replace(['{functionId}'], [$functionId], '/functions/{functionId}/active');
|
||||
$params = [];
|
||||
|
||||
$params['active'] = $active;
|
||||
|
||||
return $this->client->call(Client::METHOD_PATCH, $path, [
|
||||
'content-type' => 'application/json',
|
||||
], $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* List Executions
|
||||
*
|
||||
|
@ -213,6 +193,26 @@ class Functions extends Service
|
|||
], $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Function Tag
|
||||
*
|
||||
* @param string $functionId
|
||||
* @param string $tag
|
||||
* @throws Exception
|
||||
* @return array
|
||||
*/
|
||||
public function updateTag(string $functionId, string $tag):array
|
||||
{
|
||||
$path = str_replace(['{functionId}'], [$functionId], '/functions/{functionId}/tag');
|
||||
$params = [];
|
||||
|
||||
$params['tag'] = $tag;
|
||||
|
||||
return $this->client->call(Client::METHOD_PATCH, $path, [
|
||||
'content-type' => 'application/json',
|
||||
], $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* List Tags
|
||||
*
|
||||
|
|
|
@ -75,18 +75,6 @@ class Functions(Service):
|
|||
'content-type': 'application/json',
|
||||
}, params)
|
||||
|
||||
def update_tag(self, function_id, active):
|
||||
"""Update Function Active Tag"""
|
||||
|
||||
params = {}
|
||||
path = '/functions/{functionId}/active'
|
||||
path = path.replace('{functionId}', function_id)
|
||||
params['active'] = active
|
||||
|
||||
return self.client.call('patch', path, {
|
||||
'content-type': 'application/json',
|
||||
}, params)
|
||||
|
||||
def list_executions(self, function_id, search='', limit=25, offset=0, order_type='ASC'):
|
||||
"""List Executions"""
|
||||
|
||||
|
@ -126,6 +114,18 @@ class Functions(Service):
|
|||
'content-type': 'application/json',
|
||||
}, params)
|
||||
|
||||
def update_tag(self, function_id, tag):
|
||||
"""Update Function Tag"""
|
||||
|
||||
params = {}
|
||||
path = '/functions/{functionId}/tag'
|
||||
path = path.replace('{functionId}', function_id)
|
||||
params['tag'] = tag
|
||||
|
||||
return self.client.call('patch', path, {
|
||||
'content-type': 'application/json',
|
||||
}, params)
|
||||
|
||||
def list_tags(self, function_id, search='', limit=25, offset=0, order_type='ASC'):
|
||||
"""List Tags"""
|
||||
|
||||
|
|
|
@ -10,4 +10,4 @@ client = Client()
|
|||
|
||||
functions = Functions(client)
|
||||
|
||||
result = functions.update_tag('[FUNCTION_ID]', '[ACTIVE]')
|
||||
result = functions.update_tag('[FUNCTION_ID]', '[TAG]')
|
||||
|
|
|
@ -75,19 +75,6 @@ module Appwrite
|
|||
}, params);
|
||||
end
|
||||
|
||||
def update_tag(function_id:, active:)
|
||||
path = '/functions/{functionId}/active'
|
||||
.gsub('{function_id}', function_id)
|
||||
|
||||
params = {
|
||||
'active': active
|
||||
}
|
||||
|
||||
return @client.call('patch', path, {
|
||||
'content-type' => 'application/json',
|
||||
}, params);
|
||||
end
|
||||
|
||||
def list_executions(function_id:, search: '', limit: 25, offset: 0, order_type: 'ASC')
|
||||
path = '/functions/{functionId}/executions'
|
||||
.gsub('{function_id}', function_id)
|
||||
|
@ -130,6 +117,19 @@ module Appwrite
|
|||
}, params);
|
||||
end
|
||||
|
||||
def update_tag(function_id:, tag:)
|
||||
path = '/functions/{functionId}/tag'
|
||||
.gsub('{function_id}', function_id)
|
||||
|
||||
params = {
|
||||
'tag': tag
|
||||
}
|
||||
|
||||
return @client.call('patch', path, {
|
||||
'content-type' => 'application/json',
|
||||
}, params);
|
||||
end
|
||||
|
||||
def list_tags(function_id:, search: '', limit: 25, offset: 0, order_type: 'ASC')
|
||||
path = '/functions/{functionId}/tags'
|
||||
.gsub('{function_id}', function_id)
|
||||
|
|
|
@ -385,7 +385,7 @@ $rules = $collection->getAttribute('rules', []);
|
|||
<input type="hidden" name="path" value="project-collection.rules" />
|
||||
<input type="hidden" name="type" value="append" />
|
||||
|
||||
<fieldset name="value" data-cast-to="object">
|
||||
<fieldset name="value" data-cast-to="object">
|
||||
<input name="$id" type="hidden" value="" />
|
||||
<input name="$collection" type="hidden" value="rules" />
|
||||
|
||||
|
|
144
app/views/console/functions/function.phtml
Normal file
144
app/views/console/functions/function.phtml
Normal file
|
@ -0,0 +1,144 @@
|
|||
<div
|
||||
data-service="functions.get"
|
||||
data-name="project-function"
|
||||
data-event="load,functions.update"
|
||||
data-param-function-id="{{router.params.id}}"
|
||||
data-success="trigger"
|
||||
data-success-param-trigger-events="functions.get">
|
||||
|
||||
<div class="cover">
|
||||
<h1 class="zone xl margin-bottom-large">
|
||||
<a data-ls-attrs="href=/console/functions?project={{router.params.project}}" class="back text-size-small"><i class="icon-left-open"></i> Functions</a>
|
||||
<br />
|
||||
|
||||
<span data-ls-bind="{{project-function.name}}"> </span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div data-ui-modal class="modal width-large box close" data-button-hide="on" data-open-event="open-json">
|
||||
<button type="button" class="close pull-end" data-ui-modal-close=""><i class="icon-cancel"></i></button>
|
||||
|
||||
<h2>JSON View</h2>
|
||||
|
||||
<div class="margin-bottom">
|
||||
<input type="hidden" data-ls-bind="{{project-function}}" data-forms-code />
|
||||
</div>
|
||||
|
||||
<button data-ui-modal-close="" type="button" class="reverse">Cancel</button>
|
||||
</div>
|
||||
|
||||
<div class="zone xl">
|
||||
<ul class="phases clear" data-ui-phases data-selected="{{router.params.tab}}">
|
||||
<li data-state="/console/functions/function?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<h2>Tags</h2>
|
||||
</li>
|
||||
<li data-state="/console/functions/function/settings?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<h2>Settings</h2>
|
||||
|
||||
<div class="row responsive margin-top-negative">
|
||||
<div class="col span-8">
|
||||
<form
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Update Function"
|
||||
data-service="functions.update"
|
||||
data-scope="sdk"
|
||||
data-event="submit"
|
||||
data-param-function-id="{{router.params.id}}"
|
||||
data-success="alert,trigger"
|
||||
data-success-param-alert-text="Updated function successfully"
|
||||
data-success-param-trigger-events="functions.update"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to update function"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<label> </label>
|
||||
|
||||
<div class="box">
|
||||
<label for="function-name">Name</label>
|
||||
<input name="name" id="function-name" type="text" autocomplete="off" data-ls-bind="{{project-function.name}}" data-forms-text-direction required placeholder="Function Name" />
|
||||
|
||||
<label for="function-trigger">Trigger</label>
|
||||
<select name="type" required>
|
||||
<option value="event">On Event</option>
|
||||
<option value="schedule">On Schedule</option>
|
||||
</select>
|
||||
<h3 class="margin-bottom-small">Variables</h3>
|
||||
|
||||
<div data-ls-if="(!{{project-function.vars.length}})">
|
||||
<hr class="margin-bottom margin-top-no" />
|
||||
|
||||
<!-- <div class="margin-bottom-xl margin-top-xl margin-end margin-start text-align-center">
|
||||
<h4 class="text-fade text-size-small">No variables added yet.</h4>
|
||||
</div> -->
|
||||
|
||||
<fieldset name="vars" data-cast-to="object">
|
||||
<div data-ls-loop="project-function.vars" data-ls-as="var" style="overflow: hidden">
|
||||
<div class="margin-bottom-small">
|
||||
<div data-forms-remove class="row thin">
|
||||
<div class="col span-10">
|
||||
<input type="hidden" data-forms-key-value data-ls-attrs="name={{$index}}" data-ls-bind="{{var}}" data-cast-to="array" />
|
||||
</div>
|
||||
<div class="col span-2">
|
||||
<button type="button" data-remove class="reverse danger round pull-end"><i class="icon-cancel"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div data-forms-clone="" data-label="Add Variable" data-first="0">
|
||||
<div class="margin-bottom-small">
|
||||
<div data-forms-remove class="row thin margin-bottom-small">
|
||||
<div class="col span-10">
|
||||
<input type="hidden" name="" data-forms-key-value />
|
||||
</div>
|
||||
<div class="col span-2">
|
||||
<button type="button" data-remove class="reverse danger round pull-end"><i class="icon-cancel"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<hr class="margin-bottom margin-top-small" />
|
||||
</div>
|
||||
|
||||
<button>Update</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col span-4 sticky-top">
|
||||
<label>Function ID</label>
|
||||
<div class="input-copy margin-bottom">
|
||||
<input id="uid" type="text" autocomplete="off" placeholder="" data-ls-bind="{{project-function.$id}}" disabled data-forms-copy>
|
||||
</div>
|
||||
|
||||
<ul class="margin-bottom-large text-fade text-size-small">
|
||||
<li class="margin-bottom-small"><i class="icon-angle-circled-right margin-start-tiny margin-end-tiny"></i> <button data-ls-ui-trigger="open-json" class="link text-size-small">View as JSON</button></li>
|
||||
<li class="margin-bottom-small"><i class="icon-angle-circled-right margin-start-tiny margin-end-tiny"></i> Last Updated: <span data-ls-bind="{{project-function.dateUpdated|date-text}}"></span></li>
|
||||
<li class="margin-bottom-small"><i class="icon-angle-circled-right margin-start-tiny margin-end-tiny"></i> Created: <span data-ls-bind="{{project-function.dateCreated|date-text}}"></span></li>
|
||||
</ul>
|
||||
|
||||
<form name="functions.delete" class="margin-bottom"
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Delete Function"
|
||||
data-service="functions.delete"
|
||||
data-event="submit"
|
||||
data-param-function-id="{{router.params.id}}"
|
||||
data-confirm="Are you sure you want to delete this function?"
|
||||
data-success="alert,trigger,redirect"
|
||||
data-success-param-alert-text="Function deleted successfully"
|
||||
data-success-param-trigger-events="functions.delete"
|
||||
data-success-param-redirect-url="/console/functions?project={{router.params.project}}"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to delete function"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<button type="submit" class="danger fill">Delete Function</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
|
@ -28,116 +28,17 @@
|
|||
</div>
|
||||
|
||||
<div class="box margin-bottom" data-ls-if="0 != {{project-functions.functions.length}}">
|
||||
<ul data-ls-loop="project-functions" data-ls-as="function" class="list">
|
||||
<ul data-ls-loop="project-functions.functions" data-ls-as="function" class="list">
|
||||
<li class="clear">
|
||||
|
||||
<div data-ui-modal class="modal close sticky-footer" data-button-text="Update" data-button-class="pull-end">
|
||||
<button type="button" class="close pull-end" data-ui-modal-close=""><i class="icon-cancel"></i></button>
|
||||
|
||||
<h1>Update Function</h1>
|
||||
|
||||
<form
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Update Project Function"
|
||||
data-service="projects.updateFunction"
|
||||
data-scope="console"
|
||||
data-event="submit"
|
||||
data-success="alert,trigger,reset"
|
||||
data-success-param-alert-text="Updated function successfully"
|
||||
data-success-param-trigger-events="projects.updateFunction"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to update function"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<input type="hidden" name="projectId" data-ls-bind="{{router.params.project}}" />
|
||||
<input type="hidden" name="functionId" data-ls-bind="{{function.$id}}" />
|
||||
|
||||
<label data-ls-attrs="for=name-{{function.$id}}">Name</label>
|
||||
<input type="text" class="full-width" data-ls-attrs="id=name-{{function.$id}}" name="name" required autocomplete="off" data-ls-bind="{{function.name}}" />
|
||||
|
||||
<label data-ls-attrs="for=events-{{function.$id}}">Events</label>
|
||||
<div class="row responsive thin">
|
||||
<?php foreach ($events as $i => $event) : ?>
|
||||
<div class="col span-6 text-one-liner margin-bottom text-height-large">
|
||||
<input type="checkbox" name="events" data-ls-bind="{{function.events}}" value="<?php echo $event; ?>" /> <?php echo $event; ?>
|
||||
</div>
|
||||
<?php if (($i + 1) % 2 === 0) : ?>
|
||||
</div>
|
||||
<div class="row responsive thin">
|
||||
<?php endif; ?>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<label data-ls-attrs="for=url-{{function.$id}}">POST URL</label>
|
||||
<input type="url" class="full-width" data-ls-attrs="id=url-{{function.$id}}" name="url" required autocomplete="off" placeholder="https://example.com/callback" data-ls-bind="{{function.url}}" />
|
||||
|
||||
<div class="margin-bottom toggle" data-ls-ui-open>
|
||||
<i class="icon-plus pull-end margin-top-tiny"></i>
|
||||
<i class="icon-minus pull-end margin-top-tiny"></i>
|
||||
|
||||
<h3 class="margin-bottom">
|
||||
Advanced Options
|
||||
<small class="text-size-small">(optional)</small>
|
||||
</h3>
|
||||
|
||||
<label data-ls-attrs="for=security-{{task.$id}}" class="margin-bottom-small">
|
||||
<div class="margin-bottom-small text-bold">SSL / TLS (Certificate verification)</div>
|
||||
|
||||
<input name="security" type="radio" required data-ls-attrs="id=secure-yes-{{function.$id}}" data-ls-bind="{{function.security}}" value="1" /> <span>Enabled</span>
|
||||
<input name="security" type="radio" required data-ls-attrs="id=secure-no-{{function.$id}}" data-ls-bind="{{function.security}}" value="0" /> <span>Disabled</span>
|
||||
</label>
|
||||
|
||||
<p class="margin-bottom text-size-small text-fade"><span class="text-red">Warning</span>: Untrusted or self-signed certificates may not be secure.
|
||||
<a href="https://en.wikipedia.org/wiki/Self-signed_certificate" target="_blank" rel="noopener">Learn more<i class="icon-link-ext"></i></a>
|
||||
</p>
|
||||
|
||||
<label class="text-bold">HTTP Authentication <span class="tooltip" data-tooltip="Use to secure your endpoint from untrusted sources"><i class="icon-question"></i></span> <small>(optional)</small></label>
|
||||
|
||||
<div class="row responsive thin">
|
||||
<div class="col span-6 margin-bottom">
|
||||
<label data-ls-attrs="for=httpUser-{{function.$id}}">User</label>
|
||||
<input type="text" class="full-width margin-bottom-no" data-ls-attrs="id=httpUser-{{function.$id}}" name="httpUser" autocomplete="off" data-ls-bind="{{function.httpUser}}" />
|
||||
</div>
|
||||
<div class="col span-6 margin-bottom">
|
||||
<label data-ls-attrs="for=httpPass-{{function.$id}}">Password</label>
|
||||
<input type="password" class="full-width margin-bottom-no" data-ls-attrs="id=httpPass-{{function.$id}}" name="httpPass" autocomplete="off" data-ls-bind="{{function.httpPass}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<button type="submit">Save</button> <button data-ui-modal-close="" type="button" class="reverse">Cancel</button>
|
||||
</footer>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<form class="pull-end margin-end"
|
||||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Delete Project Function"
|
||||
data-service="projects.deleteFunction"
|
||||
data-scope="console"
|
||||
data-event="submit"
|
||||
data-confirm="Are you sure you want to delete this function?"
|
||||
data-success="alert,trigger"
|
||||
data-success-param-alert-text="Deleted function successfully"
|
||||
data-success-param-trigger-events="projects.deleteFunction"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to delete function"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<input type="hidden" name="projectId" data-ls-bind="{{router.params.project}}" />
|
||||
<input type="hidden" name="functionId" data-ls-bind="{{function.$id}}" />
|
||||
|
||||
<button class="danger reverse">Delete</button>
|
||||
</form>
|
||||
<a data-ls-attrs="href=/console/functions/function?id={{function.$id}}&project={{router.params.project}}" class="button pull-end">Settings</a>
|
||||
|
||||
<span data-ls-bind="{{function.name}}"></span> (<span data-ls-bind="{{function.events.length}}"></span> events)
|
||||
|
||||
<span data-ls-if="0 == {{function.security}}">
|
||||
<small class="text-danger">(SSL/TLS Disabled)</small>
|
||||
</span>
|
||||
|
||||
<div class="margin-top-tiny">
|
||||
<a data-ls-attrs="href={{function.url}}" data-ls-bind="{{function.url}}" target="_blank" class="text-one-liner"></a>
|
||||
</div>
|
||||
|
@ -155,18 +56,16 @@
|
|||
data-analytics-event="submit"
|
||||
data-analytics-category="console"
|
||||
data-analytics-label="Create Project Function"
|
||||
data-service="projects.create"
|
||||
data-scope="console"
|
||||
data-service="functions.create"
|
||||
data-scope="sdk"
|
||||
data-event="submit"
|
||||
data-success="alert,trigger,reset"
|
||||
data-success-param-alert-text="Created function successfully"
|
||||
data-success-param-trigger-events="projects.create"
|
||||
data-success-param-trigger-events="functions.create"
|
||||
data-failure="alert"
|
||||
data-failure-param-alert-text="Failed to create function"
|
||||
data-failure-param-alert-classname="error">
|
||||
|
||||
<input type="hidden" name="projectId" data-ls-bind="{{router.params.project}}" />
|
||||
|
||||
<label for="name">Name</label>
|
||||
<input type="text" id="name" name="name" required autocomplete="off" class="margin-bottom-xl" />
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ $providers = $this->getParam('providers', []);
|
|||
<img src="" data-ls-attrs="src={{user|gravatar}}" data-size="45" alt="User Avatar" class="avatar pull-start" loading="lazy" width="30" height="30" />
|
||||
</td>
|
||||
<td data-title="Name: ">
|
||||
<a data-ls-attrs="href=/console/users/view?id={{user.$id}}&project={{router.params.project}}">
|
||||
<a data-ls-attrs="href=/console/users/user?id={{user.$id}}&project={{router.params.project}}">
|
||||
<span data-ls-bind="{{user.name}}"></span>
|
||||
<span data-ls-if="{{user.name}} === ''">-----</span>
|
||||
</a>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<div class="zone xl">
|
||||
<ul class="phases clear" data-ui-phases data-selected="{{router.params.tab}}">
|
||||
<li data-state="/console/users/view?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<li data-state="/console/users/user?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<h2>General</h2>
|
||||
|
||||
<div data-ls-if="{{user.status}} === <?php echo \Appwrite\Auth\Auth::USER_STATUS_BLOCKED; ?>" style="display: none" class="box padding-small danger margin-bottom-xxl text-align-center">
|
||||
|
@ -143,7 +143,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li data-state="/console/users/view/devices?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<li data-state="/console/users/user/devices?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<h2>Devices</h2>
|
||||
|
||||
<div
|
||||
|
@ -209,7 +209,7 @@
|
|||
</div>
|
||||
|
||||
</li>
|
||||
<li data-state="/console/users/view/audit?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<li data-state="/console/users/user/audit?id={{router.params.id}}&project={{router.params.project}}">
|
||||
<h2>Activity</h2>
|
||||
|
||||
<div
|
|
@ -44,6 +44,8 @@ const configApp = {
|
|||
'public/scripts/views/forms/document.js',
|
||||
'public/scripts/views/forms/document-preview.js',
|
||||
'public/scripts/views/forms/filter.js',
|
||||
'public/scripts/views/forms/headers.js',
|
||||
'public/scripts/views/forms/key-value.js',
|
||||
'public/scripts/views/forms/move-down.js',
|
||||
'public/scripts/views/forms/move-up.js',
|
||||
'public/scripts/views/forms/nav.js',
|
||||
|
|
6
public/dist/scripts/app-all.js
vendored
6
public/dist/scripts/app-all.js
vendored
|
@ -2589,7 +2589,7 @@ return slf.renderToken(tokens,idx,opts);}
|
|||
md.renderer.rules.strong_open=renderEm;md.renderer.rules.strong_close=renderEm;return md;},true);})(window);(function(window){"use strict";window.ls.container.set('rtl',function(){var rtlStock="^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^";var special=["\n"," "," ","״",'"',"_","'","!","@","#","$","^","&","%","*","(",")","+","=","-","[","]","\\","/","{","}","|",":","<",">","?",",",".","0","1","2","3","4","5","6","7","8","9"];var isRTL=function(value){for(var i=0;i<value.length;i++){if(/\s/g.test(value[i])){continue;}
|
||||
if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
|
||||
if(-1<rtlStock.indexOf("^"+firstChar+"^")){return true;}
|
||||
return false;};return{isRTL:isRTL,};},true);})(window);(function(window){"use strict";window.ls.container.set('sdk',function(window,router){var sdk=new window.Appwrite();sdk.setEndpoint(APP_ENV.API).setProject(router.params.project||'').setLocale(APP_ENV.LOCALE).setMode('admin');return sdk;},false);})(window);(function(window){"use strict";window.ls.container.set('search',function(window){return{params:{},path:'',pointer:'',selected:'',};},true,true);})(window);(function(window){"use strict";window.ls.container.set('timezone',function(){return{convert:function(unixTime){var timezoneMinutes=new Date().getTimezoneOffset();timezoneMinutes=(timezoneMinutes===0)?0:-timezoneMinutes;return parseInt(unixTime)+(timezoneMinutes*60);}};},true);})(window);window.ls.router.add("/auth/signin",{template:"/auth/signin?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/signup",{template:"/auth/signup?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery",{template:"/auth/recovery?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery/reset",{template:"/auth/recovery/reset?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/confirm",{template:"/auth/confirm?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/join",{template:"/auth/join?version="+APP_ENV.VERSION,scope:"home"}).add("/console",{template:"/console?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account/:tab",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/home",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/home/:tab",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/platforms/:platform",{template:function(window){return window.location.pathname+"?version="+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/notifications",{template:"/console/notifications?version="+APP_ENV.VERSION,scope:"console"}).add("/console/settings",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/settings/:tab",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks/:tab",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys/:tab",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks/:tab",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database",{template:"/console/database?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database/collection",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/collection/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/storage",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/storage/:tab",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/view",{template:"/console/users/view?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/view/:tab",{template:"/console/users/view?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/:tab",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/:tab",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true});window.ls.filter.add("gravatar",function($value,element){if(!$value){return"";}
|
||||
return false;};return{isRTL:isRTL,};},true);})(window);(function(window){"use strict";window.ls.container.set('sdk',function(window,router){var sdk=new window.Appwrite();sdk.setEndpoint(APP_ENV.API).setProject(router.params.project||'').setLocale(APP_ENV.LOCALE).setMode('admin');return sdk;},false);})(window);(function(window){"use strict";window.ls.container.set('search',function(window){return{params:{},path:'',pointer:'',selected:'',};},true,true);})(window);(function(window){"use strict";window.ls.container.set('timezone',function(){return{convert:function(unixTime){var timezoneMinutes=new Date().getTimezoneOffset();timezoneMinutes=(timezoneMinutes===0)?0:-timezoneMinutes;return parseInt(unixTime)+(timezoneMinutes*60);}};},true);})(window);window.ls.router.add("/auth/signin",{template:"/auth/signin?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/signup",{template:"/auth/signup?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery",{template:"/auth/recovery?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery/reset",{template:"/auth/recovery/reset?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/confirm",{template:"/auth/confirm?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/join",{template:"/auth/join?version="+APP_ENV.VERSION,scope:"home"}).add("/console",{template:"/console?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account/:tab",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/home",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/home/:tab",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/platforms/:platform",{template:function(window){return window.location.pathname+"?version="+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/notifications",{template:"/console/notifications?version="+APP_ENV.VERSION,scope:"console"}).add("/console/settings",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/settings/:tab",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks/:tab",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys/:tab",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks/:tab",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database",{template:"/console/database?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database/collection",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/collection/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/storage",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/storage/:tab",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/user",{template:"/console/users/user?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/user/:tab",{template:"/console/users/user?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/:tab",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/function",{template:"/console/functions/function?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/function/:tab",{template:"/console/functions/function?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/:tab",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true});window.ls.filter.add("gravatar",function($value,element){if(!$value){return"";}
|
||||
let MD5=function(s){function L(k,d){return(k<<d)|(k>>>(32-d));}
|
||||
function K(G,k){let I,d,F,H,x;F=G&2147483648;H=k&2147483648;I=G&1073741824;d=k&1073741824;x=(G&1073741823)+(k&1073741823);if(I&d){return x^2147483648^F^H;}
|
||||
if(I|d){if(x&1073741824){return x^3221225472^F^H;}else{return x^1073741824^F^H;}}else{return x^F^H;}}
|
||||
|
@ -2637,7 +2637,7 @@ if(maxPlaces!==false){let test=new RegExp("\\.\\d{"+(maxPlaces+1)+",}$");if(test
|
|||
if(forcePlaces!==false){rounded=Number(rounded).toFixed(forcePlaces);}
|
||||
return rounded+abbr;}
|
||||
window.ls.container.get("view").add({selector:"data-acl",controller:function(element,document,router,alerts){document.body.classList.remove("console");document.body.classList.remove("home");document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add("hide-nav");document.body.classList.remove("show-nav");}else{document.body.classList.add("show-nav");document.body.classList.remove("hide-nav");}
|
||||
if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.textContent="Click Here to Copy";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);}
|
||||
if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.textContent="Click Here to Copy";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);}
|
||||
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:"data-ls-ui-chart",controller:function(element,container,date,document){let child=document.createElement("canvas");child.width=500;child.height=175;let stats=container.get("usage");if(!stats||!stats["requests"]||!stats["requests"]["data"]){return;}
|
||||
let config={type:"line",data:{labels:[],datasets:[{label:"Requests",backgroundColor:"rgba(230, 248, 253, 0.3)",borderColor:"#29b5d9",borderWidth:2,data:[0,0,0,0,0,0,0],fill:true}]},options:{responsive:true,title:{display:false,text:"Stats"},legend:{display:false},tooltips:{mode:"index",intersect:false,caretPadding:0},hover:{mode:"nearest",intersect:true},scales:{xAxes:[{display:false}],yAxes:[{display:false}]}}};for(let i=0;i<stats["requests"]["data"].length;i++){config.data.datasets[0].data[i]=stats["requests"]["data"][i].value;config.data.labels[i]=date.format("d F Y",stats["requests"]["data"][i].date);}
|
||||
element.innerHTML="";element.appendChild(child);container.set("chart",new Chart(child.getContext("2d"),config),true);element.dataset["canvas"]=true;}});(function(window){"use strict";window.ls.view.add({selector:"data-service",controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset["service"];let service=element.dataset["name"]||null;let event=expression.parse(element.dataset["event"]);let confirm=element.dataset["confirm"]||"";let loading=element.dataset["loading"]||"";let loaderId=null;let scope=element.dataset["scope"]||"sdk";let success=element.dataset["success"]||"";let failure=element.dataset["failure"]||"";let running=false;let callbacks={hide:function(){return function(){return element.style.opacity='0';};},reset:function(){return function(){if("FORM"===element.tagName){return element.reset();}
|
||||
|
@ -2696,7 +2696,7 @@ return{key:filter[0],value:filter[1],operator:operator};};let flatten=function(p
|
|||
list["filters-"+filter.key]=params[key][i];}}}}
|
||||
return list;};let apply=function(params){let cached=container.get(name);cached=cached?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+"-changed",{bubbles:false,cancelable:true}));};switch(element.tagName){case"INPUT":break;case"TEXTAREA":break;case"BUTTON":element.addEventListener("click",function(){apply(JSON.parse(expression.parse(element.dataset["params"]||"{}")));});break;case"FORM":element.addEventListener("input",function(){apply(form.toJson(element));});element.addEventListener("change",function(){apply(form.toJson(element));});element.addEventListener("reset",function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(",");for(let y=0;y<events.length;y++){if(events[y]==="init"){element.addEventListener("rendered",function(){apply(form.toJson(element));},{once:true});}else{}
|
||||
element.setAttribute("data-event","none");}
|
||||
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-down",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-down]")).map(function(obj){obj.addEventListener("click",function(){if(element.nextElementSibling){element.parentNode.insertBefore(element.nextElementSibling,element);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-up",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-up]")).map(function(obj){obj.addEventListener("click",function(){if(element.previousElementSibling){element.parentNode.insertBefore(element,element.previousElementSibling);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-nav",repeat:false,controller:function(element,view,container,document){let titles=document.querySelectorAll('[data-forms-nav-anchor]');let links=element.querySelectorAll('[data-forms-nav-link]');let minLink=null;let check=function(){let minDistance=null;let minElement=null;for(let i=0;i<titles.length;++i){let title=titles[i];let distance=title.getBoundingClientRect().top;console.log(i);if((minDistance===null||minDistance>=distance)&&(distance>=0)){if(minLink){minLink.classList.remove('selected');}
|
||||
break;default:break;}}});})(window);(function(window){window.ls.container.get("view").add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}});})(window);(function(window){window.ls.container.get("view").add({selector:"data-forms-key-value",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.name=key.value;element.value=value.value;};let syncB=function(){key.value=element.name||"";value.value=element.value||"";};syncB();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-down",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-down]")).map(function(obj){obj.addEventListener("click",function(){if(element.nextElementSibling){element.parentNode.insertBefore(element.nextElementSibling,element);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-up",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-up]")).map(function(obj){obj.addEventListener("click",function(){if(element.previousElementSibling){element.parentNode.insertBefore(element,element.previousElementSibling);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-nav",repeat:false,controller:function(element,view,container,document){let titles=document.querySelectorAll('[data-forms-nav-anchor]');let links=element.querySelectorAll('[data-forms-nav-link]');let minLink=null;let check=function(){let minDistance=null;let minElement=null;for(let i=0;i<titles.length;++i){let title=titles[i];let distance=title.getBoundingClientRect().top;console.log(i);if((minDistance===null||minDistance>=distance)&&(distance>=0)){if(minLink){minLink.classList.remove('selected');}
|
||||
console.log('old',minLink);minDistance=distance;minElement=title;minLink=links[i];minLink.classList.add('selected');console.log('new',minLink);}}};window.addEventListener('scroll',check);check();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-password-meter",controller:function(element,window){var calc=function(password){var score=0;if(!password)return score;var letters=new window.Object();for(var i=0;i<password.length;i++){letters[password[i]]=(letters[password[i]]||0)+1;score+=5.0/letters[password[i]];}
|
||||
var variations={digits:/\d/.test(password),lower:/[a-z]/.test(password),upper:/[A-Z]/.test(password),nonWords:/\W/.test(password)};var variationCount=0;for(var check in variations){if(variations.hasOwnProperty(check)){variationCount+=variations[check]===true?1:0;}}
|
||||
score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){var score=calc(this.value);if(""===this.value)return(meter.className="password-meter");if(score>60)return(meter.className="password-meter strong");if(score>30)return(meter.className="password-meter medium");if(score>=0)return(meter.className="password-meter weak");};var meter=window.document.createElement("div");meter.className="password-meter";element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener("change",callback);element.addEventListener("keypress",callback);element.addEventListener("keyup",callback);element.addEventListener("keydown",callback);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-pell",controller:function(element,window,document,markdown,rtl){var div=document.createElement("div");element.className="pell hide";div.className="input pell";element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule("underline",{filter:["u"],replacement:function(content){return"__"+content+"__";}});var editor=window.pell.init({element:div,onChange:function onChange(html){alignText();element.value=turndownService.turndown(html);},defaultParagraphSeparator:"p",actions:[{name:"bold",icon:'<i class="icon-bold"></i>'},{name:"underline",icon:'<i class="icon-underline"></i>'},{name:"italic",icon:'<i class="icon-italic"></i>'},{name:"olist",icon:'<i class="icon-list-numbered"></i>'},{name:"ulist",icon:'<i class="icon-list-bullet"></i>'},{name:"link",icon:'<i class="icon-link"></i>'}]});var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;console.log(clipboardData.getData("Text"));window.pell.exec("insertText",clipboardData.getData("Text"));return true;};var alignText=function(){let paragraphs=editor.content.querySelectorAll('p,li');let last='';for(let paragraph of paragraphs){var content=paragraph.textContent;if(content.trim()===''){content=last.textContent;}
|
||||
|
|
6
public/dist/scripts/app.js
vendored
6
public/dist/scripts/app.js
vendored
|
@ -248,7 +248,7 @@ return slf.renderToken(tokens,idx,opts);}
|
|||
md.renderer.rules.strong_open=renderEm;md.renderer.rules.strong_close=renderEm;return md;},true);})(window);(function(window){"use strict";window.ls.container.set('rtl',function(){var rtlStock="^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^";var special=["\n"," "," ","״",'"',"_","'","!","@","#","$","^","&","%","*","(",")","+","=","-","[","]","\\","/","{","}","|",":","<",">","?",",",".","0","1","2","3","4","5","6","7","8","9"];var isRTL=function(value){for(var i=0;i<value.length;i++){if(/\s/g.test(value[i])){continue;}
|
||||
if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
|
||||
if(-1<rtlStock.indexOf("^"+firstChar+"^")){return true;}
|
||||
return false;};return{isRTL:isRTL,};},true);})(window);(function(window){"use strict";window.ls.container.set('sdk',function(window,router){var sdk=new window.Appwrite();sdk.setEndpoint(APP_ENV.API).setProject(router.params.project||'').setLocale(APP_ENV.LOCALE).setMode('admin');return sdk;},false);})(window);(function(window){"use strict";window.ls.container.set('search',function(window){return{params:{},path:'',pointer:'',selected:'',};},true,true);})(window);(function(window){"use strict";window.ls.container.set('timezone',function(){return{convert:function(unixTime){var timezoneMinutes=new Date().getTimezoneOffset();timezoneMinutes=(timezoneMinutes===0)?0:-timezoneMinutes;return parseInt(unixTime)+(timezoneMinutes*60);}};},true);})(window);window.ls.router.add("/auth/signin",{template:"/auth/signin?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/signup",{template:"/auth/signup?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery",{template:"/auth/recovery?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery/reset",{template:"/auth/recovery/reset?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/confirm",{template:"/auth/confirm?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/join",{template:"/auth/join?version="+APP_ENV.VERSION,scope:"home"}).add("/console",{template:"/console?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account/:tab",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/home",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/home/:tab",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/platforms/:platform",{template:function(window){return window.location.pathname+"?version="+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/notifications",{template:"/console/notifications?version="+APP_ENV.VERSION,scope:"console"}).add("/console/settings",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/settings/:tab",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks/:tab",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys/:tab",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks/:tab",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database",{template:"/console/database?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database/collection",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/collection/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/storage",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/storage/:tab",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/view",{template:"/console/users/view?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/view/:tab",{template:"/console/users/view?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/:tab",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/:tab",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true});window.ls.filter.add("gravatar",function($value,element){if(!$value){return"";}
|
||||
return false;};return{isRTL:isRTL,};},true);})(window);(function(window){"use strict";window.ls.container.set('sdk',function(window,router){var sdk=new window.Appwrite();sdk.setEndpoint(APP_ENV.API).setProject(router.params.project||'').setLocale(APP_ENV.LOCALE).setMode('admin');return sdk;},false);})(window);(function(window){"use strict";window.ls.container.set('search',function(window){return{params:{},path:'',pointer:'',selected:'',};},true,true);})(window);(function(window){"use strict";window.ls.container.set('timezone',function(){return{convert:function(unixTime){var timezoneMinutes=new Date().getTimezoneOffset();timezoneMinutes=(timezoneMinutes===0)?0:-timezoneMinutes;return parseInt(unixTime)+(timezoneMinutes*60);}};},true);})(window);window.ls.router.add("/auth/signin",{template:"/auth/signin?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/signup",{template:"/auth/signup?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery",{template:"/auth/recovery?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/recovery/reset",{template:"/auth/recovery/reset?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/confirm",{template:"/auth/confirm?version="+APP_ENV.VERSION,scope:"home"}).add("/auth/join",{template:"/auth/join?version="+APP_ENV.VERSION,scope:"home"}).add("/console",{template:"/console?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/account/:tab",{template:"/console/account?version="+APP_ENV.VERSION,scope:"console"}).add("/console/home",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/home/:tab",{template:"/console/home?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/platforms/:platform",{template:function(window){return window.location.pathname+"?version="+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/notifications",{template:"/console/notifications?version="+APP_ENV.VERSION,scope:"console"}).add("/console/settings",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/settings/:tab",{template:"/console/settings?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/webhooks/:tab",{template:"/console/webhooks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/keys/:tab",{template:"/console/keys?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/tasks/:tab",{template:"/console/tasks?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database",{template:"/console/database?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/database/collection",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/collection/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/database/document/:tab",{template:function(window){return window.location.pathname+window.location.search+'&version='+APP_ENV.VERSION;},scope:"console",project:true}).add("/console/storage",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/storage/:tab",{template:"/console/storage?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/user",{template:"/console/users/user?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/user/:tab",{template:"/console/users/user?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/users/:tab",{template:"/console/users?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/function",{template:"/console/functions/function?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/function/:tab",{template:"/console/functions/function?version="+APP_ENV.VERSION,scope:"console",project:true}).add("/console/functions/:tab",{template:"/console/functions?version="+APP_ENV.VERSION,scope:"console",project:true});window.ls.filter.add("gravatar",function($value,element){if(!$value){return"";}
|
||||
let MD5=function(s){function L(k,d){return(k<<d)|(k>>>(32-d));}
|
||||
function K(G,k){let I,d,F,H,x;F=G&2147483648;H=k&2147483648;I=G&1073741824;d=k&1073741824;x=(G&1073741823)+(k&1073741823);if(I&d){return x^2147483648^F^H;}
|
||||
if(I|d){if(x&1073741824){return x^3221225472^F^H;}else{return x^1073741824^F^H;}}else{return x^F^H;}}
|
||||
|
@ -296,7 +296,7 @@ if(maxPlaces!==false){let test=new RegExp("\\.\\d{"+(maxPlaces+1)+",}$");if(test
|
|||
if(forcePlaces!==false){rounded=Number(rounded).toFixed(forcePlaces);}
|
||||
return rounded+abbr;}
|
||||
window.ls.container.get("view").add({selector:"data-acl",controller:function(element,document,router,alerts){document.body.classList.remove("console");document.body.classList.remove("home");document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add("hide-nav");document.body.classList.remove("show-nav");}else{document.body.classList.add("show-nav");document.body.classList.remove("hide-nav");}
|
||||
if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.textContent="Click Here to Copy";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);}
|
||||
if("/console"===router.getCurrent().path){document.body.classList.add("index");}else{document.body.classList.remove("index");}}}).add({selector:"data-prism",controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement("i");copy.className="icon-docs copy";copy.title="Copy to Clipboard";copy.textContent="Click Here to Copy";copy.addEventListener("click",function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand("copy");alerts.add({text:"Copied to clipboard",class:""},3000);}catch(err){alerts.add({text:"Failed to copy text ",class:"error"},3000);}
|
||||
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:"data-ls-ui-chart",controller:function(element,container,date,document){let child=document.createElement("canvas");child.width=500;child.height=175;let stats=container.get("usage");if(!stats||!stats["requests"]||!stats["requests"]["data"]){return;}
|
||||
let config={type:"line",data:{labels:[],datasets:[{label:"Requests",backgroundColor:"rgba(230, 248, 253, 0.3)",borderColor:"#29b5d9",borderWidth:2,data:[0,0,0,0,0,0,0],fill:true}]},options:{responsive:true,title:{display:false,text:"Stats"},legend:{display:false},tooltips:{mode:"index",intersect:false,caretPadding:0},hover:{mode:"nearest",intersect:true},scales:{xAxes:[{display:false}],yAxes:[{display:false}]}}};for(let i=0;i<stats["requests"]["data"].length;i++){config.data.datasets[0].data[i]=stats["requests"]["data"][i].value;config.data.labels[i]=date.format("d F Y",stats["requests"]["data"][i].date);}
|
||||
element.innerHTML="";element.appendChild(child);container.set("chart",new Chart(child.getContext("2d"),config),true);element.dataset["canvas"]=true;}});(function(window){"use strict";window.ls.view.add({selector:"data-service",controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset["service"];let service=element.dataset["name"]||null;let event=expression.parse(element.dataset["event"]);let confirm=element.dataset["confirm"]||"";let loading=element.dataset["loading"]||"";let loaderId=null;let scope=element.dataset["scope"]||"sdk";let success=element.dataset["success"]||"";let failure=element.dataset["failure"]||"";let running=false;let callbacks={hide:function(){return function(){return element.style.opacity='0';};},reset:function(){return function(){if("FORM"===element.tagName){return element.reset();}
|
||||
|
@ -355,7 +355,7 @@ return{key:filter[0],value:filter[1],operator:operator};};let flatten=function(p
|
|||
list["filters-"+filter.key]=params[key][i];}}}}
|
||||
return list;};let apply=function(params){let cached=container.get(name);cached=cached?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+"-changed",{bubbles:false,cancelable:true}));};switch(element.tagName){case"INPUT":break;case"TEXTAREA":break;case"BUTTON":element.addEventListener("click",function(){apply(JSON.parse(expression.parse(element.dataset["params"]||"{}")));});break;case"FORM":element.addEventListener("input",function(){apply(form.toJson(element));});element.addEventListener("change",function(){apply(form.toJson(element));});element.addEventListener("reset",function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(",");for(let y=0;y<events.length;y++){if(events[y]==="init"){element.addEventListener("rendered",function(){apply(form.toJson(element));},{once:true});}else{}
|
||||
element.setAttribute("data-event","none");}
|
||||
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-down",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-down]")).map(function(obj){obj.addEventListener("click",function(){if(element.nextElementSibling){element.parentNode.insertBefore(element.nextElementSibling,element);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-up",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-up]")).map(function(obj){obj.addEventListener("click",function(){if(element.previousElementSibling){element.parentNode.insertBefore(element,element.previousElementSibling);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-nav",repeat:false,controller:function(element,view,container,document){let titles=document.querySelectorAll('[data-forms-nav-anchor]');let links=element.querySelectorAll('[data-forms-nav-link]');let minLink=null;let check=function(){let minDistance=null;let minElement=null;for(let i=0;i<titles.length;++i){let title=titles[i];let distance=title.getBoundingClientRect().top;console.log(i);if((minDistance===null||minDistance>=distance)&&(distance>=0)){if(minLink){minLink.classList.remove('selected');}
|
||||
break;default:break;}}});})(window);(function(window){window.ls.container.get("view").add({selector:"data-forms-headers",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+":"+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(":");key.value=split[0]||"";value.value=split[1]||"";key.value=key.value.trim();value.value=value.value.trim();};syncB();}});})(window);(function(window){window.ls.container.get("view").add({selector:"data-forms-key-value",controller:function(element){let key=document.createElement("input");let value=document.createElement("input");let wrap=document.createElement("div");let cell1=document.createElement("div");let cell2=document.createElement("div");key.type="text";key.className="margin-bottom-no";key.placeholder="Key";value.type="text";value.className="margin-bottom-no";value.placeholder="Value";wrap.className="row thin margin-bottom-small";cell1.className="col span-6";cell2.className="col span-6";element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener("input",function(){syncA();});value.addEventListener("input",function(){syncA();});element.addEventListener("change",function(){syncB();});let syncA=function(){element.name=key.value;element.value=value.value;};let syncB=function(){key.value=element.name||"";value.value=element.value||"";};syncB();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-down",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-down]")).map(function(obj){obj.addEventListener("click",function(){if(element.nextElementSibling){element.parentNode.insertBefore(element.nextElementSibling,element);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-move-up",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-move-up]")).map(function(obj){obj.addEventListener("click",function(){if(element.previousElementSibling){element.parentNode.insertBefore(element,element.previousElementSibling);element.scrollIntoView(true);}});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-nav",repeat:false,controller:function(element,view,container,document){let titles=document.querySelectorAll('[data-forms-nav-anchor]');let links=element.querySelectorAll('[data-forms-nav-link]');let minLink=null;let check=function(){let minDistance=null;let minElement=null;for(let i=0;i<titles.length;++i){let title=titles[i];let distance=title.getBoundingClientRect().top;console.log(i);if((minDistance===null||minDistance>=distance)&&(distance>=0)){if(minLink){minLink.classList.remove('selected');}
|
||||
console.log('old',minLink);minDistance=distance;minElement=title;minLink=links[i];minLink.classList.add('selected');console.log('new',minLink);}}};window.addEventListener('scroll',check);check();}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-password-meter",controller:function(element,window){var calc=function(password){var score=0;if(!password)return score;var letters=new window.Object();for(var i=0;i<password.length;i++){letters[password[i]]=(letters[password[i]]||0)+1;score+=5.0/letters[password[i]];}
|
||||
var variations={digits:/\d/.test(password),lower:/[a-z]/.test(password),upper:/[A-Z]/.test(password),nonWords:/\W/.test(password)};var variationCount=0;for(var check in variations){if(variations.hasOwnProperty(check)){variationCount+=variations[check]===true?1:0;}}
|
||||
score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){var score=calc(this.value);if(""===this.value)return(meter.className="password-meter");if(score>60)return(meter.className="password-meter strong");if(score>30)return(meter.className="password-meter medium");if(score>=0)return(meter.className="password-meter weak");};var meter=window.document.createElement("div");meter.className="password-meter";element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener("change",callback);element.addEventListener("keypress",callback);element.addEventListener("keyup",callback);element.addEventListener("keydown",callback);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-pell",controller:function(element,window,document,markdown,rtl){var div=document.createElement("div");element.className="pell hide";div.className="input pell";element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule("underline",{filter:["u"],replacement:function(content){return"__"+content+"__";}});var editor=window.pell.init({element:div,onChange:function onChange(html){alignText();element.value=turndownService.turndown(html);},defaultParagraphSeparator:"p",actions:[{name:"bold",icon:'<i class="icon-bold"></i>'},{name:"underline",icon:'<i class="icon-underline"></i>'},{name:"italic",icon:'<i class="icon-italic"></i>'},{name:"olist",icon:'<i class="icon-list-numbered"></i>'},{name:"ulist",icon:'<i class="icon-list-bullet"></i>'},{name:"link",icon:'<i class="icon-link"></i>'}]});var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;console.log(clipboardData.getData("Text"));window.pell.exec("insertText",clipboardData.getData("Text"));return true;};var alignText=function(){let paragraphs=editor.content.querySelectorAll('p,li');let last='';for(let paragraph of paragraphs){var content=paragraph.textContent;if(content.trim()===''){content=last.textContent;}
|
||||
|
|
|
@ -27,61 +27,6 @@ window.ls.container
|
|||
}
|
||||
}
|
||||
})
|
||||
.add({
|
||||
selector: "data-forms-headers",
|
||||
controller: function(element) {
|
||||
let key = document.createElement("input");
|
||||
let value = document.createElement("input");
|
||||
let wrap = document.createElement("div");
|
||||
let cell1 = document.createElement("div");
|
||||
let cell2 = document.createElement("div");
|
||||
|
||||
key.type = "text";
|
||||
key.className = "margin-bottom-no";
|
||||
key.placeholder = "Key";
|
||||
value.type = "text";
|
||||
value.className = "margin-bottom-no";
|
||||
value.placeholder = "Value";
|
||||
|
||||
wrap.className = "row thin margin-bottom-small";
|
||||
cell1.className = "col span-6";
|
||||
cell2.className = "col span-6";
|
||||
|
||||
element.parentNode.insertBefore(wrap, element);
|
||||
cell1.appendChild(key);
|
||||
cell2.appendChild(value);
|
||||
wrap.appendChild(cell1);
|
||||
wrap.appendChild(cell2);
|
||||
|
||||
key.addEventListener("input", function() {
|
||||
syncA();
|
||||
});
|
||||
|
||||
value.addEventListener("input", function() {
|
||||
syncA();
|
||||
});
|
||||
|
||||
element.addEventListener("change", function() {
|
||||
syncB();
|
||||
});
|
||||
|
||||
let syncA = function() {
|
||||
element.value =
|
||||
key.value.toLowerCase() + ":" + value.value.toLowerCase();
|
||||
};
|
||||
|
||||
let syncB = function() {
|
||||
let split = element.value.toLowerCase().split(":");
|
||||
key.value = split[0] || "";
|
||||
value.value = split[1] || "";
|
||||
|
||||
key.value = key.value.trim();
|
||||
value.value = value.value.trim();
|
||||
};
|
||||
|
||||
syncB();
|
||||
}
|
||||
})
|
||||
.add({
|
||||
selector: "data-prism",
|
||||
controller: function(window, document, element, alerts) {
|
||||
|
|
|
@ -144,13 +144,13 @@ window.ls.router
|
|||
scope: "console",
|
||||
project: true
|
||||
})
|
||||
.add("/console/users/view", {
|
||||
template: "/console/users/view?version=" + APP_ENV.VERSION,
|
||||
.add("/console/users/user", {
|
||||
template: "/console/users/user?version=" + APP_ENV.VERSION,
|
||||
scope: "console",
|
||||
project: true
|
||||
})
|
||||
.add("/console/users/view/:tab", {
|
||||
template: "/console/users/view?version=" + APP_ENV.VERSION,
|
||||
.add("/console/users/user/:tab", {
|
||||
template: "/console/users/user?version=" + APP_ENV.VERSION,
|
||||
scope: "console",
|
||||
project: true
|
||||
})
|
||||
|
@ -164,6 +164,16 @@ window.ls.router
|
|||
scope: "console",
|
||||
project: true
|
||||
})
|
||||
.add("/console/functions/function", {
|
||||
template: "/console/functions/function?version=" + APP_ENV.VERSION,
|
||||
scope: "console",
|
||||
project: true
|
||||
})
|
||||
.add("/console/functions/function/:tab", {
|
||||
template: "/console/functions/function?version=" + APP_ENV.VERSION,
|
||||
scope: "console",
|
||||
project: true
|
||||
})
|
||||
.add("/console/functions/:tab", {
|
||||
template: "/console/functions?version=" + APP_ENV.VERSION,
|
||||
scope: "console",
|
||||
|
|
59
public/scripts/views/forms/headers.js
Normal file
59
public/scripts/views/forms/headers.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
(function(window) {
|
||||
//"use strict";
|
||||
|
||||
window.ls.container.get("view").add({
|
||||
selector: "data-forms-headers",
|
||||
controller: function(element) {
|
||||
let key = document.createElement("input");
|
||||
let value = document.createElement("input");
|
||||
let wrap = document.createElement("div");
|
||||
let cell1 = document.createElement("div");
|
||||
let cell2 = document.createElement("div");
|
||||
|
||||
key.type = "text";
|
||||
key.className = "margin-bottom-no";
|
||||
key.placeholder = "Key";
|
||||
value.type = "text";
|
||||
value.className = "margin-bottom-no";
|
||||
value.placeholder = "Value";
|
||||
|
||||
wrap.className = "row thin margin-bottom-small";
|
||||
cell1.className = "col span-6";
|
||||
cell2.className = "col span-6";
|
||||
|
||||
element.parentNode.insertBefore(wrap, element);
|
||||
cell1.appendChild(key);
|
||||
cell2.appendChild(value);
|
||||
wrap.appendChild(cell1);
|
||||
wrap.appendChild(cell2);
|
||||
|
||||
key.addEventListener("input", function() {
|
||||
syncA();
|
||||
});
|
||||
|
||||
value.addEventListener("input", function() {
|
||||
syncA();
|
||||
});
|
||||
|
||||
element.addEventListener("change", function() {
|
||||
syncB();
|
||||
});
|
||||
|
||||
let syncA = function() {
|
||||
element.value =
|
||||
key.value.toLowerCase() + ":" + value.value.toLowerCase();
|
||||
};
|
||||
|
||||
let syncB = function() {
|
||||
let split = element.value.toLowerCase().split(":");
|
||||
key.value = split[0] || "";
|
||||
value.value = split[1] || "";
|
||||
|
||||
key.value = key.value.trim();
|
||||
value.value = value.value.trim();
|
||||
};
|
||||
|
||||
syncB();
|
||||
}
|
||||
});
|
||||
})(window);
|
55
public/scripts/views/forms/key-value.js
Normal file
55
public/scripts/views/forms/key-value.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
(function(window) {
|
||||
//"use strict";
|
||||
|
||||
window.ls.container.get("view").add({
|
||||
selector: "data-forms-key-value",
|
||||
controller: function(element) {
|
||||
let key = document.createElement("input");
|
||||
let value = document.createElement("input");
|
||||
let wrap = document.createElement("div");
|
||||
let cell1 = document.createElement("div");
|
||||
let cell2 = document.createElement("div");
|
||||
|
||||
key.type = "text";
|
||||
key.className = "margin-bottom-no";
|
||||
key.placeholder = "Key";
|
||||
value.type = "text";
|
||||
value.className = "margin-bottom-no";
|
||||
value.placeholder = "Value";
|
||||
|
||||
wrap.className = "row thin margin-bottom-small";
|
||||
cell1.className = "col span-6";
|
||||
cell2.className = "col span-6";
|
||||
|
||||
element.parentNode.insertBefore(wrap, element);
|
||||
cell1.appendChild(key);
|
||||
cell2.appendChild(value);
|
||||
wrap.appendChild(cell1);
|
||||
wrap.appendChild(cell2);
|
||||
|
||||
key.addEventListener("input", function() {
|
||||
syncA();
|
||||
});
|
||||
|
||||
value.addEventListener("input", function() {
|
||||
syncA();
|
||||
});
|
||||
|
||||
element.addEventListener("change", function() {
|
||||
syncB();
|
||||
});
|
||||
|
||||
let syncA = function() {
|
||||
element.name = key.value;
|
||||
element.value = value.value;
|
||||
};
|
||||
|
||||
let syncB = function() {
|
||||
key.value = element.name || "";
|
||||
value.value = element.value || "";
|
||||
};
|
||||
|
||||
syncB();
|
||||
}
|
||||
});
|
||||
})(window);
|
|
@ -44,7 +44,7 @@ class FunctionsConsoleServerTest extends Scope
|
|||
$this->assertEquals('Test', $response1['body']['name']);
|
||||
$this->assertIsInt($response1['body']['dateCreated']);
|
||||
$this->assertIsInt($response1['body']['dateUpdated']);
|
||||
$this->assertEquals('', $response1['body']['active']);
|
||||
$this->assertEquals('', $response1['body']['tag']);
|
||||
// $this->assertEquals([
|
||||
// 'key1' => 'value1',
|
||||
// 'key2' => 'value2',
|
||||
|
@ -150,7 +150,7 @@ class FunctionsConsoleServerTest extends Scope
|
|||
$this->assertEquals('Test1', $response1['body']['name']);
|
||||
$this->assertIsInt($response1['body']['dateCreated']);
|
||||
$this->assertIsInt($response1['body']['dateUpdated']);
|
||||
$this->assertEquals('', $response1['body']['active']);
|
||||
$this->assertEquals('', $response1['body']['tag']);
|
||||
// $this->assertEquals([
|
||||
// 'key4' => 'value4',
|
||||
// 'key5' => 'value5',
|
||||
|
@ -207,23 +207,23 @@ class FunctionsConsoleServerTest extends Scope
|
|||
/**
|
||||
* @depends testCreateTag
|
||||
*/
|
||||
public function testUpdateActive($data):array
|
||||
public function testUpdateTag($data):array
|
||||
{
|
||||
/**
|
||||
* Test for SUCCESS
|
||||
*/
|
||||
$response = $this->client->call(Client::METHOD_PATCH, '/functions/'.$data['functionId'].'/active', array_merge([
|
||||
$response = $this->client->call(Client::METHOD_PATCH, '/functions/'.$data['functionId'].'/tag', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
], $this->getHeaders()), [
|
||||
'active' => $data['tagId'],
|
||||
'tag' => $data['tagId'],
|
||||
]);
|
||||
|
||||
$this->assertEquals(200, $response['headers']['status-code']);
|
||||
$this->assertNotEmpty($response['body']['$id']);
|
||||
$this->assertIsInt($response['body']['dateCreated']);
|
||||
$this->assertIsInt($response['body']['dateUpdated']);
|
||||
$this->assertEquals($data['tagId'], $response['body']['active']);
|
||||
$this->assertEquals($data['tagId'], $response['body']['tag']);
|
||||
|
||||
/**
|
||||
* Test for FAILURE
|
||||
|
@ -285,7 +285,7 @@ class FunctionsConsoleServerTest extends Scope
|
|||
|
||||
|
||||
/**
|
||||
* @depends testUpdateActive
|
||||
* @depends testUpdateTag
|
||||
*/
|
||||
public function testCreateExecution($data):array
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue