//
//= require jquery
//= require jquery_ujs
-//= require_directory ./manifest/work
+//= require_directory ./work
//= require system
//= require textchange
//= require underscore
//= require backbone
-//= require_directory ./manifest
+//= require ./manifest_base/manifest_base
+//= require ./manifest_base/base
+//= require ./manifest_base/factory
+//= require ./manifest_base/values
+//= require ./manifest_base/name_values
+//= require ./manifest_base/type_args
+//= require ./manifest_base/type_name_args
+//= require ./manifest_base/names
+//= require ./manifest/manifest
+//= require ./manifest/item
+//= require ./manifest/item/boost
+//= require ./manifest/item/base
+//= require ./manifest/item/item
+//= require ./manifest/item/owner
+//= require ./manifest/item/system_resource
+//= require ./manifest/item/template
+//= require ./manifest/item/content
+//= require ./manifest/item/root
+//= require ./manifest/item/element
+//= require ./manifest/item/binder
+//= require ./manifest/item/leaf
+//= require ./manifest/system_resource
+//= require ./manifest/system_resource/template
//= require_directory ./views
-//= require pettanr_editor
-//= require writing_formats
-//= require_directory ./helpers
-//= require speech_balloon_templates
-//= require panels
//= require main
--- /dev/null
+class LocalManifest\r
+ constructor: (local_json) ->\r
+ @module_names = []\r
+ @local_json = local_json || {}\r
+ \r
+ init: () ->\r
+ @list_groups = ListGroup.load(self, @local_json, 'list_groups')\r
+ @filers = Filer.load(self, @local_json, 'filers')\r
+ @profilers = Profiler.load(self, @local_json, 'profilers')\r
+ @forms = Form.load(self, @local_json, 'forms')\r
+ @buckets = Bucket.load(self, @local_json, 'buckets')\r
+\r
+@LocalManifest = LocalManifest\r
interpolate: /\<\&\=(.+?)\&\>/g,\r
evaluate: /\<\&(.+?)\&\>/g\r
}\r
+ loaded_manifest = null\r
+ $.ajaxSetup({async: false})\r
$.getJSON('/manifest.json', null, (data) =>\r
- window.manifest = data )\r
+ loaded_manifest = new Manifest(data) )\r
$.getJSON('/local_manifest.json', null, (data) =>\r
- window.local_manifest = data )\r
+ window.loaded_local_manifest = new LocalManifest(data)\r
+ )\r
+ $.ajaxSetup({async: true})\r
+ loaded_manifest.init()\r
+ t = new ManifestBase.Base('manifest', 'name', 'json', 'module_name')\r
+ t.set_default()\r
class Pettanr extends Backbone.View \r
el: '#pettanr'\r
initialize: ->\r
--- /dev/null
+class Manifest.Controller\r
+ constructor: (item_name) ->\r
+ @item_name = item_name\r
+ \r
+ model_name: () ->\r
+ header: () ->\r
+ paginate: () ->\r
+\r
+++ /dev/null
-class Filer\r
- class Symbol\r
- constructor: (conf) ->\r
- @conf = conf\r
- visible: () ->\r
- true\r
- class FileItem\r
- constructor: (item) ->\r
- @item = item\r
- symbol: () ->\r
- @item\r
- caption: () ->\r
- summary: () ->\r
- icon: () ->\r
- date: () ->\r
- edit: () ->\r
- \r
- constructor: (item_name, items) ->\r
- @item_name = item_name\r
- @items = items\r
- @symbol = new Symbol({ })\r
- @caption = new Symbol({ })\r
- @summary = new Symbol({ })\r
- @icon = new Symbol({ })\r
- @date = new Symbol({ })\r
- @edit = new Symbol({ })\r
- @file_items = _.map @items, (item) -> \r
- new FileItem(item)\r
- \r
- model_name: () ->\r
- header: () ->\r
- paginate: () ->\r
-\r
-@Filer = Filer\r
--- /dev/null
+class Manifest.ItemFactory extends ManifestBase.Factory\r
+ \r
+ @types: () ->\r
+ {\r
+ 'item': Manifest.ItemModule.ItemPeta, \r
+ 'owner': Manifest.ItemModule.OwnerPeta, \r
+ 'system_resource': Manifest.ItemModule.SystemResourcePeta, \r
+ 'template': Manifest.ItemModule.TemplatePeta, \r
+ 'content': Manifest.ItemModule.ContentPeta, \r
+ 'root': Manifest.ItemModule.RootPeta, \r
+ 'element': Manifest.ItemModule.ElementPeta, \r
+ 'binder': Manifest.ItemModule.BinderPeta, \r
+ 'leaf': LeafPeta\r
+ }\r
+ \r
+ @default_type: () ->\r
+ 'item'\r
+ \r
+class Manifest.ItemModule\r
+\r
--- /dev/null
+class Manifest.ItemModule.BasePeta extends ManifestBase.TypeNameArgs\r
+ \r
+ set_default: () ->\r
+ super()\r
+ @args['boost'] ||= {}\r
+ \r
+ init: () ->\r
+ super()\r
+ @parent_model_name = null # init at leaf, element\r
+ @boost = ManifestBase.load_name_values(this, @args, 'boost', Boost)\r
+ \r
+ is_element: () ->\r
+ @parent_model_name != null\r
+ \r
+ find_boost_name: (column_name) -> \r
+ _.each @boost, (boost_name, boost_manifest) ->\r
+ return boost_name if boost_manifest.settings_column_name == column_name\r
+ null\r
+ \r
+ is_extend_column: (column_name) ->\r
+ _.each @boost, (boost_name, boost_manifest) ->\r
+ return true if boost_manifest.extend_column_name == column_name\r
+ false\r
+ \r
+ supply_defaults: (item) ->\r
+ _.each @boost, (name, manifest) ->\r
+ manifest.supply_default item\r
+ \r
+ overwrites: (item) ->\r
+ _.each @boost, (name, manifest) ->\r
+ manifest.overwrite item\r
+ \r
+ model: () ->\r
+ Manifest.item_name_to_model @name\r
+\r
--- /dev/null
+class Manifest.ItemModule.BinderPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.Boost extends ManifestBase.NameValues\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.ContentPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.ElementPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ ManifestBase.alert_undefined_message('parent_model_name', @module_message()) if not @args['parent_model_name']\r
+ \r
+ init: () ->\r
+ super()\r
+ @parent_model_name = @args['parent_model_name']\r
+ \r
--- /dev/null
+class Manifest.ItemModule.ItemPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.LeafPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ ManifestBase.alert_undefined_message('parent_model_name', @module_message()) if not @args['parent_model_name']\r
+ \r
+ init: () ->\r
+ super()\r
+ @parent_model_name = @args['parent_model_name']\r
+ @destination_model_name = @args['destination_model_name']\r
+ \r
--- /dev/null
+class Manifest.ItemModule.OwnerPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.RootPeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.SystemResourcePeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest.ItemModule.TemplatePeta extends Manifest.ItemModule.BasePeta\r
+ \r
+ set_default: () ->\r
+ super()\r
+ \r
+ init: () ->\r
+ super()\r
+ \r
--- /dev/null
+class Manifest\r
+ constructor: (global_json) ->\r
+ @module_names = []\r
+ @global_json = global_json || {}\r
+ @system_resources = new Manifest.SystemResource(\r
+ this, Manifest.SystemResource.set_default(@global_json['system_resources'])\r
+ )\r
+ @magic_numbers = @global_json['magic_numbers']\r
+ \r
+ init: () ->\r
+ # managers can't initialize before load application.rb\r
+ @items = ManifestBase.load_type_name_args(this, @global_json, 'items', Manifest.ItemFactory)\r
+ @controllers = Manifest.Controller.load(this, @global_json, 'controllers')\r
+ @models = Manifest.Model.load(this, @global_json, 'models')\r
+ \r
+@Manifest = Manifest\r
--- /dev/null
+class Manifest.Model\r
+ constructor: (item_name) ->\r
+ @item_name = item_name\r
+ \r
+ model_name: () ->\r
+ header: () ->\r
+ paginate: () ->\r
+\r
--- /dev/null
+class Manifest.SystemResource\r
+ \r
+ @set_default: (system_resource_manifest) ->\r
+ system_resource_manifest['templates'] ||= {}\r
+ system_resource_manifest['select_items'] ||= {}\r
+ #oh my ...\r
+ #JSON.stringify couldn't print 1.0 \r
+ # 1 == 1.0 ?\r
+ #change class\r
+ system_resource_manifest['select_items']['speech_font_size_items'] ||= {}\r
+ _.each system_resource_manifest['select_items']['speech_font_size_items'], (conf) ->\r
+ #conf[1] = parseFloat((conf[1]))\r
+ system_resource_manifest\r
+ \r
+ init: () ->\r
+ @select_items_loader\r
+ \r
+ select_items_loader: () ->\r
+ _.each @manifest.models, (model_name, model_manifest) ->\r
+ _.each model_manifest.attributes, (attribute_name, attribute_manifest) ->\r
+ source_manifest = attribute_manifest.source\r
+ next if not source_manifest\r
+ next if not source_manifest.type == 'model'\r
+ resource_model_name = source_manifest.resource_model_name\r
+ resource_list_name = source_manifest.resource_list_name\r
+ caption = source_manifest.caption_name\r
+ #begin\r
+ # list = Locmare::ListGroup.list resource_model_name, resource_list_name\r
+ # r = list.open nil, {}\r
+ # @select_items[source_manifest.select_item_name] = \r
+ # r.items.map {|item| [item.attributes[caption], item.id]}\r
+ #rescue\r
+ # puts 'skip store select_items:' + resource_model_name + '.' + resource_list_name\r
+ #end\r
+ \r
+ constructor: (manifest, system_resource_manifest) ->\r
+ @manifest = manifest\r
+ @system_resource_manifest = system_resource_manifest\r
+ @templates = Manifest.SystemResource.Template.manager(this, @system_resource_manifest['templates'])\r
+ @select_items = system_resource_manifest['select_items']\r
+\r
--- /dev/null
+class Manifest.SystemResource.Template\r
+ \r
+ @manager: (system_resource, my_manifests) ->\r
+ templates = {}\r
+ _.each my_manifests, (template_name, my_manifest) ->\r
+ templates[template_name] = new Manifest.SystemResource.Template(system_resource, template_name, my_manifest)\r
+ templates\r
+ \r
+ set_default: () ->\r
+ @my_manifest['template_items'] ||= {}\r
+ @my_manifest['has_route'] ||= 1\r
+ \r
+ init: () ->\r
+ @has_route = @my_manifest['has_route']\r
+ @template_items = @my_manifest['template_items']\r
+ \r
+ is_add_route: () ->\r
+ @has_route > 0\r
+ \r
+ constructor: (system_resource, template_name, my_manifest) ->\r
+ @system_resource = system_resource\r
+ @template_name = template_name\r
+ @my_manifest = my_manifest\r
+ @set_default()\r
+ @init()\r
+ \r
--- /dev/null
+class ManifestBase.Base
+ @load: (manifest, jsons, module_name) ->
+ r = {}
+ _.each @jsons[module_name], (name, json) ->
+ r[name] = new ManifestBase.Base(manifest, name, json, module_name)
+ r
+
+ set_default: () ->
+ @json['args'] ||= {}
+ @type = @json['type']
+ @args = @json['args']
+
+ init: () ->
+
+ module_names: () ->
+ @parent.module_names + [@module_name, @name]
+
+ module_message: () ->
+ ManifestBase.module_message(@module_names)
+
+ constructor: (manifest, name, json, module_name) ->
+ @manifest = manifest
+ @name = name
+ @json = json
+ @module_name = module_name
+ @set_default()
+ @init()
+
--- /dev/null
+class ManifestBase.Factory\r
+ @types: () ->\r
+ {}\r
+ \r
+ @default_type: () ->\r
+ null\r
+ \r
+ @factory: (parent, name, json, module_name) -> \r
+ module_message = ManifestBase.module_message(parent.module_names(), [module_name, name])\r
+ json['type'] ||= @default_type()\r
+ type = json['type']\r
+ ManifestBase.alert_undefined_message('type', module_message) if not type\r
+ my_class = @types()[type]\r
+ ManifestBase.alert_undefined_message('class', module_message) if not my_class\r
+ new my_class(parent, name, json, module_name)\r
+ \r
+ @factory_type_args: (parent, json, module_name) ->\r
+ module_message = ManifestBase.module_message(parent.module_names(), [module_name])\r
+ json['type'] ||= @default_type()\r
+ type = json['type']\r
+ ManifestBase.alert_undefined_message('type', module_message) if not type\r
+ my_class = @types()[type]\r
+ ManifestBase.alert_undefined_message('class', module_message) if not my_class\r
+ new my_class(parent, json, module_name)\r
+\r
--- /dev/null
+class ManifestBase\r
+ \r
+ @require_modules: (path, names) ->\r
+ _.each names, (name) ->\r
+ require_dependency path + name.to_s\r
+ \r
+ @module_message: (module_names, my_module_names = []) ->\r
+ (module_names + my_module_names).join(' > ')\r
+ \r
+ @alert_message: (message, location) ->\r
+ confirm('invalid manifest?:' + message + " for " + message)\r
+ \r
+ @alert_undefined_message: (name, location) ->\r
+ alert_message('undefined ' + name, location)\r
+ \r
+ @load_value: (_self, json, module_name, klass) ->\r
+ new klass(_self, json[module_name], module_name)\r
+ \r
+ @load_name_values: (_self, jsons, module_name, klass) ->\r
+ hash = {}\r
+ _.each jsons[module_name], (_name, _json) ->\r
+ hash[_name] = new klass(_self, _name, _json, module_name)\r
+ hash\r
+ \r
+ @load_type_args: (_self, jsons, module_name, klass) ->\r
+ klass.factory_type_args(_self, jsons[module_name], module_name)\r
+ \r
+ @load_type_name_args: (_self, jsons, module_name, klass) ->\r
+ hash = {}\r
+ _.each jsons[module_name], (_name, _json) ->\r
+ hash[_name] = new klass.factory(_self, _name, _json, module_name)\r
+ hash\r
+ \r
+ @load_names: (_self, json, module_name, klass) ->\r
+ _.map json[module_name], (_name) ->\r
+ new klass(_self, _name, module_name)\r
+\r
+@ManifestBase = ManifestBase\r
--- /dev/null
+class ManifestBase.NameValues\r
+ \r
+ set_default: () ->\r
+ @values = @json\r
+ \r
+ init: () ->\r
+ \r
+ module_names: () ->\r
+ @parent.module_names + [@module_name, @name]\r
+ \r
+ module_message: () ->\r
+ ManifestBase.module_message(@module_names)\r
+ \r
+ parent_name: () ->\r
+ @parent.name\r
+ \r
+ parent_json: () ->\r
+ @parent.json\r
+ \r
+ constructor: (parent, name, json, module_name) ->\r
+ @parent = parent\r
+ @name = name\r
+ @json = json\r
+ @module_name = module_name\r
+ @set_default()\r
+ @init()\r
+ \r
--- /dev/null
+class ManifestBase.Names\r
+ \r
+ set_default: () ->\r
+ \r
+ init: () ->\r
+ \r
+ module_names: () ->\r
+ @manifest.module_names + [@module_name, @name]\r
+ \r
+ module_message: () ->\r
+ ManifestBase.module_message(@module_names)\r
+ \r
+ parent_name: () ->\r
+ @parent.name\r
+ \r
+ parent_json: () ->\r
+ @parent.json\r
+ \r
+ constructor: (parent, name, module_name) ->\r
+ @parent = parent\r
+ @name = name\r
+ @module_name = module_name\r
+ @set_default()\r
+ @init()\r
+ \r
--- /dev/null
+class ManifestBase.TypeArgs\r
+ \r
+ set_default: () ->\r
+ @json['args'] ||= {}\r
+ @type = @json['type']\r
+ @args = @json['args']\r
+ \r
+ init: () ->\r
+ \r
+ module_names: () ->\r
+ @parent.module_names + [@module_name]\r
+ \r
+ module_message: () ->\r
+ ManifestBase.module_message(@module_names)\r
+ \r
+ parent_name: () ->\r
+ @parent.name\r
+ \r
+ parent_json: () ->\r
+ @parent.json\r
+ \r
+ constructor: (parent, json, module_name) ->\r
+ @parent = parent\r
+ @json = json\r
+ @module_name = module_name\r
+ @set_default()\r
+ @init()\r
+ \r
--- /dev/null
+class ManifestBase.TypeNameArgs\r
+ \r
+ set_default: () ->\r
+ @json['args'] ||= {}\r
+ @type = @json['type']\r
+ @args = @json['args']\r
+ \r
+ init: () ->\r
+ \r
+ module_names: () ->\r
+ @parent.module_names + [@module_name, @name]\r
+ \r
+ module_message: () ->\r
+ ManifestBase.module_message(@module_names)\r
+ \r
+ parent_name: () ->\r
+ @parent.name\r
+ \r
+ parent_json: () ->\r
+ @parent.json\r
+ \r
+ constructor: (parent, name, json, module_name) ->\r
+ @parent = parent\r
+ @name = name\r
+ @json = json\r
+ @module_name = module_name\r
+ @set_default()\r
+ @init()\r
+ \r
--- /dev/null
+class ManifestBase.Values\r
+ \r
+ set_default: () ->\r
+ @values = @json\r
+ \r
+ init: () ->\r
+ \r
+ module_names: () ->\r
+ @parent.module_names + [@module_name]\r
+ \r
+ module_message: () ->\r
+ ManifestBase.module_message(@module_names)\r
+ \r
+ parent_name: () ->\r
+ @parent.name\r
+ \r
+ parent_json: () ->\r
+ @parent.json\r
+ \r
+ constructor: (parent, json, module_name) ->\r
+ @parent = parent\r
+ @json = json\r
+ @module_name = module_name\r
+ @set_default()\r
+ @init()\r
+ \r
<title>\r
ap - <%= h(manifest.magic_numbers['profile']['users']['caption']) %>\r
</title>\r
- <%= stylesheet_link_tag "application" %>\r
+ <%# stylesheet_link_tag "application" %>\r
<%= javascript_include_tag "application" %>\r
<%= javascript_include_tag "ap" %>\r
- <%= raw panel_editor_javascript_include_tags %>\r
+ <%# raw panel_editor_javascript_include_tags %>\r
<%= csrf_meta_tags %>\r
</head>\r
<body>\r