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.widgets = $.ajatus.widgets || {};
18 $.ajatus.widgets.core = typeof($.ajatus.widgets.core) == 'undefined' ? {} : $.ajatus.widgets.core;
20 $.ajatus.widgets.core.tags = {
29 get_create_tpl: function(name, default_value)
31 if (this.assign_tags == null) {
32 this.assign_tags = [];
36 if (typeof default_value == 'object') {
37 $.each(default_value, function(i,dv){
38 if (typeof dv.id != 'undefined') {
39 var tag = $.ajatus.tags.get(dv.id);
41 this.assign_tags[idx] = tag;
47 if (typeof $.ajatus.tags.active == 'object') {
48 this.assign_tags[idx] = $.ajatus.tags.active;
52 'input', { type: 'hidden', name: 'widget['+name+':name]', value: this.name }, '',
53 'input', { type: 'hidden', name: 'widget['+name+':config]', value: $.ajatus.converter.toJSON(this.settings) }, '',
54 'input', { type: 'hidden', name: 'widget['+name+':required]', value: this.required }, '',
55 'input', { type: 'text', name: name, value: '' }, ''
58 get_edit_tpl: function(name, data)
60 data.val = this.value_on_edit(data.val);
62 'input', { type: 'hidden', name: 'widget['+name+':name]', value: this.name }, '',
63 'input', { type: 'hidden', name: 'widget['+name+':config]', value: $.ajatus.converter.toJSON(this.settings) }, '',
64 'input', { type: 'hidden', name: 'widget['+name+':required]', value: this.required }, '',
65 'input', { type: 'hidden', name: 'widget['+name+':prev_val]', value: $.ajatus.converter.toJSON(data.val) }, '',
66 'input', { type: 'text', name: name, value: '' }, ''
69 get_view_tpl: function(name, data)
71 data.val = this.value_on_view(data.val);
74 'div', { className: data._id+'_element_'+name+'_value' }, [
75 'ul', { className: 'tag_list' }, data.val,
76 'br', { className: 'clear_fix' }, ''
80 set_config: function(config)
82 this.settings = $.extend(this.settings, config);
84 value_on_save: function(value, prev_val)
89 var id_inputs = $(':input[name*=__tags_widget_selections]');
91 $.each(id_inputs, function(i,n){
92 tag_arr.push($.ajatus.converter.parseJSON(n.value))
95 if ( typeof prev_val == 'undefined'
101 $.each(tag_arr, function(i,t){
102 if (typeof t.id != 'undefined') {
107 tag_arr = $.grep(tag_arr, function(n,i){
108 return n != '' && (typeof n.id == 'undefined' || n.id == '');
111 var saved_tag_ids = this._update_system_tags(tag_arr, prev_val);
113 $.each(saved_tag_ids, function(i,t){
119 has_data_changed: function(value, prev_value) {
120 var data_changed = false;
122 if ( value.length == 0
123 && prev_value.length == 0)
128 if ( value.length > 0
129 && prev_value.length == 0)
133 if ( prev_value.length > 0
134 && value.length == 0)
139 $.each(value, function(i,n){
140 if ($.inArray(n, prev_value) != -1) {
149 $.each(prev_value, function(i,n){
150 if ($.inArray(n, value) != -1) {
157 value_on_edit: function(value)
160 if (self.assign_tags == null) {
161 self.assign_tags = [];
163 $.each(value, function(i,t){
164 self.assign_tags[self.assign_tags.length || i] = $.ajatus.tags.get(t);
167 return self.assign_tags;
169 // Type = list / item
170 value_on_view: function(value, type)
172 if (typeof type == 'undefined') {
179 if (value.length > 0) {
180 $.each(value, function(i,v){
181 var tag = $.ajatus.tags.get(v);
183 if ( typeof(tag.value.title.widget.config['context']) != 'undefined'
184 && tag.value.title.widget.config['context'] != '')
186 tag_title += tag.value.title.widget.config.context + ':';
188 tag_title += tag.value.title.val;
190 if (type == 'plain') {
191 tags_str += tag_title + _self.settings.separator;
193 var tpl = _self.style_tag_on_view(tag_title, tag.value.title.widget.config.color, type);
194 $.each(tpl, function(tidx, tp){
201 if (type == 'plain') {
207 style_tag_on_view: function(title, color, type) {
208 if ( typeof color == 'undefined'
211 var color = $.ajatus.widgets.core.tag.settings.color;
214 if (type == 'list') {
216 'span', { className: 'tag' }, title
221 'li', { className: 'tag', style: 'background-color: #'+color+';' }, title
226 $.ajatus.events.lock_pool.increase();
228 $.ajatus.layout.styles.load($.ajatus.preferences.client.theme_url + 'css/widgets/tags.css');
229 $.ajatus.layout.styles.load($.ajatus.preferences.client.theme_url + 'css/widgets/includes/tags.css');
231 var tags_url = $.ajatus.preferences.client.application_url + 'js/widgets/includes/tags.js';
232 $.ajatus.utils.load_script(tags_url, "$.ajatus.events.lock_pool.decrease", []);
234 init: function(holder, form_mode)
237 this.init_form_mode(holder);
239 this.init_view_mode(holder);
242 init_form_mode: function(holder)
244 var element = $('input[@type=text]', holder);
246 if (this.assign_tags == null) {
247 this.assign_tags = [];
251 element.tags(this.settings.widget);
253 $.each(this.assign_tags, function(i,tag) {
254 if (typeof tag == "object") {
255 element.tags_add_item(tag, true);
257 tag = $.ajatus.tags.get(tag);
259 element.tags_add_item(tag, true);
265 init_view_mode: function(holder)
268 _update_system_tags: function(new_tags, prev_tags)
274 || new_tags.length <= 0)
279 var on_success = function(data) {
281 var msg = $.ajatus.elements.messages.create(
282 $.ajatus.i10n.get('New tag created'),
283 $.ajatus.i10n.get("Created new tag '%s'", [data.id])
286 $.ajatus.debug("saved tag: "+data.id);
287 tag_ids.push(data.id);
292 var dc = $.jqCouch.connection('doc', on_success);
294 $.each(new_tags, function(i,d){
297 var context_key = '';
299 var tag_parts = t.split(':');
300 context_key = tag_parts[0];
305 color: (typeof d.color != 'undefined') ? d.color : '',
306 context: (typeof d.context != 'undefined') ? d.context : context_key,
307 value: (typeof d.value != 'undefined') ? d.value : ''
315 $.ajatus.tags.create(t, data, dc);
318 $.ajatus.views.on_change_actions.add('$.ajatus.tags.refresh_cache();');