4 * Ajatus - Distributed CRM
5 * @requires jQuery v1.2.1
7 * Copyright (c) 2007 Jerry Jalava <jerry.jalava@gmail.com>
8 * Copyright (c) 2007 Nemein Oy <http://nemein.com>
9 * Website: http://ajatus.info
10 * Licensed under the GPL license
11 * http://www.gnu.org/licenses/gpl.html
16 $.ajatus = $.ajatus || {};
17 $.ajatus.views = $.ajatus.views || {};
19 $.ajatus.views.system = {
21 'frontpage', 'edit', 'create', 'item', 'trash', 'tags'
24 $.ajatus.views.system.frontpage = {
28 max_items_before_pool: 3
31 history_support: true,
43 $.ajatus.tabs.on_click(e);
44 $.ajatus.views.system.frontpage.render();
50 $.ajatus.application_content_area.html('');
51 $.ajatus.layout.body.set_class('frontpage');
52 $.ajatus.views.on_change("#view.frontpage");
54 $.each($.ajatus.preferences.client.content_types, function(key,type){
55 if (! type.views['list']) {
59 var on_success = function(data) {
60 if (data.total_rows == 0) {
64 var pool_settings = $.ajatus.views.system.frontpage.pool_settings;
65 if (data.total_rows >= $.ajatus.views.system.frontpage.options.max_items_before_pool) {
66 pool_settings.enabled = true;
69 var renderer = new $.ajatus.renderer.list(
70 $.ajatus.application_content_area,
73 id: type.name + '_list_holder',
79 $.each(data.rows, function(i,doc){
80 var doc = new $.ajatus.document(doc);
81 if ($.ajatus.tags.active != '') {
82 if ($.ajatus.utils.array.has_match($.ajatus.tags.active, doc.value.tags.val)) {
83 renderer.render_item(doc, i);
86 renderer.render_item(doc, i);
93 $.jqCouch.connection('view', on_success).temp($.ajatus.preferences.client.content_database, type.views.list, {
94 count: $.ajatus.views.system.frontpage.options.group_item_count,
100 $.ajatus.views.system.tags = {
105 application_tab: true,
106 history_support: true,
109 on_click: function(e) {
110 $.ajatus.tabs.on_click(e);
111 $.ajatus.views.system.tags.render();
116 $.ajatus.application_content_area.html('');
117 $.ajatus.layout.body.set_class('tags');
118 $.ajatus.views.on_change("#view.tags");
120 $.ajatus.toolbar.init();
121 $.ajatus.toolbar.show();
123 $.ajatus.views.system.tags.get_items();
126 render_results: function(tags, items) {
127 var type = $.ajatus.preferences.client.content_types['tag'];
129 var renderer = new $.ajatus.renderer.list(
130 $.ajatus.application_content_area,
133 id: 'tags_list_holder',
135 'title', 'created', 'creator', 'used'
141 }, type.original_schema)
145 $.each(tags, function(i,doc){
146 var doc = new $.ajatus.document(doc);
147 doc.value['used'] = {
148 val: (typeof items[doc._id] != 'undefined' ? items[doc._id].length : 0)
150 renderer.render_item(doc, i);
153 renderer.enable_sorting();
156 get_items: function(on_success) {
157 var conn_on_success = function(data) {
158 if (data.total_rows == 0) {
159 var key = $.ajatus.i10n.plural($.ajatus.i10n.get('tag'));
160 var msg = $.ajatus.elements.messages.static($.ajatus.i10n.get('Empty results'), $.ajatus.i10n.get('No %s found', [key]));
167 $.each(data.rows, function(i,n){
171 if (typeof items[n.key[0]] == 'undefined') {
172 items[n.key[0]] = [];
174 items[n.key[0]].push(n);
178 if (typeof on_success == 'undefined') {
179 on_success = $.ajatus.views.system.tags.render_results;
182 on_success(tags, items);
187 $.jqCouch.connection('view', conn_on_success).get($.ajatus.preferences.client.content_database, 'tag/list_with_docs', {
188 // startkey: ["ED862081B2FBF46FB0CDBBE848ED6856", 0],
189 // endkey: ["ED862081B2FBF46FB0CDBBE848ED6856", 1]
194 $.ajatus.views.system.trash = {
200 application_tab: true,
201 history_support: true,
204 on_click: function(e)
206 $.ajatus.tabs.on_click(e);
207 $.ajatus.views.system.trash.render();
211 get_items: function(on_success) {
212 var trash_view = 'if (doc.value.metadata.deleted.val == true) {';
213 trash_view += 'map( doc.value.metadata.revised, {"_type": doc.value._type,';
214 trash_view += '"title": doc.value.title,';
216 $.each($.ajatus.preferences.client.content_types, function(key,type){
217 if (type['title_item']) {
218 $.each(type['title_item'], function(i,part){
219 if (type.schema[part]) {
220 trash_view += '"'+part+'": doc.value.'+part+',';
226 trash_view += '"revised": doc.value.metadata.revised,"by": doc.value.metadata.revisor,"tags": doc.value.tags})}';
228 var conn_on_success = function(data) {
229 if (data.total_rows == 0) {
230 var key = $.ajatus.i10n.plural($.ajatus.i10n.get('deleted item'));
231 var msg = $.ajatus.elements.messages.static($.ajatus.i10n.get('Empty results'), $.ajatus.i10n.get('No %s found', [key]));
235 if (typeof on_success == 'undefined') {
236 on_success = $.ajatus.views.system.trash.render_results;
239 on_success(data.rows);
243 $.jqCouch.connection('view', conn_on_success).temp($.ajatus.preferences.client.content_database, "$.ajatus.views.generate('"+trash_view+"')", {
244 count: $.ajatus.views.system.trash.options.group_item_count,
251 $.ajatus.application_content_area.html('');
252 $.ajatus.layout.body.set_class('trash');
253 $.ajatus.views.on_change("#view.trash");
255 $.ajatus.toolbar.init();
256 $.ajatus.toolbar.show();
258 $.ajatus.views.system.trash.get_items();
261 render_results: function(rows)
263 var result_count = {};
264 var show_empty_trash = false;
266 $.each($.ajatus.preferences.client.content_types, function(key,type){
267 if (!type.views['list']) {
271 result_count[type.name] = 0;
273 $.each(rows, function(i,doc){
274 if (doc.value._type == type.name) {
275 result_count[type.name] += 1;
279 if (result_count[type.name] == 0) {
283 show_empty_trash = true;
285 var renderer = new $.ajatus.renderer.list(
286 $.ajatus.application_content_area,
289 id: type.name + '_list_holder',
293 'title', 'revised', 'by'
303 $.each(rows, function(i,doc){
304 if (doc.value._type == type.name) {
305 var doc = new $.ajatus.document(doc);
307 renderer.set_actions(
311 title: $.ajatus.i10n.get('View'),
313 click_action: '$.ajatus.views.system.item.render(doc);'
317 title: $.ajatus.i10n.get('Undelete'),
319 click_action: '$.ajatus.document.actions.execute("undelete", doc);'
322 name: 'delete_final',
323 title: $.ajatus.i10n.get('Delete'),
325 click_action: '$.ajatus.document.actions.execute("delete_final", doc);'
329 if ($.ajatus.tags.active != '') {
330 if ($.ajatus.utils.array.has_match($.ajatus.tags.active, doc.value.tags.val)) {
331 renderer.render_item(doc, i);
334 renderer.render_item(doc, i);
339 renderer.enable_sorting();
342 if (show_empty_trash) {
343 $.ajatus.toolbar.add_item($.ajatus.i10n.get('Empty trash'), 'trash.png', function(){
344 $.ajatus.views.system.trash.empty();
349 $.ajatus.views.system.trash.get_items($.ajatus.views.system.trash.execute_empty);
351 execute_empty: function(rows) {
352 $.each(rows, function(i,doc){
353 doc = new $.ajatus.document(doc);
354 $.ajatus.document.actions.execute("delete_final", doc);
358 $.ajatus.views.system.edit = {
363 dynamic_history: true
365 $.extend($.ajatus.views.system.edit, {
366 render: function(type, doc, use_given_doc)
368 if (typeof use_given_doc == 'undefined') {
369 use_given_doc = false;
372 var content_type = type;
374 if (! use_given_doc) {
375 var doc = new $.ajatus.document.loader(doc._id, doc._rev);
379 content_type = $.ajatus.preferences.client.content_types[doc.value._type];
382 if (typeof(type) == 'string') {
383 content_type = $.ajatus.preferences.client.content_types[type];
386 $.ajatus.layout.body.set_class('edit '+content_type.name);
388 var view_hash = '#edit.'+doc.value._type+'.'+doc._id+'.'+doc._rev;
389 $.ajatus.history.update(view_hash);
390 $.ajatus.views.on_change(view_hash);
392 var latest_rev = $.ajatus.document.revisions.get(doc).active.rev;
394 var renderer = new $.ajatus.renderer.form(content_type, doc, false, latest_rev);
395 $.ajatus.application_content_area.html(renderer.form);
396 $.ajatus.forms.register.normal(renderer.form);
398 history_register: function() {
399 $.ajatus.history.add_dynamic_map(['edit'], 3, '$.ajatus.views.system.edit.history_render');
401 history_render: function() {
402 var type = arguments[0];
403 var id = arguments[1];
406 if ( typeof arguments[2] != 'undefined'
407 && arguments[2] != '')
412 var doc = new $.ajatus.document.loader(id, rev);
413 $.ajatus.views.system.edit.render(type, doc);
417 $.ajatus.views.system.create = {
422 dynamic_history: true
424 $.extend($.ajatus.views.system.create, {
425 render: function(type, doc)
427 var content_type = type;
429 if (typeof(type) == 'string') {
430 content_type = $.ajatus.preferences.client.content_types[type];
433 $.ajatus.layout.body.set_class('create '+content_type.name);
435 var view_hash = '#create.'+content_type.name;
437 $.ajatus.history.update(view_hash);
439 $.ajatus.views.on_change(view_hash);
441 if ( content_type.custom_renderer
442 && typeof(content_type.custom_renderer['create']) == 'function')
444 var renderer = content_type.custom_renderer.create();
446 var renderer = new $.ajatus.renderer.form(content_type, doc, true);
447 $.ajatus.application_content_area.html(renderer.form);
448 $.ajatus.forms.register.normal(renderer.form);
451 history_register: function() {
452 $.ajatus.history.add_dynamic_map(['create'], 2, '$.ajatus.views.system.create.history_render');
454 history_render: function() {
455 var type = arguments[0];
457 $.ajatus.views.system.create.render(type);
461 $.ajatus.views.system.item = {
466 dynamic_history: true
468 $.extend($.ajatus.views.system.item, {
469 render: function(doc)
471 if (typeof doc._rev != 'undefined') {
472 var doc = new $.ajatus.document.loader(doc._id, doc._rev);
474 var doc = new $.ajatus.document.loader(doc._id);
477 var content_type = $.ajatus.preferences.client.content_types[doc.value._type];
479 $.ajatus.layout.body.set_class('view '+doc.value._type);
481 var view_hash = '#view.'+doc.value._type+'.'+doc._id+'.'+doc._rev;
482 $.ajatus.history.update(view_hash);
483 $.ajatus.views.on_change(view_hash);
485 $.ajatus.toolbar.add_item($.ajatus.i10n.get('Edit'), {
488 $.ajatus.views.system.edit.render(content_type, doc);
493 if (doc.value.metadata.archived.val) {
494 var unarch_id = $.ajatus.toolbar.add_item($.ajatus.i10n.get('Restore'), 'undo.png', function(item, doc){
496 $.ajatus.document.actions.execute("unarchive", doc);
498 $.ajatus.toolbar.hide_item(item.id);
499 $.ajatus.toolbar.add_item($.ajatus.i10n.get('Archive'), 'archive.png', function(item, doc, unarch_item_id){
501 $.ajatus.document.actions.execute("archive", doc);
503 $.ajatus.toolbar.hide_item(item.id);
504 $.ajatus.toolbar.show_item(unarch_item_id);
505 }, [doc, unarch_id], unarch_id);
508 var arch_id = $.ajatus.toolbar.add_item($.ajatus.i10n.get('Archive'), 'archive.png', function(item, doc){
510 $.ajatus.document.actions.execute("archive", doc);
512 $.ajatus.toolbar.hide_item(item.id);
513 $.ajatus.toolbar.add_item($.ajatus.i10n.get('Restore'), 'undo.png', function(item, doc, arch_item_id){
515 $.ajatus.document.actions.execute("unarchive", doc);
517 $.ajatus.toolbar.hide_item(item.id);
518 $.ajatus.toolbar.show_item(arch_item_id);
519 }, [doc, arch_id], arch_id);
523 if (doc.value.metadata.deleted.val) {
524 var undel_id = $.ajatus.toolbar.add_item($.ajatus.i10n.get('Undelete'), 'undo.png', function(item, doc){
526 $.ajatus.document.actions.execute("undelete", doc);
529 $.ajatus.toolbar.hide_item(item.id);
530 $.ajatus.toolbar.add_item($.ajatus.i10n.get('Delete'), 'trash.png', function(item, doc, undel_item_id){
532 $.ajatus.document.actions.execute("delete", doc);
534 $.ajatus.toolbar.hide_item(item.id);
535 $.ajatus.toolbar.show_item(undel_item_id);
536 }, [d, undel_id], undel_id);
539 var del_id = $.ajatus.toolbar.add_item($.ajatus.i10n.get('Delete'), 'trash.png', function(item, doc){
541 $.ajatus.document.actions.execute("delete", doc);
544 $.ajatus.toolbar.hide_item(item.id);
545 $.ajatus.toolbar.add_item($.ajatus.i10n.get('Undelete'), 'undo.png', function(item, doc, del_item_id){
547 $.ajatus.document.actions.execute("undelete", doc);
549 $.ajatus.toolbar.hide_item(item.id);
550 $.ajatus.toolbar.show_item(del_item_id);
551 }, [d, del_id], del_id);
555 $.ajatus.toolbar.show();
557 var metadata_sb = new $.ajatus.renderer.blocks.sub('metadata_for_'+doc._id);
558 metadata_sb.set_title($.ajatus.i10n.get('Metadata'));
559 $.ajatus.views.on_change_actions.add('$.ajatus.renderer.blocks.clear_sub("'+metadata_sb.id+'");');
561 var md_renderer = new $.ajatus.renderer.metadata(doc, metadata_sb.element);
563 if (typeof doc.value.tags != 'undefined') {
564 var rel_docs = $.ajatus.tags.related(doc.value.tags.val, [doc._id]);
566 var related_sb = new $.ajatus.renderer.blocks.sub('related_objects');
567 related_sb.set_title($.ajatus.i10n.get('Related Objects'));
568 $.ajatus.views.on_change_actions.add('$.ajatus.renderer.blocks.clear_sub("'+related_sb.id+'");');
570 var tinylist = new $.ajatus.renderer.tinylist(related_sb.element);
571 tinylist.render_items(rel_docs);
574 if ( content_type.custom_renderer
575 && typeof(content_type.custom_renderer['item']) == 'function')
577 var renderer = content_type.custom_renderer.item();
579 var renderer = new $.ajatus.renderer.item(doc);
582 history_register: function() {
583 $.ajatus.history.add_dynamic_map(['view'], 3, '$.ajatus.views.system.item.history_render');
585 history_render: function() {
586 var type = arguments[0];
587 var id = arguments[1];
590 if ( typeof arguments[2] != 'undefined'
591 && arguments[2] != '')
613 if (typeof data['toSource'] != 'undefined') {
614 data = data.toSource();
617 setTimeout("$.ajatus.views.system.item.render("+data+");", 200);