forked from lxm_flutter/json2dart
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88a48be157 | ||
|
|
8bf4ebe233 | ||
|
|
103d92b610 | ||
|
|
6f007e8157 | ||
|
|
65cc06fe99 | ||
|
|
b507386ccc | ||
|
|
a0b0606c9d | ||
|
|
626512e475 | ||
|
|
bd858b22fb | ||
|
|
267425767a |
@@ -1,21 +1,39 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:json2dart_serialization/json_generator.dart';
|
||||||
import 'package:json2dart_serialization/template.dart';
|
import 'package:json2dart_serialization/template.dart';
|
||||||
|
|
||||||
class Generator {
|
class Generator {
|
||||||
String jsonString;
|
String jsonString;
|
||||||
String entityName;
|
String entityName;
|
||||||
|
Version version;
|
||||||
|
|
||||||
Generator(this.jsonString, [this.entityName]);
|
Generator(this.jsonString, [this.entityName, this.version = Version.v0]) {
|
||||||
|
this.jsonString = convertJsonString(jsonString);
|
||||||
|
}
|
||||||
|
|
||||||
List<DefaultTemplate> templateList = [];
|
List<DefaultTemplate> templateList = [];
|
||||||
|
|
||||||
String makeDartCode() {
|
String makeDartCode() {
|
||||||
var entityName = this.entityName ?? "Entity";
|
var entityName = this.entityName ?? "Entity";
|
||||||
DefaultTemplate template = DefaultTemplate(srcJson: jsonString, className: entityName);
|
DefaultTemplate template;
|
||||||
|
if (version == Version.v1) {
|
||||||
|
template = V1Template(srcJson: jsonString, className: entityName);
|
||||||
|
} else {
|
||||||
|
template = DefaultTemplate(srcJson: jsonString, className: entityName);
|
||||||
|
}
|
||||||
|
|
||||||
StringBuffer resultSb = StringBuffer();
|
StringBuffer resultSb = StringBuffer();
|
||||||
templateList.add(template);
|
if (!template.isList) {
|
||||||
refreshTemplate(template);
|
templateList.add(template);
|
||||||
|
refreshTemplate(template);
|
||||||
|
// return resultSb.toString();
|
||||||
|
} else {
|
||||||
|
var listTemplate = template.getListTemplate();
|
||||||
|
templateList.add(listTemplate);
|
||||||
|
|
||||||
|
refreshTemplate(template);
|
||||||
|
}
|
||||||
|
|
||||||
resultSb.writeln(header);
|
resultSb.writeln(header);
|
||||||
templateList.forEach((template) {
|
templateList.forEach((template) {
|
||||||
@@ -28,13 +46,18 @@ class Generator {
|
|||||||
var fieldList = template.fieldList;
|
var fieldList = template.fieldList;
|
||||||
fieldList.forEach((filed) {
|
fieldList.forEach((filed) {
|
||||||
if (filed is MapField) {
|
if (filed is MapField) {
|
||||||
// filed.typeString
|
|
||||||
DefaultTemplate template = DefaultTemplate(srcJson: json.encode(filed.map), className: filed.typeString);
|
DefaultTemplate template = DefaultTemplate(srcJson: json.encode(filed.map), className: filed.typeString);
|
||||||
|
if (version == Version.v1) {
|
||||||
|
template = V1Template(srcJson: json.encode(filed.map), className: filed.typeString);
|
||||||
|
}
|
||||||
templateList.add(template);
|
templateList.add(template);
|
||||||
refreshTemplate(template);
|
refreshTemplate(template);
|
||||||
} else if (filed is ListField) {
|
} else if (filed is ListField) {
|
||||||
if (filed.childIsObject) {
|
if (filed.childIsObject) {
|
||||||
DefaultTemplate template = DefaultTemplate(srcJson: json.encode(filed.list[0]), className: filed.typeName);
|
DefaultTemplate template = DefaultTemplate(srcJson: json.encode(filed.list[0]), className: filed.typeName);
|
||||||
|
if (version == Version.v1) {
|
||||||
|
template = V1Template(srcJson: json.encode(filed.list[0]), className: filed.typeName);
|
||||||
|
}
|
||||||
templateList.add(template);
|
templateList.add(template);
|
||||||
refreshTemplate(template);
|
refreshTemplate(template);
|
||||||
}
|
}
|
||||||
@@ -60,3 +83,22 @@ String camelCase2UnderScoreCase(String name) {
|
|||||||
return "_" + str.toLowerCase();
|
return "_" + str.toLowerCase();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// use the string replace's method the resolve the int and double problem.
|
||||||
|
String convertJsonString(String jsonString) {
|
||||||
|
var numberReg = RegExp(r"[0-9]\.[0-9]+");
|
||||||
|
|
||||||
|
//匹配小数数字正则
|
||||||
|
var allMatch = numberReg.allMatches(jsonString).toList();
|
||||||
|
|
||||||
|
for (var i = 0; i < allMatch.length; i++) {
|
||||||
|
//是一个小数数字
|
||||||
|
var m = allMatch[i];
|
||||||
|
var s = m.group(0);
|
||||||
|
|
||||||
|
// 应该是double,但由于js的原因被识别成了整数数,这里对这种数据进行处理,将这里的最后一位从0替换为5,以便于让该被js识别成小数 而非数字
|
||||||
|
s = s.replaceRange(s.length - 1, s.length, "5");
|
||||||
|
jsonString = jsonString.replaceRange(m.start, m.end, s);
|
||||||
|
}
|
||||||
|
return jsonString;
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'dart:convert';
|
|||||||
import 'dart:html';
|
import 'dart:html';
|
||||||
|
|
||||||
import 'package:json2dart_serialization/generator.dart';
|
import 'package:json2dart_serialization/generator.dart';
|
||||||
|
import 'package:json2dart_serialization/storage.dart';
|
||||||
|
|
||||||
String entityName = null;
|
String entityName = null;
|
||||||
|
|
||||||
@@ -22,28 +23,36 @@ var downloadFileName = "";
|
|||||||
// }""";
|
// }""";
|
||||||
const defaultValue = "";
|
const defaultValue = "";
|
||||||
|
|
||||||
|
enum Version { v0, v1 }
|
||||||
|
|
||||||
|
Version v = Version.v0;
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
isChinese = await _isChinese();
|
isChinese = await _isChinese();
|
||||||
|
var dataHelper = CookieHelper();
|
||||||
TextAreaElement jsonInput = querySelector("#json");
|
TextAreaElement jsonInput = querySelector("#json");
|
||||||
jsonInput.value = defaultValue;
|
jsonInput.value = dataHelper.loadJsonString();
|
||||||
|
|
||||||
jsonInput.onInput.listen((event) {
|
jsonInput.onInput.listen((event) {
|
||||||
// print(jsonInput.value);
|
dataHelper.saveJsonString(jsonInput.value);
|
||||||
refreshData();
|
refreshData();
|
||||||
});
|
});
|
||||||
|
|
||||||
InputElement entityNameEle = querySelector("#out_entity_name");
|
InputElement entityNameEle = querySelector("#out_entity_name");
|
||||||
|
entityNameEle.value = dataHelper.loadEntityName();
|
||||||
|
entityName = entityNameEle.value;
|
||||||
entityNameEle.onInput.listen((event) {
|
entityNameEle.onInput.listen((event) {
|
||||||
entityName = entityNameEle.value;
|
entityName = entityNameEle.value;
|
||||||
|
dataHelper.saveEntityName(entityName);
|
||||||
refreshData();
|
refreshData();
|
||||||
});
|
});
|
||||||
|
|
||||||
ButtonElement formatButton = querySelector("#format");
|
ButtonElement formatButton = querySelector("#format");
|
||||||
formatButton.onClick.listen((click) {
|
formatButton.onClick.listen((click) {
|
||||||
String pretty;
|
String pretty;
|
||||||
|
pretty = convertJsonString(jsonInput.value);
|
||||||
try {
|
try {
|
||||||
pretty = formatJson(jsonInput.value);
|
pretty = formatJson(pretty);
|
||||||
} on Exception {
|
} on Exception {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -53,6 +62,39 @@ void main() async {
|
|||||||
InputElement eJsonKey = querySelector("#use_json_key");
|
InputElement eJsonKey = querySelector("#use_json_key");
|
||||||
InputElement eCamelCase = querySelector("#camelCase");
|
InputElement eCamelCase = querySelector("#camelCase");
|
||||||
TextAreaElement result = querySelector("#result");
|
TextAreaElement result = querySelector("#result");
|
||||||
|
RadioButtonInputElement v0 = querySelector("#v0");
|
||||||
|
RadioButtonInputElement v1 = querySelector("#v1");
|
||||||
|
|
||||||
|
void updateVersioin() {
|
||||||
|
if (v1.checked) {
|
||||||
|
v = Version.v1;
|
||||||
|
} else {
|
||||||
|
v = Version.v0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataHelper.saveVersion(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateVersionUI() {
|
||||||
|
if (v == Version.v1) {
|
||||||
|
v1.checked = true;
|
||||||
|
} else {
|
||||||
|
v1.checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
v = dataHelper.loadVersion();
|
||||||
|
|
||||||
|
updateVersionUI();
|
||||||
|
|
||||||
|
v0.onInput.listen((event) {
|
||||||
|
updateVersioin();
|
||||||
|
refreshData();
|
||||||
|
});
|
||||||
|
v1.onInput.listen((event) {
|
||||||
|
updateVersioin();
|
||||||
|
refreshData();
|
||||||
|
});
|
||||||
|
|
||||||
void onJsonKeyChange() {
|
void onJsonKeyChange() {
|
||||||
useJsonKey = eJsonKey.checked;
|
useJsonKey = eJsonKey.checked;
|
||||||
@@ -101,7 +143,8 @@ void main() async {
|
|||||||
// FileWriter fw = await fileEntry.createWriter();
|
// FileWriter fw = await fileEntry.createWriter();
|
||||||
// fw.write(blob);
|
// fw.write(blob);
|
||||||
// File file = await fileEntry.file();
|
// File file = await fileEntry.file();
|
||||||
AnchorElement saveLink = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
|
AnchorElement saveLink =
|
||||||
|
document.createElementNS("http://www.w3.org/1999/xhtml", "a");
|
||||||
saveLink.href = Url.createObjectUrlFromBlob(blob);
|
saveLink.href = Url.createObjectUrlFromBlob(blob);
|
||||||
// saveLink.type = "download";
|
// saveLink.type = "download";
|
||||||
saveLink.download = downloadFileName;
|
saveLink.download = downloadFileName;
|
||||||
@@ -133,10 +176,10 @@ bool isChinese = false;
|
|||||||
void refreshData() async {
|
void refreshData() async {
|
||||||
TextAreaElement jsonInput = querySelector("#json");
|
TextAreaElement jsonInput = querySelector("#json");
|
||||||
var string = jsonInput.value;
|
var string = jsonInput.value;
|
||||||
String pretty;
|
|
||||||
TextAreaElement result = querySelector("#result");
|
TextAreaElement result = querySelector("#result");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pretty = formatJson(string);
|
formatJson(string);
|
||||||
} on Exception {
|
} on Exception {
|
||||||
if (isChinese) {
|
if (isChinese) {
|
||||||
result.value = "不是一个正确的json";
|
result.value = "不是一个正确的json";
|
||||||
@@ -152,7 +195,7 @@ void refreshData() async {
|
|||||||
entityClassName = entityName;
|
entityClassName = entityName;
|
||||||
}
|
}
|
||||||
|
|
||||||
var generator = Generator(string, entityClassName);
|
var generator = Generator(string, entityClassName, v);
|
||||||
var dartCode = generator.makeDartCode();
|
var dartCode = generator.makeDartCode();
|
||||||
var dartFileName = ("${generator.fileName}.dart");
|
var dartFileName = ("${generator.fileName}.dart");
|
||||||
downloadFileName = dartFileName;
|
downloadFileName = dartFileName;
|
||||||
@@ -163,7 +206,7 @@ void refreshData() async {
|
|||||||
} else {
|
} else {
|
||||||
filePrefix = "your dart file name is:";
|
filePrefix = "your dart file name is:";
|
||||||
}
|
}
|
||||||
print(filePrefix);
|
// print(filePrefix);
|
||||||
querySelector("#file_name").text = "$filePrefix $dartFileName";
|
querySelector("#file_name").text = "$filePrefix $dartFileName";
|
||||||
|
|
||||||
result.value = dartCode;
|
result.value = dartCode;
|
||||||
|
|||||||
44
lib/storage.dart
Normal file
44
lib/storage.dart
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import 'dart:html';
|
||||||
|
|
||||||
|
import 'package:json2dart_serialization/json_generator.dart';
|
||||||
|
|
||||||
|
const _entityKey = "entityKey";
|
||||||
|
const _versionKey = "versionKey";
|
||||||
|
|
||||||
|
class CookieHelper {
|
||||||
|
String loadJsonString() {
|
||||||
|
var storage = window.localStorage;
|
||||||
|
if (!storage.containsKey("json")) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return window.localStorage["json"];
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveJsonString(String jsonString) {
|
||||||
|
window.localStorage.addAll({"json": jsonString});
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveEntityName(String entityName) {
|
||||||
|
window.localStorage.addAll({_entityKey: entityName});
|
||||||
|
}
|
||||||
|
|
||||||
|
String loadEntityName() {
|
||||||
|
if (!window.localStorage.containsKey(_entityKey)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return window.localStorage[_entityKey];
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveVersion(Version version) {
|
||||||
|
var index = Version.values.indexOf(version);
|
||||||
|
window.localStorage.addAll({_versionKey: index.toString()});
|
||||||
|
}
|
||||||
|
|
||||||
|
Version loadVersion() {
|
||||||
|
if (!window.localStorage.containsKey(_versionKey)) {
|
||||||
|
return Version.v0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Version.values[int.parse(window.localStorage[_versionKey])];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -45,7 +45,11 @@ class DefaultTemplate extends Template {
|
|||||||
@override
|
@override
|
||||||
String declare() {
|
String declare() {
|
||||||
return """@JsonSerializable()
|
return """@JsonSerializable()
|
||||||
class $className extends Object with _\$${className}SerializerMixin {""";
|
class $className extends Object ${interface()}{""";
|
||||||
|
}
|
||||||
|
|
||||||
|
String interface() {
|
||||||
|
return "with _\$${className}SerializerMixin";
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -97,6 +101,76 @@ class $className extends Object with _\$${className}SerializerMixin {""";
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Field> get fieldList => FieldHelper(srcJson).getFields();
|
List<Field> get fieldList => FieldHelper(srcJson).getFields();
|
||||||
|
|
||||||
|
bool get isList => json.decode(srcJson) is List;
|
||||||
|
|
||||||
|
ListTemplate getListTemplate() {
|
||||||
|
if (this is ListTemplate) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return ListTemplate(srcJson: srcJson, className: className, delegateTemplate: this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ListTemplate extends DefaultTemplate {
|
||||||
|
Template delegateTemplate;
|
||||||
|
|
||||||
|
ListTemplate({String srcJson, String className = "Entity", this.delegateTemplate}) : super(className: className, srcJson: srcJson);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String declare() {
|
||||||
|
return _declareListMethod() + "\n" + delegateTemplate?.declare() ?? super.declare();
|
||||||
|
}
|
||||||
|
|
||||||
|
String _declareListMethod() {
|
||||||
|
var listMethod = """List<$className> get${className}List(List<dynamic> list){
|
||||||
|
List<$className> result = [];
|
||||||
|
list.forEach((item){
|
||||||
|
result.add($className.fromJson(item));
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}""";
|
||||||
|
return listMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String constructor() {
|
||||||
|
return delegateTemplate?.constructor() ?? super.constructor();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String field() {
|
||||||
|
return delegateTemplate?.field() ?? super.field();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String method() {
|
||||||
|
return delegateTemplate?.method() ?? super.method();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String end() {
|
||||||
|
return delegateTemplate?.end() ?? super.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Field> get fieldList => FieldHelper(json.encode(json.decode(srcJson)[0])).getFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
class V1Template extends DefaultTemplate {
|
||||||
|
V1Template({String srcJson, String className = "Entity"}) : super(className: className, srcJson: srcJson);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String interface() => "";
|
||||||
|
|
||||||
|
@override
|
||||||
|
String method() {
|
||||||
|
var result = StringBuffer();
|
||||||
|
result.writeln(super.method());
|
||||||
|
result.writeln();
|
||||||
|
result.write(" Map<String, dynamic> toJson() => _\$${className}ToJson(this);");
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FieldHelper {
|
class FieldHelper {
|
||||||
@@ -104,26 +178,35 @@ class FieldHelper {
|
|||||||
|
|
||||||
FieldHelper(this.srcJson);
|
FieldHelper(this.srcJson);
|
||||||
|
|
||||||
|
List<Field> _getMapFiled(Map<String, dynamic> map) {
|
||||||
|
List<Field> list = [];
|
||||||
|
map.forEach((k, v) {
|
||||||
|
if (v is List) {
|
||||||
|
list.add(ListField(v, k));
|
||||||
|
} else if (v is String) {
|
||||||
|
list.add(SimpleField("String", k));
|
||||||
|
} else if (v is int) {
|
||||||
|
list.add(SimpleField("int", k));
|
||||||
|
} else if (v is double) {
|
||||||
|
list.add(SimpleField("double", k));
|
||||||
|
} else if (v is bool) {
|
||||||
|
list.add(SimpleField("bool", k));
|
||||||
|
} else if (v is Map<String, dynamic>) {
|
||||||
|
list.add(MapField(v, k));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
List<Field> getFields() {
|
List<Field> getFields() {
|
||||||
var j = json.decode(srcJson);
|
var j = json.decode(srcJson);
|
||||||
if (j is Map<String, dynamic>) {
|
if (j is Map<String, dynamic>) {
|
||||||
List<Field> list = [];
|
return _getMapFiled(j);
|
||||||
j.forEach((k, v) {
|
} else if (j is List) {
|
||||||
if (v is List) {
|
var item = j[0];
|
||||||
list.add(ListField(v, k));
|
if (item is Map<String, dynamic>) {
|
||||||
} else if (v is String) {
|
return _getMapFiled(item);
|
||||||
list.add(SimpleField("String", k));
|
}
|
||||||
} else if (v is int) {
|
|
||||||
list.add(SimpleField("int", k));
|
|
||||||
} else if (v is double) {
|
|
||||||
list.add(SimpleField("double", k));
|
|
||||||
} else if (v is bool) {
|
|
||||||
list.add(SimpleField("bool", k));
|
|
||||||
} else if (v is Map<String, dynamic>) {
|
|
||||||
list.add(MapField(v, k));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,42 +21,47 @@
|
|||||||
<img src="github_logo.jpg" width="50px" />
|
<img src="github_logo.jpg" width="50px" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<h1>simple use
|
|
||||||
<a href="https://pub.dartlang.org/packages/json_serializable" target="_blank">json_serializable</a>
|
|
||||||
</h1>
|
|
||||||
<div>
|
<div>
|
||||||
<div class="title">
|
<h1>simple use
|
||||||
<span class="half_span">copy your json to left textarea</span>
|
<a href="https://pub.dartlang.org/packages/json_serializable" target="_blank">json_serializable</a>
|
||||||
<span class="half_span">
|
</h1>
|
||||||
<div class="result_title">
|
<div class="version">
|
||||||
dart class name
|
<input class="version" type="radio" value="0" name="version" id="v0" checked="true">v0.x.x</input>
|
||||||
<input id="out_entity_name" />
|
<input class="version" type="radio" value="1" name="version" id="v1">v1.x.x</input>
|
||||||
<input type="checkbox" id="use_json_key" />
|
|
||||||
<span id="check_label">jsonKey annotation</span>
|
|
||||||
<input type="checkbox" id="camelCase" />
|
|
||||||
<span id="camelCaseLabel">use camelCase</span>
|
|
||||||
</div>
|
|
||||||
<div id="file_name"></div>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div>
|
||||||
<span class="half_span">
|
<div class="title">
|
||||||
<textarea id="json" title="json" class="content_area"></textarea>
|
<span class="half_span">copy your json to left textarea</span>
|
||||||
</span>
|
<span class="half_span">
|
||||||
<span class="half_span">
|
<div class="result_title">
|
||||||
<textarea id="result" title="result" class="content_area"></textarea>
|
dart class name
|
||||||
</span>
|
<input id="out_entity_name" />
|
||||||
|
<input type="checkbox" id="use_json_key" />
|
||||||
|
<span id="check_label">jsonKey annotation</span>
|
||||||
|
<input type="checkbox" id="camelCase" />
|
||||||
|
<span id="camelCaseLabel">use camelCase</span>
|
||||||
|
</div>
|
||||||
|
<div id="file_name"></div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<span class="half_span">
|
||||||
|
<textarea id="json" title="json" class="content_area"></textarea>
|
||||||
|
</span>
|
||||||
|
<span class="half_span">
|
||||||
|
<textarea id="result" title="result" class="content_area"></textarea>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="func">
|
||||||
|
<span class="half_span">
|
||||||
|
<button id="format">format</button>
|
||||||
|
</span>
|
||||||
|
<span class="half_span">
|
||||||
|
<button id="copy">copy</button>
|
||||||
|
<button id="save">download</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="func">
|
|
||||||
<span class="half_span">
|
|
||||||
<button id="format">format</button>
|
|
||||||
</span>
|
|
||||||
<span class="half_span">
|
|
||||||
<button id="copy">copy</button>
|
|
||||||
<button id="save">download</button>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -21,8 +21,15 @@
|
|||||||
<img src="github_logo.jpg" width="50px" />
|
<img src="github_logo.jpg" width="50px" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<h1>为了便利使用
|
<div>
|
||||||
<a href="https://pub.dartlang.org/packages/json_serializable">json_serializable</a>库</h1>
|
<h1>为了便利使用
|
||||||
|
<a href="https://pub.dartlang.org/packages/json_serializable">json_serializable</a>库
|
||||||
|
</h1>
|
||||||
|
<div class="version">
|
||||||
|
<input class="version" type="radio" value="0" name="version" id="v0" checked="true">v0.x.x</input>
|
||||||
|
<input class="version" type="radio" value="1" name="version" id="v1">v1.x.x</input>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span class="half_span">将json粘贴至左边</span>
|
<span class="half_span">将json粘贴至左边</span>
|
||||||
|
|||||||
@@ -8,34 +8,6 @@ body {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
font-family: "Roboto", sans-serif;
|
font-family: "Roboto", sans-serif;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
.top {
|
|
||||||
height: 4vh;
|
|
||||||
text-align: center;
|
|
||||||
padding-top: 1vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.result_title {
|
|
||||||
padding-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.textarea {
|
|
||||||
width: 50%;
|
|
||||||
height: 90%;
|
|
||||||
text-align: center;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content_area {
|
|
||||||
width: 80%;
|
|
||||||
height: 90vh;
|
|
||||||
text-align: center;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.out_entity_name {
|
|
||||||
height: 40px;
|
|
||||||
} */
|
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -86,3 +58,8 @@ a {
|
|||||||
a:hover {
|
a:hover {
|
||||||
text-decoration-line: underline;
|
text-decoration-line: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.version {
|
||||||
|
font-size: 10px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user