606 lines
32 KiB
JavaScript
606 lines
32 KiB
JavaScript
|
|
|
|
function EditGeneralMetadataDialog(projectId, callback) {
|
|
this._projectId = projectId;
|
|
this._callback = callback;
|
|
this._createDialog();
|
|
}
|
|
|
|
EditGeneralMetadataDialog.prototype._createDialog = function() {
|
|
var self = this;
|
|
|
|
var schema = {
|
|
"$schema": "http://json-schema.org/draft-06/schema#",
|
|
"title": "Data Package",
|
|
"description": "Data Package is a simple specification for data access and delivery.",
|
|
"type": "object",
|
|
"required": [
|
|
"resources"
|
|
],
|
|
"properties": {
|
|
"profile": {
|
|
"default": "data-package",
|
|
"propertyOrder": 10,
|
|
"title": "Profile",
|
|
"description": "The profile of this descriptor.",
|
|
"context": "Every Package and Resource descriptor has a profile. The default profile, if none is declared, is `data-package` for Package and `data-resource` for Resource.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"profile\": \"tabular-data-package\"\n}\n",
|
|
"{\n \"profile\": \"http://example.com/my-profiles-json-schema.json\"\n}\n"
|
|
]
|
|
},
|
|
"name": {
|
|
"propertyOrder": 20,
|
|
"title": "Name",
|
|
"description": "An identifier string. Lower case characters with `.`, `_`, `-` and `/` are allowed.",
|
|
"type": "string",
|
|
"pattern": "^([-a-z0-9._/])+$",
|
|
"context": "This is ideally a url-usable and human-readable name. Name `SHOULD` be invariant, meaning it `SHOULD NOT` change when its parent descriptor is updated.",
|
|
"examples": [
|
|
"{\n \"name\": \"my-nice-name\"\n}\n"
|
|
]
|
|
},
|
|
"id": {
|
|
"propertyOrder": 30,
|
|
"title": "ID",
|
|
"description": "A property reserved for globally unique identifiers. Examples of identifiers that are unique include UUIDs and DOIs.",
|
|
"context": "A common usage pattern for Data Packages is as a packaging format within the bounds of a system or platform. In these cases, a unique identifier for a package is desired for common data handling workflows, such as updating an existing package. While at the level of the specification, global uniqueness cannot be validated, consumers using the `id` property `MUST` ensure identifiers are globally unique.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"id\": \"b03ec84-77fd-4270-813b-0c698943f7ce\"\n}\n",
|
|
"{\n \"id\": \"http://dx.doi.org/10.1594/PANGAEA.726855\"\n}\n"
|
|
]
|
|
},
|
|
"title": {
|
|
"propertyOrder": 40,
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
},
|
|
"description": {
|
|
"propertyOrder": 50,
|
|
"title": "Description",
|
|
"description": "A text description. Markdown is encouraged.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n"
|
|
]
|
|
},
|
|
"homepage": {
|
|
"propertyOrder": 60,
|
|
"title": "Home Page",
|
|
"description": "The home on the web that is related to this data package.",
|
|
"type": "string",
|
|
"format": "uri",
|
|
"examples": [
|
|
"{\n \"homepage\": \"http://example.com/\"\n}\n"
|
|
]
|
|
},
|
|
"created": {
|
|
"propertyOrder": 70,
|
|
"title": "Created",
|
|
"description": "The datetime on which this descriptor was created.",
|
|
"context": "The datetime must conform to the string formats for datetime as described in [RFC3339](https://tools.ietf.org/html/rfc3339#section-5.6)",
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"examples": [
|
|
"{\n \"created\": \"1985-04-12T23:20:50.52Z\"\n}\n"
|
|
]
|
|
},
|
|
"contributors": {
|
|
"propertyOrder": 80,
|
|
"title": "Contributors",
|
|
"description": "The contributors to this descriptor.",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "Contributor",
|
|
"description": "A contributor to this descriptor.",
|
|
"properties": {
|
|
"title": {
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
},
|
|
"path": {
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
"email": {
|
|
"title": "Email",
|
|
"description": "An email address.",
|
|
"type": "string",
|
|
"format": "email",
|
|
"examples": [
|
|
"{\n \"email\": \"example@example.com\"\n}\n"
|
|
]
|
|
},
|
|
"organisation": {
|
|
"title": "Organization",
|
|
"description": "An organizational affiliation for this contributor.",
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"publisher",
|
|
"author",
|
|
"maintainer",
|
|
"wrangler",
|
|
"contributor"
|
|
],
|
|
"default": "contributor"
|
|
}
|
|
},
|
|
"required": [
|
|
"title"
|
|
],
|
|
"context": "Use of this property does not imply that the person was the original creator of, or a contributor to, the data in the descriptor, but refers to the composition of the descriptor itself."
|
|
},
|
|
"examples": [
|
|
"{\n \"contributors\": [\n {\n \"title\": \"Joe Bloggs\"\n }\n ]\n}\n",
|
|
"{\n \"contributors\": [\n {\n \"title\": \"Joe Bloggs\",\n \"email\": \"joe@example.com\",\n \"role\": \"author\"\n }\n ]\n}\n"
|
|
]
|
|
},
|
|
"keywords": {
|
|
"propertyOrder": 90,
|
|
"title": "Keywords",
|
|
"description": "A list of keywords that describe this package.",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"examples": [
|
|
"{\n \"keywords\": [\n \"data\",\n \"fiscal\",\n \"transparency\"\n ]\n}\n"
|
|
]
|
|
},
|
|
"image": {
|
|
"propertyOrder": 100,
|
|
"title": "Image",
|
|
"description": "A image to represent this package.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"image\": \"http://example.com/image.jpg\"\n}\n",
|
|
"{\n \"image\": \"relative/to/image.jpg\"\n}\n"
|
|
]
|
|
},
|
|
"licenses": {
|
|
"propertyOrder": 110,
|
|
"title": "Licenses",
|
|
"description": "The license(s) under which this package is published.",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "License",
|
|
"description": "A license for this descriptor.",
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"title": "Open Definition license identifier",
|
|
"description": "MUST be an Open Definition license identifier, see http://licenses.opendefinition.org/",
|
|
"type": "string",
|
|
"pattern": "^([-a-zA-Z0-9._])+$"
|
|
},
|
|
"path": {
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
"title": {
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
}
|
|
},
|
|
"context": "Use of this property does not imply that the person was the original creator of, or a contributor to, the data in the descriptor, but refers to the composition of the descriptor itself."
|
|
},
|
|
"context": "This property is not legally binding and does not guarantee that the package is licensed under the terms defined herein.",
|
|
"examples": [
|
|
"{\n \"licenses\": [\n {\n \"name\": \"odc-pddl-1.0\",\n \"uri\": \"http://opendatacommons.org/licenses/pddl/\"\n }\n ]\n}\n"
|
|
]
|
|
},
|
|
"resources": {
|
|
"propertyOrder": 120,
|
|
"title": "Data Resources",
|
|
"description": "An `array` of Data Resource objects, each compliant with the [Data Resource](/data-resource/) specification.",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "Data Resource",
|
|
"description": "Data Resource.",
|
|
"type": "object",
|
|
"oneOf": [
|
|
{
|
|
"required": [
|
|
"name",
|
|
"data"
|
|
]
|
|
},
|
|
{
|
|
"required": [
|
|
"name",
|
|
"path"
|
|
]
|
|
}
|
|
],
|
|
"properties": {
|
|
"profile": {
|
|
"propertyOrder": 10,
|
|
"default": "data-resource",
|
|
"title": "Profile",
|
|
"description": "The profile of this descriptor.",
|
|
"context": "Every Package and Resource descriptor has a profile. The default profile, if none is declared, is `data-package` for Package and `data-resource` for Resource.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"profile\": \"tabular-data-package\"\n}\n",
|
|
"{\n \"profile\": \"http://example.com/my-profiles-json-schema.json\"\n}\n"
|
|
]
|
|
},
|
|
"name": {
|
|
"propertyOrder": 20,
|
|
"title": "Name",
|
|
"description": "An identifier string. Lower case characters with `.`, `_`, `-` and `/` are allowed.",
|
|
"type": "string",
|
|
"pattern": "^([-a-z0-9._/])+$",
|
|
"context": "This is ideally a url-usable and human-readable name. Name `SHOULD` be invariant, meaning it `SHOULD NOT` change when its parent descriptor is updated.",
|
|
"examples": [
|
|
"{\n \"name\": \"my-nice-name\"\n}\n"
|
|
]
|
|
},
|
|
"path": {
|
|
"propertyOrder": 30,
|
|
"title": "Path",
|
|
"description": "A reference to the data for this resource, as either a path as a string, or an array of paths as strings. of valid URIs.",
|
|
"oneOf": [
|
|
{
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
{
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
"examples": [
|
|
"[ \"file.csv\" ]\n",
|
|
"[ \"http://example.com/file.csv\" ]\n"
|
|
]
|
|
}
|
|
],
|
|
"context": "The dereferenced value of each referenced data source in `path` `MUST` be commensurate with a native, dereferenced representation of the data the resource describes. For example, in a *Tabular* Data Resource, this means that the dereferenced value of `path` `MUST` be an array.",
|
|
"examples": [
|
|
"{\n \"path\": [\n \"file.csv\",\n \"file2.csv\"\n ]\n}\n",
|
|
"{\n \"path\": [\n \"http://example.com/file.csv\",\n \"http://example.com/file2.csv\"\n ]\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
]
|
|
},
|
|
"data": {
|
|
"propertyOrder": 230,
|
|
"title": "Data",
|
|
"description": "Inline data for this resource."
|
|
},
|
|
"schema": {
|
|
"propertyOrder": 40,
|
|
"title": "Schema",
|
|
"description": "A schema for this resource.",
|
|
"type": "object"
|
|
},
|
|
"title": {
|
|
"propertyOrder": 50,
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
},
|
|
"description": {
|
|
"propertyOrder": 60,
|
|
"title": "Description",
|
|
"description": "A text description. Markdown is encouraged.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n"
|
|
]
|
|
},
|
|
"homepage": {
|
|
"propertyOrder": 70,
|
|
"title": "Home Page",
|
|
"description": "The home on the web that is related to this data package.",
|
|
"type": "string",
|
|
"format": "uri",
|
|
"examples": [
|
|
"{\n \"homepage\": \"http://example.com/\"\n}\n"
|
|
]
|
|
},
|
|
"sources": {
|
|
"propertyOrder": 140,
|
|
"options": {
|
|
"hidden": true
|
|
},
|
|
"title": "Sources",
|
|
"description": "The raw sources for this resource.",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "Source",
|
|
"description": "A source file.",
|
|
"type": "object",
|
|
"required": [
|
|
"title"
|
|
],
|
|
"properties": {
|
|
"title": {
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
},
|
|
"path": {
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
"email": {
|
|
"title": "Email",
|
|
"description": "An email address.",
|
|
"type": "string",
|
|
"format": "email",
|
|
"examples": [
|
|
"{\n \"email\": \"example@example.com\"\n}\n"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
"{\n \"sources\": [\n {\n \"name\": \"World Bank and OECD\",\n \"uri\": \"http://data.worldbank.org/indicator/NY.GDP.MKTP.CD\"\n }\n ]\n}\n"
|
|
]
|
|
},
|
|
"licenses": {
|
|
"description": "The license(s) under which the resource is published.",
|
|
"propertyOrder": 150,
|
|
"options": {
|
|
"hidden": true
|
|
},
|
|
"title": "Licenses",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "License",
|
|
"description": "A license for this descriptor.",
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"title": "Open Definition license identifier",
|
|
"description": "MUST be an Open Definition license identifier, see http://licenses.opendefinition.org/",
|
|
"type": "string",
|
|
"pattern": "^([-a-zA-Z0-9._])+$"
|
|
},
|
|
"path": {
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
"title": {
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
}
|
|
},
|
|
"context": "Use of this property does not imply that the person was the original creator of, or a contributor to, the data in the descriptor, but refers to the composition of the descriptor itself."
|
|
},
|
|
"context": "This property is not legally binding and does not guarantee that the package is licensed under the terms defined herein.",
|
|
"examples": [
|
|
"{\n \"licenses\": [\n {\n \"name\": \"odc-pddl-1.0\",\n \"uri\": \"http://opendatacommons.org/licenses/pddl/\"\n }\n ]\n}\n"
|
|
]
|
|
},
|
|
"format": {
|
|
"propertyOrder": 80,
|
|
"title": "Format",
|
|
"description": "The file format of this resource.",
|
|
"context": "`csv`, `xls`, `json` are examples of common formats.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"format\": \"xls\"\n}\n"
|
|
]
|
|
},
|
|
"mediatype": {
|
|
"propertyOrder": 90,
|
|
"title": "Media Type",
|
|
"description": "The media type of this resource. Can be any valid media type listed with [IANA](https://www.iana.org/assignments/media-types/media-types.xhtml).",
|
|
"type": "string",
|
|
"pattern": "^(.+)/(.+)$",
|
|
"examples": [
|
|
"{\n \"mediatype\": \"text/csv\"\n}\n"
|
|
]
|
|
},
|
|
"encoding": {
|
|
"propertyOrder": 100,
|
|
"title": "Encoding",
|
|
"description": "The file encoding of this resource.",
|
|
"type": "string",
|
|
"default": "utf-8",
|
|
"examples": [
|
|
"{\n \"encoding\": \"utf-8\"\n}\n"
|
|
]
|
|
},
|
|
"bytes": {
|
|
"propertyOrder": 110,
|
|
"options": {
|
|
"hidden": true
|
|
},
|
|
"title": "Bytes",
|
|
"description": "The size of this resource in bytes.",
|
|
"type": "integer",
|
|
"examples": [
|
|
"{\n \"bytes\": 2082\n}\n"
|
|
]
|
|
},
|
|
"hash": {
|
|
"propertyOrder": 120,
|
|
"options": {
|
|
"hidden": true
|
|
},
|
|
"title": "Hash",
|
|
"type": "string",
|
|
"description": "The MD5 hash of this resource. Indicate other hashing algorithms with the {algorithm}:{hash} format.",
|
|
"pattern": "^([^:]+:[a-fA-F0-9]+|[a-fA-F0-9]{32}|)$",
|
|
"examples": [
|
|
"{\n \"hash\": \"d25c9c77f588f5dc32059d2da1136c02\"\n}\n",
|
|
"{\n \"hash\": \"SHA256:5262f12512590031bbcc9a430452bfd75c2791ad6771320bb4b5728bfb78c4d0\"\n}\n"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
"{\n \"resources\": [\n {\n \"name\": \"my-data\",\n \"data\": [\n \"data.csv\"\n ],\n \"mediatype\": \"text/csv\"\n }\n ]\n}\n"
|
|
]
|
|
},
|
|
"sources": {
|
|
"propertyOrder": 200,
|
|
"options": {
|
|
"hidden": true
|
|
},
|
|
"title": "Sources",
|
|
"description": "The raw sources for this resource.",
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"title": "Source",
|
|
"description": "A source file.",
|
|
"type": "object",
|
|
"required": [
|
|
"title"
|
|
],
|
|
"properties": {
|
|
"title": {
|
|
"title": "Title",
|
|
"description": "A human-readable title.",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"title\": \"My Package Title\"\n}\n"
|
|
]
|
|
},
|
|
"path": {
|
|
"title": "Path",
|
|
"description": "A fully qualified URL, or a POSIX file path..",
|
|
"type": "string",
|
|
"examples": [
|
|
"{\n \"path\": \"file.csv\"\n}\n",
|
|
"{\n \"path\": \"http://example.com/file.csv\"\n}\n"
|
|
],
|
|
"context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly."
|
|
},
|
|
"email": {
|
|
"title": "Email",
|
|
"description": "An email address.",
|
|
"type": "string",
|
|
"format": "email",
|
|
"examples": [
|
|
"{\n \"email\": \"example@example.com\"\n}\n"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"examples": [
|
|
"{\n \"sources\": [\n {\n \"name\": \"World Bank and OECD\",\n \"uri\": \"http://data.worldbank.org/indicator/NY.GDP.MKTP.CD\"\n }\n ]\n}\n"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
|
|
var options = {
|
|
schema: schema
|
|
};
|
|
|
|
var frame = $(DOM.loadHTML("core", "scripts/project/edit-general-metadata-dialog.html"));
|
|
this._elmts = DOM.bind(frame);
|
|
|
|
this._level = DialogSystem.showDialog(frame);
|
|
|
|
var editor;
|
|
|
|
this._elmts.okButton.html($.i18n._('core-buttons/ok'));
|
|
this._elmts.okButton.click(function() { self._submit(editor); });
|
|
this._elmts.closeButton.html($.i18n._('core-buttons/close'));
|
|
this._elmts.closeButton.click(function() { self._dismiss(); });
|
|
|
|
$.get(
|
|
"command/core/get-imetaData",
|
|
{
|
|
project : this._projectId,
|
|
metadataFormat : "DATAPACKAGE_METADATA"
|
|
},
|
|
function(o) {
|
|
if (o.code === "error") {
|
|
alert(o.message);
|
|
}
|
|
editor = new JSONEditor(document.getElementById('jsoneditor'), options, o);
|
|
},
|
|
"json"
|
|
);
|
|
|
|
$(".dialog-container").css("top", Math.round(($(".dialog-overlay").height() - $(frame).height()) / 16) + "px");
|
|
};
|
|
|
|
EditGeneralMetadataDialog.prototype._dismiss = function() {
|
|
DialogSystem.dismissUntil(this._level - 1);
|
|
};
|
|
|
|
EditGeneralMetadataDialog.prototype._submit = function(editor) {
|
|
if (typeof this._callback === "function") {
|
|
this._callback(editor.getText());
|
|
}
|
|
this._dismiss();
|
|
}; |