Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / common.js @ ffaabee9

History | View | Annotate | Download (9.6 kB)

1 5acf3fcf Olga Brani
/*
2 5acf3fcf Olga Brani
* Various functions that will be used throughout all templates
3 5acf3fcf Olga Brani
* are inside ui Object
4 5acf3fcf Olga Brani
*/
5 b3c1328b Olga Brani
6 5acf3fcf Olga Brani
ui = {};
7 9b6be833 Olga Brani
/*
8 9b6be833 Olga Brani
* ui.wizards get populated in vm-wizard.js
9 9b6be833 Olga Brani
* here is the declaration only
10 9b6be833 Olga Brani
*/
11 6bd1416f Athina Bekakou
ui.wizard = {};
12 98714f8a Olga Brani
13 5acf3fcf Olga Brani
/* when closeEl el is clicked, its parent with class divToCloseClass slidesUp */
14 98714f8a Olga Brani
ui.closeDiv = function(closeEl, divToCloseClass) {
15 d3bfabe8 Olga Brani
    closeEl.click(function(e){
16 d3bfabe8 Olga Brani
        e.preventDefault();
17 d3bfabe8 Olga Brani
        $(this).parents(divToCloseClass).slideUp('slow');
18 d3bfabe8 Olga Brani
    });
19 b3c1328b Olga Brani
}
20 b3c1328b Olga Brani
21 98714f8a Olga Brani
22 9569cdc8 Olga Brani
ui.trimChars = function( str, chars) {
23 9569cdc8 Olga Brani
    if ( str.length>chars){
24 5acf3fcf Olga Brani
        return $.trim(str).substring(0, chars)+ "...";
25 9569cdc8 Olga Brani
    } else {
26 9569cdc8 Olga Brani
        return str;
27 9569cdc8 Olga Brani
    }
28 9569cdc8 Olga Brani
}
29 9569cdc8 Olga Brani
30 5acf3fcf Olga Brani
/* sets lt-sidebar height. Useful for jscrollpane scrollbar */
31 98714f8a Olga Brani
ui.setSidebarHeight = function(){
32 d3bfabe8 Olga Brani
    var WindowHeight = $(window).height();
33 d3bfabe8 Olga Brani
    var h1= WindowHeight - $('.header').outerHeight();
34 5acf3fcf Olga Brani
    var h2= $('.main').outerHeight();
35 5acf3fcf Olga Brani
    $('.lt-sidebar').height((h2>h1) ? h2 : h1);
36 98714f8a Olga Brani
}
37 98714f8a Olga Brani
38 5acf3fcf Olga Brani
39 5acf3fcf Olga Brani
/* 
40 5acf3fcf Olga Brani
* Logic for Entities actions. Present in items_list pages
41 5acf3fcf Olga Brani
* Available categories are :
42 5acf3fcf Olga Brani
*  - both/single ( for multiple entities/single entities)
43 5acf3fcf Olga Brani
*  - running/stopped ( for running/stopped entities)
44 5acf3fcf Olga Brani
*  - permanent ( for entities always active )
45 5acf3fcf Olga Brani
*/
46 5acf3fcf Olga Brani
ui.entitiesActionsEnabled = function(){
47 8db75456 Athina Bekakou
    var all = $('.snf-checkbox-checked').length;
48 8db75456 Athina Bekakou
    var running = $('.snf-checkbox-checked').parents('.container').find('.running').length;
49 8db75456 Athina Bekakou
    var stopped = $('.snf-checkbox-checked').parents('.container').find('.stopped').length;
50 6e3d008c Olga Brani
    $('.header .main-actions li:not(.permanent) a').removeClass('active');  
51 5e62e9c1 Olga Brani
    if ( (running*stopped) > 0 ){          
52 e5c8c342 Olga Brani
         $('.main-actions li.both a').addClass('active');
53 e5c8c342 Olga Brani
         $('.main-actions li.single a').removeClass('active');
54 5e62e9c1 Olga Brani
    } else {
55 5e62e9c1 Olga Brani
        if (running > 0) {
56 e5c8c342 Olga Brani
            $('.main-actions li.both a').addClass('active');
57 e5c8c342 Olga Brani
            $('.main-actions li.running a').addClass('active');
58 5e62e9c1 Olga Brani
        } else if (stopped>0) {
59 e5c8c342 Olga Brani
            $('.main-actions li.both a').addClass('active');
60 e5c8c342 Olga Brani
            $('.main-actions li.stopped a').addClass('active');
61 5e62e9c1 Olga Brani
        }
62 5e62e9c1 Olga Brani
        if ( all > 1 ) {
63 e5c8c342 Olga Brani
            $('.main-actions li.single a').removeClass('active');
64 5e62e9c1 Olga Brani
        }
65 5e62e9c1 Olga Brani
    }
66 5e62e9c1 Olga Brani
}
67 a18bd0ed Olga Brani
68 788833c7 Olga Brani
ui.entitiesActionsInit = function(){
69 5e62e9c1 Olga Brani
70 321113f5 Olga Brani
    $('.entities li .container').mouseleave(
71 5e62e9c1 Olga Brani
        function(e){
72 5acf3fcf Olga Brani
            $(this).find('.snf-checkbox-unchecked').parents('.check').removeClass('active');
73 d3bfabe8 Olga Brani
         }
74 5e62e9c1 Olga Brani
    );
75 5e62e9c1 Olga Brani
76 321113f5 Olga Brani
    $('.entities .container .check').click(function(e){
77 62462e34 Athina Bekakou
        // e.preventDefault();
78 8db75456 Athina Bekakou
        var checkbox = $(this).find('.snf-checkbox-unchecked, .snf-checkbox-checked');
79 62462e34 Athina Bekakou
        // checkbox.toggleClass('snf-checkbox-unchecked');
80 62462e34 Athina Bekakou
        // checkbox.toggleClass('snf-checkbox-checked');
81 5e62e9c1 Olga Brani
        
82 8db75456 Athina Bekakou
        if(checkbox.hasClass('snf-checkbox-checked')){
83 d3bfabe8 Olga Brani
            $(this).parents('.container').addClass('set-bg');
84 c9655064 Olga Brani
            $(this).addClass('active');
85 5e62e9c1 Olga Brani
        }
86 5e62e9c1 Olga Brani
        else{
87 d3bfabe8 Olga Brani
            $(this).parents('.container').removeClass('set-bg');
88 5e62e9c1 Olga Brani
        }
89 5acf3fcf Olga Brani
        ui.entitiesActionsEnabled();
90 5e62e9c1 Olga Brani
    })
91 d3bfabe8 Olga Brani
   
92 5e62e9c1 Olga Brani
}
93 01fa9e32 Olga Brani
94 5acf3fcf Olga Brani
/*
95 5acf3fcf Olga Brani
* In order for the editable value functionality to work, the html markup
96 5acf3fcf Olga Brani
* should be:
97 5acf3fcf Olga Brani
    <div class="editable">
98 5acf3fcf Olga Brani
        <span class="input-txt">editable value</span>
99 5acf3fcf Olga Brani
        <input type="text">
100 5acf3fcf Olga Brani
        <a href="#" class="edit">edit</a>
101 5acf3fcf Olga Brani
        <a href="#" class="save">save</a>
102 5acf3fcf Olga Brani
        <a href="#" class="cancel">cancel</a>
103 5acf3fcf Olga Brani
    </div>
104 5acf3fcf Olga Brani
*/
105 788833c7 Olga Brani
ui.editable = function(){
106 788833c7 Olga Brani
107 788833c7 Olga Brani
/*
108 5acf3fcf Olga Brani
* resetForm hides save and cancel buttons,
109 5acf3fcf Olga Brani
* text input and shows input-txt. resetForm does not alter
110 5acf3fcf Olga Brani
* input-txt content.
111 788833c7 Olga Brani
*/
112 788833c7 Olga Brani
113 788833c7 Olga Brani
    function resetForm(e, elem) {
114 788833c7 Olga Brani
        var el = elem.parents('.editable');
115 788833c7 Olga Brani
        el.find('input[type="text"]').hide();
116 788833c7 Olga Brani
        el.find('a.cancel, a.save').hide();
117 5acf3fcf Olga Brani
        el.find('a.edit, .input-txt').show();
118 788833c7 Olga Brani
    }
119 788833c7 Olga Brani
120 788833c7 Olga Brani
/* 
121 5acf3fcf Olga Brani
* showForm hides input-txt, shows save and cancel buttons and
122 5acf3fcf Olga Brani
* sets input value to input-txt content.
123 788833c7 Olga Brani
*/
124 788833c7 Olga Brani
    function showForm(e,elem) {
125 788833c7 Olga Brani
        e.stopPropagation(); 
126 788833c7 Olga Brani
        e.preventDefault();
127 788833c7 Olga Brani
        var el = elem.parents('.editable'); 
128 788833c7 Olga Brani
        el.find('input[type="text"]').val(el.find('.input-txt').html());
129 788833c7 Olga Brani
        el.find('input[type="text"]').show();
130 788833c7 Olga Brani
        el.find('a.cancel, a.save').show();
131 788833c7 Olga Brani
        elem.hide();
132 788833c7 Olga Brani
        el.find('.input-txt').hide();
133 788833c7 Olga Brani
134 788833c7 Olga Brani
    }
135 788833c7 Olga Brani
136 788833c7 Olga Brani
/*
137 788833c7 Olga Brani
setValue sets input-txt value to the input value.
138 788833c7 Olga Brani
Makes sure that the input value is not empty.
139 788833c7 Olga Brani
TODO:
140 788833c7 Olga Brani
Ajax request to submit form
141 788833c7 Olga Brani
*/
142 788833c7 Olga Brani
143 788833c7 Olga Brani
    function setValue(elem) {
144 788833c7 Olga Brani
        var el = elem.parents('.editable');
145 788833c7 Olga Brani
        if( el.find('input[type="text"]').val() ) {
146 788833c7 Olga Brani
            el.find('.input-txt').html(el.find('input[type="text"]').val());
147 788833c7 Olga Brani
        }
148 788833c7 Olga Brani
    }
149 788833c7 Olga Brani
150 788833c7 Olga Brani
151 788833c7 Olga Brani
    $('.editable .edit').click(function(e){
152 788833c7 Olga Brani
        showForm(e, $(this));
153 788833c7 Olga Brani
    })
154 788833c7 Olga Brani
155 788833c7 Olga Brani
    $('.editable .cancel').click(function(e){
156 788833c7 Olga Brani
        e.stopPropagation();
157 788833c7 Olga Brani
        e.preventDefault();
158 788833c7 Olga Brani
        resetForm(e, $(this));
159 788833c7 Olga Brani
    })
160 788833c7 Olga Brani
161 788833c7 Olga Brani
    $('.editable .save').click(function(e){
162 788833c7 Olga Brani
        e.stopPropagation();
163 788833c7 Olga Brani
        e.preventDefault();
164 788833c7 Olga Brani
        setValue($(this));
165 788833c7 Olga Brani
        resetForm(e, $(this));
166 788833c7 Olga Brani
167 788833c7 Olga Brani
    })
168 788833c7 Olga Brani
169 788833c7 Olga Brani
170 788833c7 Olga Brani
    $('.editable input[type="text"]').click(function(e){
171 788833c7 Olga Brani
        e.stopPropagation();
172 788833c7 Olga Brani
    })
173 788833c7 Olga Brani
174 788833c7 Olga Brani
    $('.editable input[type="text"]').keyup(function(e){
175 788833c7 Olga Brani
        if(e.keyCode == 13) { 
176 788833c7 Olga Brani
            setValue($(this));
177 788833c7 Olga Brani
            resetForm(e, $(this));
178 788833c7 Olga Brani
            
179 788833c7 Olga Brani
        }
180 788833c7 Olga Brani
    
181 788833c7 Olga Brani
    })
182 788833c7 Olga Brani
183 788833c7 Olga Brani
    $('html').click(function(e) {
184 788833c7 Olga Brani
        resetForm(e, $('.editable a.cancel'));
185 788833c7 Olga Brani
    });
186 788833c7 Olga Brani
187 9569cdc8 Olga Brani
}
188 9569cdc8 Olga Brani
189 5acf3fcf Olga Brani
/* TODO: better overlay functionality */
190 9569cdc8 Olga Brani
ui.overlay = function() {
191 9569cdc8 Olga Brani
    $('[data-overlay-id]').click(function(e){
192 9569cdc8 Olga Brani
        e.preventDefault();
193 9569cdc8 Olga Brani
        var el = $(this);
194 9569cdc8 Olga Brani
        // main-actions a need to be active to trigger overlay
195 9569cdc8 Olga Brani
        if ( (el.parents('.main-actions').find('li a.active').length == 0) && (el.parents('.main-actions').length > 0) ) {
196 9569cdc8 Olga Brani
            return false;
197 9569cdc8 Olga Brani
        }
198 9569cdc8 Olga Brani
        var id = el.data('overlay-id');
199 03bcb595 Olga Brani
200 6fcab23b Olga Brani
        $('.overlay-area').fadeIn('slow');
201 6fcab23b Olga Brani
        $(id).fadeIn('slow');
202 96d15954 Olga Brani
        if ($('.step-1').length>0) {
203 96d15954 Olga Brani
            ui.wizard.setStepHeight($('.step-1'));
204 96d15954 Olga Brani
        }
205 9b6be833 Olga Brani
        $(id).find('a').first().focus();
206 9569cdc8 Olga Brani
    });
207 788833c7 Olga Brani
}
208 788833c7 Olga Brani
209 3820a3de Athina Bekakou
// when user moves a vm or network icon (list view)
210 3820a3de Athina Bekakou
ui.placementByUser = function() {
211 3820a3de Athina Bekakou
    if($('.sortable').length != 0) {
212 3820a3de Athina Bekakou
        $( ".sortable" ).sortable({
213 3820a3de Athina Bekakou
            items: "> li:not(:last)",
214 3820a3de Athina Bekakou
            stop: function(event, ui) {
215 3820a3de Athina Bekakou
                $.map($(this).find('li'), function(el) {
216 3820a3de Athina Bekakou
                            return $(el).attr('data-order', $(el).index());
217 3820a3de Athina Bekakou
                        });
218 3820a3de Athina Bekakou
            }
219 3820a3de Athina Bekakou
        });
220 3820a3de Athina Bekakou
221 3820a3de Athina Bekakou
        $( ".sortable" ).disableSelection(); //i think unnecessary
222 3820a3de Athina Bekakou
    }
223 3820a3de Athina Bekakou
}
224 3820a3de Athina Bekakou
225 5c4713f8 Olga Brani
function goToByScroll(id){
226 5c4713f8 Olga Brani
      // Remove "link" from the ID
227 5c4713f8 Olga Brani
    id = id.replace("link", "");
228 5c4713f8 Olga Brani
      // Scroll
229 5c4713f8 Olga Brani
    $('html,body').animate({
230 5c4713f8 Olga Brani
        scrollTop: $("#"+id).offset().top},
231 5c4713f8 Olga Brani
        'slow');
232 5c4713f8 Olga Brani
}
233 f5321878 Olga Brani
234 f5321878 Olga Brani
235 9b6be833 Olga Brani
/*
236 9b6be833 Olga Brani
* functions concerning checkboxes and radiobuttons links
237 9b6be833 Olga Brani
*/
238 9b6be833 Olga Brani
ui.changeCheckboxState =function(checkbox_link) {
239 9b6be833 Olga Brani
     $(checkbox_link).find('.snf-checkbox-unchecked, .snf-checkbox-checked').toggleClass('snf-checkbox-unchecked snf-checkbox-checked');
240 9b6be833 Olga Brani
}
241 9b6be833 Olga Brani
242 9b6be833 Olga Brani
ui.changeRadiobuttonState = function(radiobtn_link) {
243 9b6be833 Olga Brani
    $(radiobtn_link).find('span.snf-radio-unchecked, span.snf-radio-checked').toggleClass('snf-radio-unchecked snf-radio-checked');
244 9b6be833 Olga Brani
}
245 9b6be833 Olga Brani
246 9b6be833 Olga Brani
ui.checkOneRadioButton = function(radiobtn_link) {
247 9b6be833 Olga Brani
    $(radiobtn_link).closest('ul').find('span.snf-radio-checked').toggleClass('snf-radio-unchecked snf-radio-checked');
248 9b6be833 Olga Brani
}
249 9b6be833 Olga Brani
/* toggle expand arrrow */
250 9b6be833 Olga Brani
ui.expandArrow = function(arrow_link) {
251 9b6be833 Olga Brani
    var arrow = arrow_link.find('span.snf-arrow-up, span.snf-arrow-down');
252 9b6be833 Olga Brani
    arrow.toggleClass('snf-arrow-up snf-arrow-down');
253 9b6be833 Olga Brani
}
254 9b6be833 Olga Brani
255 9b6be833 Olga Brani
256 9b6be833 Olga Brani
257 b3c1328b Olga Brani
$(document).ready(function(){
258 b3c1328b Olga Brani
259 5acf3fcf Olga Brani
    ui.setSidebarHeight();
260 d3bfabe8 Olga Brani
    ui.closeDiv($('.info .close'), '.info');
261 5acf3fcf Olga Brani
    ui.editable();
262 5acf3fcf Olga Brani
    ui.overlay();
263 4ff5dda5 Athina Bekakou
    ui.colorPickerVisible = 0;
264 d3bfabe8 Olga Brani
265 62462e34 Athina Bekakou
    // checkbox: basic reaction on click (checked, unchecked)
266 62462e34 Athina Bekakou
    $('.check').click(function(e){
267 62462e34 Athina Bekakou
        e.preventDefault();
268 62462e34 Athina Bekakou
        e.stopPropagation();
269 62462e34 Athina Bekakou
        ui.changeCheckboxState(this);
270 62462e34 Athina Bekakou
    });
271 62462e34 Athina Bekakou
272 62462e34 Athina Bekakou
    ui.entitiesActionsInit();
273 d3bfabe8 Olga Brani
    
274 d3bfabe8 Olga Brani
    if ($('.overlay').length >0 ){
275 d3bfabe8 Olga Brani
        $('body').addClass('with-overlay');
276 d3bfabe8 Olga Brani
    }
277 d3bfabe8 Olga Brani
278 d3bfabe8 Olga Brani
    $('.new-btn a.current').click(function(e){
279 d3bfabe8 Olga Brani
        e.preventDefault();
280 d3bfabe8 Olga Brani
    })
281 d3bfabe8 Olga Brani
282 d3bfabe8 Olga Brani
    $('.main-actions li a').click(function(e){
283 d3bfabe8 Olga Brani
        if (!($(this).hasClass('active'))) {
284 d3bfabe8 Olga Brani
            e.preventDefault();
285 d3bfabe8 Olga Brani
        }
286 d3bfabe8 Olga Brani
    })
287 788833c7 Olga Brani
    $('.scroll-pane').jScrollPane();
288 f2126967 Olga Brani
289 9569cdc8 Olga Brani
    $('.main .items-list .title em').each(function(){
290 5acf3fcf Olga Brani
        $(this).html( ui.trimChars($(this).html(), 20) );
291 9569cdc8 Olga Brani
292 9569cdc8 Olga Brani
    })
293 9569cdc8 Olga Brani
294 f2126967 Olga Brani
    $('.main-actions li a').click(function(e){
295 f2126967 Olga Brani
        if (!($(this).hasClass('active'))) {
296 f2126967 Olga Brani
            e.preventDefault();
297 f2126967 Olga Brani
        }
298 f2126967 Olga Brani
    })
299 62462e34 Athina Bekakou
    $('.overlay-area').children('.close').click(function(e){
300 9569cdc8 Olga Brani
        e.preventDefault();
301 62462e34 Athina Bekakou
        e.stopPropagation();
302 9569cdc8 Olga Brani
        $(this).parents('.overlay-area').hide();
303 03bcb595 Olga Brani
        $(this).parents('.overlay-area').find($('.overlay-div')).hide();
304 9569cdc8 Olga Brani
    })
305 f2126967 Olga Brani
306 182f3fe2 Olga Brani
    $('.browse-files').click(function(e){
307 182f3fe2 Olga Brani
        e.preventDefault();
308 182f3fe2 Olga Brani
    })
309 182f3fe2 Olga Brani
310 846f5913 Olga Brani
    Dropzone.options.filesDropzone = {
311 182f3fe2 Olga Brani
        dictDefaultMessage:'',
312 182f3fe2 Olga Brani
        clickable: '.browse-files',
313 846f5913 Olga Brani
        previewsContainer: '.dropzone-files',
314 846f5913 Olga Brani
        createImageThumbnails: false,
315 846f5913 Olga Brani
        dictRemoveFile: "snf-Remove file",
316 182f3fe2 Olga Brani
    };
317 182f3fe2 Olga Brani
318 342fa48b Olga Brani
319 342fa48b Olga Brani
    $('.main .files').magnificPopup({
320 342fa48b Olga Brani
        delegate: 'a.show.image',
321 342fa48b Olga Brani
        type: 'image',
322 342fa48b Olga Brani
        tLoading: 'Loading image #%curr%...',
323 342fa48b Olga Brani
        mainClass: 'mfp-img-mobile',
324 342fa48b Olga Brani
        gallery: {
325 342fa48b Olga Brani
            enabled: true,
326 342fa48b Olga Brani
            navigateByImgClick: true,
327 342fa48b Olga Brani
            preload: [0,1] // Will preload 0 - before current, and 1 after the current image
328 342fa48b Olga Brani
        },
329 342fa48b Olga Brani
        image: {
330 342fa48b Olga Brani
            tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
331 342fa48b Olga Brani
            titleSrc: function(item) {
332 342fa48b Olga Brani
                return item.el.data('title');
333 342fa48b Olga Brani
            }
334 342fa48b Olga Brani
        }
335 342fa48b Olga Brani
    });
336 342fa48b Olga Brani
337 62462e34 Athina Bekakou
    ui.placementByUser();
338 62462e34 Athina Bekakou
339 62462e34 Athina Bekakou
    if($('#picker').length>0) {
340 62462e34 Athina Bekakou
        $('#picker').farbtastic('#color');
341 62462e34 Athina Bekakou
    };
342 98714f8a Olga Brani
})
343 b3c1328b Olga Brani
344 9569cdc8 Olga Brani
345 98714f8a Olga Brani
$(window).resize(function(e){
346 d3bfabe8 Olga Brani
    ui.setSidebarHeight();
347 e106fc8f Olga Brani
    $('.scroll-pane').jScrollPane();
348 b3c1328b Olga Brani
})