Annotation of modules/damieng/graphical_editor/daxe/lib/daxe.dart, revision 1.1
1.1 ! damieng 1: /*
! 2: This file is part of Daxe.
! 3:
! 4: Daxe is free software: you can redistribute it and/or modify
! 5: it under the terms of the GNU General Public License as published by
! 6: the Free Software Foundation, either version 3 of the License, or
! 7: (at your option) any later version.
! 8:
! 9: Daxe is distributed in the hope that it will be useful,
! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 12: GNU General Public License for more details.
! 13:
! 14: You should have received a copy of the GNU General Public License
! 15: along with Daxe. If not, see <http://www.gnu.org/licenses/>.
! 16: */
! 17:
! 18: /**
! 19: * Daxe - Dart XML Editor
! 20: * The goal of this project is to replace the Jaxe Java applet in WebJaxe, but Daxe
! 21: * could be used to edit XML documents online in any other application.
! 22: *
! 23: * The URL must have the file and config parameters with the path to the XML file and Jaxe config file.
! 24: * It can also have a save parameter with the path to a server script to save the document.
! 25: */
! 26: library daxe;
! 27:
! 28: import 'dart:async';
! 29: import 'dart:collection';
! 30: //import 'dart:convert';
! 31: import 'dart:html' as h;
! 32:
! 33: //import 'package:meta/meta.dart';
! 34: //import 'package:js/js.dart' as js;
! 35:
! 36: import 'src/xmldom/xmldom.dart' as x;
! 37: import 'src/strings.dart';
! 38:
! 39: import 'src/interface_schema.dart';
! 40: import 'src/wxs/wxs.dart' show DaxeWXS, WXSException;
! 41: import 'src/simple_schema.dart';
! 42: import 'src/nodes/nodes.dart';
! 43:
! 44: part 'src/attribute_dialog.dart';
! 45: part 'src/css_map.dart';
! 46: part 'src/cursor.dart';
! 47: part 'src/daxe_document.dart';
! 48: part 'src/daxe_exception.dart';
! 49: part 'src/config.dart';
! 50: part 'src/daxe_node.dart';
! 51: part 'src/daxe_attr.dart';
! 52: //part 'src/file_open_dialog.dart';
! 53: part 'src/find_dialog.dart';
! 54: part 'src/help_dialog.dart';
! 55: part 'src/insert_panel.dart';
! 56: part 'src/left_panel.dart';
! 57: part 'src/locale.dart';
! 58: part 'src/menu.dart';
! 59: part 'src/menubar.dart';
! 60: part 'src/menu_item.dart';
! 61: part 'src/node_factory.dart';
! 62: part 'src/position.dart';
! 63: part 'src/node_offset_position.dart';
! 64: part 'src/left_offset_position.dart';
! 65: part 'src/right_offset_position.dart';
! 66: part 'src/source_window.dart';
! 67: part 'src/tag.dart';
! 68: part 'src/toolbar.dart';
! 69: part 'src/toolbar_item.dart';
! 70: part 'src/toolbar_box.dart';
! 71: part 'src/toolbar_menu.dart';
! 72: part 'src/toolbar_button.dart';
! 73: part 'src/toolbar_style_info.dart';
! 74: part 'src/tree_item.dart';
! 75: part 'src/tree_panel.dart';
! 76: part 'src/undoable_edit.dart';
! 77: part 'src/unknown_element_dialog.dart';
! 78: part 'src/validation_dialog.dart';
! 79: part 'src/web_page.dart';
! 80:
! 81:
! 82: typedef void ActionFunction();
! 83:
! 84: /// The current web page
! 85: WebPage page;
! 86: /// The current XML document
! 87: DaxeDocument doc;
! 88: Map<String,ActionFunction> customFunctions = new Map<String,ActionFunction>();
! 89:
! 90: void main() {
! 91: NodeFactory.addCoreDisplayTypes();
! 92:
! 93: Strings.load().then((bool b) {
! 94: doc = new DaxeDocument();
! 95: page = new WebPage();
! 96:
! 97: // check parameters for a config and file to open
! 98: String file = null;
! 99: String config = null;
! 100: String saveURL = null;
! 101: h.Location location = h.window.location;
! 102: String search = location.search;
! 103: if (search.startsWith('?'))
! 104: search = search.substring(1);
! 105: List<String> parameters = search.split('&');
! 106: for (String param in parameters) {
! 107: List<String> lparam = param.split('=');
! 108: if (lparam.length != 2)
! 109: continue;
! 110: if (lparam[0] == 'config')
! 111: config = lparam[1];
! 112: else if (lparam[0] == 'file')
! 113: file = Uri.decodeComponent(lparam[1]);
! 114: else if (lparam[0] == 'save')
! 115: saveURL = lparam[1];
! 116: }
! 117: if (saveURL != null)
! 118: doc.saveURL = saveURL;
! 119: if (config != null && file != null)
! 120: page.openDocument(file, config);
! 121: else if (config != null)
! 122: page.newDocument(config);
! 123: else
! 124: h.window.alert(Strings.get('daxe.missing_config'));
! 125: });
! 126: }
! 127:
! 128: /**
! 129: * Adds a custom display type. Two constructors are required to define the display type:
! 130: *
! 131: * * one to create a new node, with the element reference in the schema as a parameter;
! 132: * [Config] methods can be used via doc.cfg to obtain useful information with the reference.
! 133: * * another one to create a new Daxe node based on a DOM [x.Node];
! 134: * it takes the future [DaxeNode] parent as a 2nd parameter.
! 135: */
! 136: void addDisplayType(String displayType, ConstructorFromRef cref, ConstructorFromNode cnode) {
! 137: NodeFactory.addDisplayType(displayType, cref, cnode);
! 138: }
! 139:
! 140: /**
! 141: * Adds a custom function which can be called by name with a menu defined in the configuration file.
! 142: */
! 143: void addCustomFunction(String functionName, ActionFunction fct) {
! 144: customFunctions[functionName] = fct;
! 145: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>