script: slot
(function() { var navbox_results, navbox_select, navboxize, newCaptcha, permissionsContent, pointerContent, reqIndex, snakeCase, toggleShade, warn; window.wagn || (window.wagn = {}); $.extend(wagn, { editorContentFunctionMap: { '.tinymce-textarea': function() { return tinyMCE.get(this[0].id).getContent(); }, '.pointer-select': function() { return pointerContent(this.val()); }, '.pointer-multiselect': function() { return pointerContent(this.val()); }, '.pointer-radio-list': function() { return pointerContent(this.find('input:checked').val()); }, '.pointer-list-ul': function() { return pointerContent(this.find('input').map(function() { return $(this).val(); })); }, '.pointer-checkbox-list': function() { return pointerContent(this.find('input:checked').map(function() { return $(this).val(); })); }, '.pointer-select-list': function() { return pointerContent(this.find('.pointer-select select').map(function() { return $(this).val(); })); }, '.pointer-mixed': function() { return pointerContent(this.find('.pointer-checkbox-sublist input:checked, .pointer-sublist-ul input').map(function() { return $(this).val(); })); }, '.perm-editor': function() { return permissionsContent(this); } }, editorInitFunctionMap: { '.date-editor': function() { return this.datepicker({ dateFormat: 'yy-mm-dd' }); }, 'textarea': function() { return wagn.initAce($(this)); }, '.tinymce-textarea': function() { return wagn.initTinyMCE(this[0].id); }, '.pointer-list-editor': function() { this.sortable({ handle: '.handle', cancel: '' }); return wagn.initPointerList(this.find('input')); }, '.file-upload': function() { return this.fileupload({ add: wagn.chooseFile }); }, '.etherpad-textarea': function() { return $(this).closest('form').find('.edit-submit-button').attr('class', 'etherpad-submit-button'); } }, initPointerList: function(input) { var optionsCard; optionsCard = input.closest('ul').data('options-card'); return input.autocomplete({ source: wagn.prepUrl(wagn.rootPath + '/' + optionsCard + '.json?view=name_complete') }); }, setTinyMCEConfig: function(string) { var setter; setter = function() { try { return $.parseJSON(string); } catch (_error) { return {}; } }; return wagn.tinyMCEConfig = setter(); }, initAce: function(textarea) { var editDiv, editor, hash, mode, type_code; type_code = textarea.attr("data-card-type-code"); hash = {}; hash["java_script"] = "javascript"; hash["coffee_script"] = "coffee"; hash["css"] = "css"; hash["scss"] = "scss"; hash["html"] = "html"; hash["search_type"] = "json"; hash["layout_type"] = "html"; mode = hash[type_code]; if (!mode) { textarea.autosize(); return; } editDiv = $("<div>", { position: "absolute", width: textarea.width(), height: textarea.height(), "class": textarea.attr("class") }).insertBefore(textarea); textarea.css("visibility", "hidden"); textarea.css("height", "0px"); ace.config.set('basePath', '/assets/ace'); editor = ace.edit(editDiv[0]); editor.renderer.setShowGutter(true); editor.getSession().setValue(textarea.val()); editor.setTheme("ace/theme/github"); editor.getSession().setMode("ace/mode/" + mode); editor.setOption("showPrintMargin", false); editor.getSession().setTabSize(2); editor.getSession().setUseSoftTabs(true); editor.setOptions({ maxLines: 30 }); textarea.closest("form").submit(function() { textarea.val(editor.getSession().getValue()); }); }, initTinyMCE: function(el_id) { var conf, hard_conf, user_conf; conf = { plugins: 'autoresize', autoresize_max_height: 500 }; user_conf = wagn.tinyMCEConfig != null ? wagn.tinyMCEConfig : {}; hard_conf = { mode: 'exact', elements: el_id, content_css: wagn.cssPath, entity_encoding: 'raw' }; $.extend(conf, user_conf, hard_conf); return tinyMCE.init(conf); }, chooseFile: function(e, data) { var contentFieldName, editor, file, name_field; file = data.files[0]; $(this).closest('form').data('file-data', data); if (name_field = $(this).slot().find('.name-editor input')) { if (name_field[0] && name_field.val() === '') { name_field.val(file.name.replace(/\..*$/, '').replace(/_/g, ' ')); } } editor = $(this).closest('.card-editor'); editor.find('.choose-file').hide(); editor.find('.chosen-filename').text(file.name); editor.find('.chosen-file').show(); contentFieldName = this.name.replace(/attach\]$/, 'content]'); return editor.append('<input type="hidden" value="CHOSEN" class="upload-card-content" name="' + contentFieldName + '">'); } }); $(window).ready(function() { var firstShade; $('body').on('click', '.cancel-upload', function() { var contentField, editor; editor = $(this).closest('.card-editor'); editor.find('.chosen-file').hide(); editor.find('.choose-file').show(); $(this).closest('form').data('file-data', null); return contentField = editor.find('.upload-card-content').remove(); }); $('.navbox').autocomplete({ html: 'html', source: navbox_results, select: navbox_select }); $('body').on('click', '.pointer-item-add', function(event) { var input, last_item, new_item; last_item = $(this).closest('.content-editor').find('.pointer-li:last'); new_item = last_item.clone(); input = new_item.find('input'); input.val(''); last_item.after(new_item); wagn.initPointerList(input); return event.preventDefault(); }); $('body').on('click', '.pointer-item-delete', function() { var item; item = $(this).closest('li'); if (item.closest('ul').find('.pointer-li').length > 1) { return item.remove(); } else { return item.find('input').val(''); } }); $('body').on('show.bs.tab', 'a.load[data-toggle=tab][data-url]', function(e) { var tab_id, url; tab_id = $(e.target).attr('href'); url = $(e.target).data('url'); $(e.target).removeClass('load'); return $(tab_id).load(url); }); $('body').on('click', '.edit-toolbar-pin.active > a', function(e) { e.preventDefault(); $(this).blur(); $('.edit-toolbar-pin').removeClass('active').addClass('inactive'); return $.ajax('/*edit_toolbar_pinned', { type: 'PUT', data: 'card[content]=false' }); }); $('body').on('click', '.edit-toolbar-pin.inactive > a', function(e) { e.preventDefault(); $('.edit-toolbar-pin').removeClass('inactive').addClass('active'); return $.ajax('/*edit_toolbar_pinned', { type: 'PUT', data: 'card[content]=true' }); }); $('body').on('click', '.toolbar-pin.active > a', function(e) { e.preventDefault(); $(this).blur(); $('.toolbar-pin').removeClass('active').addClass('inactive'); return $.ajax('/*toolbar_pinned', { type: 'PUT', data: 'card[content]=false' }); }); $('body').on('click', '.toolbar-pin.inactive > a', function(e) { e.preventDefault(); $('.toolbar-pin').removeClass('inactive').addClass('active'); return $.ajax('/*toolbar_pinned', { type: 'PUT', data: 'card[content]=true' }); }); $('body').on('click', '.btn-item-delete', function() { return $(this).find('.glyphicon').addClass("glyphicon-hourglass").removeClass("glyphicon-remove"); }); $('body').on('click', '.btn-item-add', function() { return $(this).find('.glyphicon').addClass("glyphicon-hourglass").removeClass("glyphicon-plus"); }); $('body').on('mouseenter', '.btn-item-delete', function() { $(this).find('.glyphicon').addClass("glyphicon-remove").removeClass("glyphicon-ok"); return $(this).addClass("btn-danger").removeClass("btn-primary"); }); $('body').on('mouseleave', '.btn-item-delete', function() { $(this).find('.glyphicon').addClass("glyphicon-ok").removeClass("glyphicon-remove"); return $(this).addClass("btn-primary").removeClass("btn-danger"); }); $('body').on('click', '.update-follow-link', function(event) { var anchor, modal, url; anchor = $(this); url = wagn.rootPath + '/' + anchor.data('card_key') + '.json?view=follow_status'; modal = anchor.closest('.modal'); modal.removeData(); return $.ajax(url, { type: 'GET', dataType: 'json', success: function(data) { var tags; tags = $(modal).parent().find('.follow-link'); tags.find('.follow-verb').html(data.verb); tags.attr('href', data.path); tags.attr('title', data.title); return tags.data('follow', data); } }); }); $('body').on('click', '.follow-toggle', function(event) { var anchor, url; anchor = $(this); url = wagn.rootPath + '/update/' + anchor.data('rule_name') + '.json'; $.ajax(url, { type: 'POST', dataType: 'json', data: { 'card[content]': '[[' + anchor.data('follow').content + ']]', 'success[view]': 'follow_status', 'success[id]': anchor.data('card_key') }, success: function(data) { var tags; tags = anchor.closest('.modal').parent().find('.follow-toggle'); tags.find('.follow-verb').html(data.verb); tags.attr('title', data.title); tags.removeClass('follow-toggle-on follow-toggle-off').addClass(data["class"]); return tags.data('follow', data); } }); return event.preventDefault(); }); $('body').on('click', '.perm-vals input', function() { return $(this).slot().find('#inherit').attr('checked', false); }); $('body').on('click', '.perm-editor #inherit', function() { var slot; slot = $(this).slot(); slot.find('.perm-group input:checked').attr('checked', false); return slot.find('.perm-indiv input').val(''); }); $('body').on('click', '.rule-submit-button', function() { var checked, f; f = $(this).closest('form'); checked = f.find('.set-editor input:checked'); if (checked.val()) { if (checked.attr('warning')) { return confirm(checked.attr('warning')); } else { return true; } } else { f.find('.set-editor').addClass('attention'); $(this).notify('To what Set does this Rule apply?'); return false; } }); $('body').on('click', '.submit-modal', function() { return $(this).closest('.modal-content').find('form').submit(); }); $('body').on('click', '.shade-view h1', function() { var toggleThis; toggleThis = $(this).slot().find('.shade-content').is(':hidden'); toggleShade($(this).closest('.pointer-list').find('.shade-content:visible').parent()); if (toggleThis) { return toggleShade($(this).slot()); } }); if (firstShade = $('.shade-view h1')[0]) { $(firstShade).trigger('click'); } return $('body').on('change', '.go-to-selected select', function() { var val; val = $(this).val(); if (val !== '') { return window.location = wagn.rootPath + escape(val); } }); }); toggleShade = function(shadeSlot) { shadeSlot.find('.shade-content').slideToggle(1000); return shadeSlot.find('.glyphicon').toggleClass('glyphicon-triangle-right glpyphicon-triangle-bottom'); }; permissionsContent = function(ed) { var groups, indivs; if (ed.find('#inherit').is(':checked')) { return '_left'; } groups = ed.find('.perm-group input:checked').map(function() { return $(this).val(); }); indivs = ed.find('.perm-indiv input').map(function() { return $(this).val(); }); return pointerContent($.makeArray(groups).concat($.makeArray(indivs))); }; pointerContent = function(vals) { var list; list = $.map($.makeArray(vals), function(v) { if (v) { return '[[' + v + ']]'; } }); return $.makeArray(list).join("\n"); }; reqIndex = 0; navbox_results = function(request, response) { var f, formData; f = this.element.closest('form'); formData = f.serialize() + '&view=complete'; return this.xhr = $.ajax({ url: wagn.prepUrl(wagn.rootPath + '/:search.json'), data: formData, dataType: "json", wagReq: ++reqIndex, success: function(data, status) { if (this.wagReq === reqIndex) { return response(navboxize(request.term, data)); } }, error: function() { if (this.wagReq === reqIndex) { return response([]); } } }); }; navboxize = function(term, results) { var items; items = []; $.each(['search', 'add', 'new'], function(index, key) { var i, val; if (val = results[key]) { i = { value: term, prefix: key, icon: 'plus', label: '<strong class="highlight">' + term + '</strong>' }; if (key === 'search') { i.icon = key; i.term = term; } else if (key === 'add') { i.href = '/card/new?card[name]=' + encodeURIComponent(val); } else if (key === 'new') { i.type = 'add'; i.href = '/new/' + val[1]; } return items.push(i); } }); $.each(results['goto'], function(index, val) { return items.push({ icon: 'share-alt', prefix: 'go to', value: val[0], label: val[1], href: '/' + val[2] }); }); $.each(items, function(index, i) { return i.label = '<span class="glyphicon glyphicon-' + i.icon + '"></span><span class="navbox-item-label">' + i.prefix + ':</span> ' + '<span class="navbox-item-value">' + i.label + '</span>'; }); return items; }; navbox_select = function(event, ui) { if (ui.item.term) { $(this).closest('form').submit(); } else { window.location = wagn.rootPath + ui.item.href; } return $(this).attr('disabled', 'disabled'); }; $.extend(wagn, { initializeEditors: function(range, map) { if (map == null) { map = wagn.editorInitFunctionMap; } return $.each(map, function(selector, fn) { return $.each(range.find(selector), function() { return fn.call($(this)); }); }); }, prepUrl: function(url, slot) { var main, slotdata, xtra; xtra = {}; main = $('#main').children('.card-slot').data('cardName'); if (main != null) { xtra['main'] = main; } if (slot) { if (slot.isMain()) { xtra['is_main'] = true; } slotdata = slot.data('slot'); if (slotdata != null) { wagn.slotParams(slotdata, xtra, 'slot'); } } return url + ((url.match(/\?/) ? '&' : '?') + $.param(xtra)); }, slotParams: function(raw, processed, prefix) { return $.each(raw, function(key, value) { var cgiKey; cgiKey = prefix + '[' + snakeCase(key) + ']'; if (key === 'items') { return wagn.slotParams(value, processed, cgiKey); } else { return processed[cgiKey] = value; } }); }, slotReady: function(func) { return $('document').ready(function() { return $('body').on('slotReady', '.card-slot', function(e) { e.stopPropagation(); return func.call(this, $(this)); }); }); }, pingName: function(name, success) { return $.getJSON(wagn.rootPath + '/', { format: 'json', view: 'status', 'card[name]': name }, success); } }); jQuery.fn.extend({ slot: function() { var parent_slot, target_slot; if (this.data('slot-selector')) { target_slot = this.closest(this.data('slot-selector')); parent_slot = this.closest('.card-slot'); while (target_slot.length === 0 && parent_slot.length > 0) { target_slot = $(parent_slot).find(this.data('slot-selector')); parent_slot = $(parent_slot).parent().closest('.card-slot'); } if (target_slot.length === 0) { return $('body').find(this.data('slot-selector')); } else { return target_slot; } } else { return this.closest('.card-slot'); } }, setSlotContent: function(val) { var s, slotdata, v; s = this.slot(); v = $(val); if (v[0]) { if (slotdata = s.attr('data-slot')) { if (slotdata != null) { v.attr('data-slot', slotdata); } } } else { v = val; } s.replaceWith(v); v.trigger('slotReady'); return v; }, slotSuccess: function(data) { var newslot, notice; if (data.redirect) { return window.location = data.redirect; } else { notice = this.attr('notify-success'); newslot = this.setSlotContent(data); if (newslot.jquery) { wagn.initializeEditors(newslot); if (notice != null) { return newslot.notify(notice); } } } }, slotError: function(status, result) { if (status === 403) { return this.setSlotContent(result); } else { this.notify(result); if (status === 409) { return this.slot().find('.current_revision_id').val(this.slot().find('.new-current-revision-id').text()); } else if (status === 449) { return this.slot().find('.recaptcha-box').loadCaptcha(); } } }, notify: function(message) { var form, notice, slot; slot = this.slot(); notice = slot.find('.card-notice'); if (!notice[0]) { notice = $('<div class="card-notice"></div>'); form = slot.find('.card-form'); if (form[0]) { $(form[0]).append(notice); } else { slot.append(notice); } } notice.html(message); return notice.show('blind'); }, report: function(message) { var report; report = this.slot().find('.card-report'); if (!report[0]) { return false; } report.hide(); report.html(message); report.show('drop', 750); return setTimeout((function() { return report.hide('drop', 750); }), 3000); }, isMain: function() { return this.slot().parent('#main')[0]; }, loadCaptcha: function() { return Recaptcha.create(wagn.recaptchaKey, this[0]); }, autosave: function() { var form_data, id, multi, reportee, slot, submit_url; slot = this.slot(); if (this.attr('no-autosave')) { return; } multi = this.closest('.form-group'); if (multi[0]) { if (!(id = multi.data('cardId'))) { return; } reportee = ': ' + multi.data('cardName'); } else { id = slot.data('cardId'); reportee = ''; } submit_url = wagn.rootPath + '/update/~' + id; form_data = $('#edit_card_' + id).serializeArray().reduce((function(obj, item) { obj[item.name] = item.value; return obj; }), { 'draft': 'true', 'success[view]': 'blank' }); return $.ajax(submit_url, { data: form_data, type: 'POST' }); }, setContentFieldsFromMap: function(map) { var this_form; if (map == null) { map = wagn.editorContentFunctionMap; } this_form = $(this); return $.each(map, function(selector, fn) { return this_form.setContentFields(selector, fn); }); }, setContentFields: function(selector, fn) { return $.each(this.find(selector), function() { return $(this).setContentField(fn); }); }, setContentField: function(fn) { var field, init_val, new_val; field = this.closest('.card-editor').find('.card-content'); init_val = field.val(); new_val = fn.call(this); field.val(new_val); if (init_val !== new_val) { return field.change(); } } }); setInterval((function() { return $('.card-form').setContentFieldsFromMap(); }), 20000); $(window).ready(function() { $.ajaxSetup({ cache: false }); setTimeout((function() { return wagn.initializeEditors($('body')); }), 10); $('body').on('ajax:success', '.slotter', function(event, data, c, d) { var slot_top_pos; if (!event.slotSuccessful) { slot_top_pos = $(this).slot().offset().top; $(this).slotSuccess(data); if ($(this).hasClass("card-paging-link")) { $("body").scrollTop(slot_top_pos); } return event.slotSuccessful = true; } }); $('body').on('loaded.bs.modal', null, function(event) { if (!event.slotSuccessful) { wagn.initializeEditors($(event.target)); return event.slotSuccessful = true; } }); $('body').on('ajax:error', '.slotter', function(event, xhr) { return $(this).slotError(xhr.status, xhr.responseText); }); $('body').on('click', 'button.slotter', function(event) { if (!$.rails.allowAction($(this))) { return false; } return $.rails.handleRemote($(this)); }); $('body').on('ajax:beforeSend', '.slotter', function(event, xhr, opt) { var args, data, iframeUploadFilter, input, widget; if (opt.skip_before_send) { return; } if (!opt.url.match(/home_view/)) { opt.url = wagn.prepUrl(opt.url, $(this).slot()); } if ($(this).is('form')) { if (wagn.recaptchaKey && $(this).attr('recaptcha') === 'on' && !($(this).find('.recaptcha-box')[0])) { newCaptcha(this); return false; } if (data = $(this).data('file-data')) { input = $(this).find('.file-upload'); if (input[1]) { $(this).notify("Wagn does not yet support multiple files in a single form."); return false; } widget = input.data('blueimpFileupload'); if (!widget._isXHRUpload(widget.options)) { $(this).find('[name=success]').val('_self'); opt.url += '&simulate_xhr=true'; iframeUploadFilter = function(data) { return data.find('body').html(); }; opt.dataFilter = iframeUploadFilter; } args = $.extend(opt, widget._getAJAXSettings(data), { url: opt.url }); args.skip_before_send = true; $.ajax(args); return false; } } }); $('body').on('submit', '.card-form', function() { $(this).setContentFieldsFromMap(); $(this).find('.card-content').attr('no-autosave', 'true'); return true; }); $('body').on('click', '.submitter', function() { return $(this).closest('form').submit(); }); $('body').on('click', '.renamer-updater', function() { return $(this).closest('form').find('#card_update_referencers').val('true'); }); $('body').on('submit', '.edit_name-view .card-form', function() { var confirmer; confirmer = $(this).find('.alert'); if (confirmer.is(':hidden')) { if ($(this).find('#referers').val() > 0) { $(this).find('.renamer-updater').show(); } confirmer.show('blind'); return false; } }); $('body').on('click', '.follow-updater', function() { return $(this).closest('form').find('#card_update_all_users').val('true'); }); $('body').on('submit', '.edit-view.SELF-Xfollow_default .card-form', function() { var confirmer; confirmer = $(this).find('.confirm_update_all-view'); if (confirmer.is(':hidden')) { $(this).find('.follow-updater').show(); confirmer.show('blind'); return false; } }); $('body').on('click', 'button.redirecter', function() { return window.location = $(this).attr('href'); }); if (!wagn.noDoubleClick) { $('body').on('dblclick', 'div', function(event) { var s, t; t = $(this); if (t.closest('.nodblclick')[0]) { return false; } if (t.closest('.card-header')[0]) { return false; } s = t.slot(); if (s.find('.card-editor')[0]) { return false; } if (!s.data('cardId')) { return false; } s.addClass('slotter'); s.attr('href', wagn.rootPath + '/card/edit/~' + s.data('cardId')); $.rails.handleRemote(s); return false; }); } $('body').on('submit', 'form.slotter', function(event) { var input, target; if ((target = $(this).attr('main-success')) && $(this).isMain()) { input = $(this).find('[name=success]'); if (input && !(input.val().match(/^REDIRECT/))) { return input.val((target === 'REDIRECT' ? target + ': ' + input.val() : target)); } } }); $('body').on('change', '.live-type-field', function() { $(this).data('params', $(this).closest('form').serialize()); return $(this).data('url', $(this).attr('href')); }); $('body').on('change', '.edit-type-field', function() { return $(this).closest('form').submit(); }); $('body').on('change', '.autosave .card-content', function() { var content_field; content_field = $(this); return setTimeout((function() { return content_field.autosave(); }), 500); }); $('body').on('mouseenter', '[hover_content]', function() { $(this).attr('hover_restore', $(this).html()); return $(this).html($(this).attr('hover_content')); }); $('body').on('mouseleave', '[hover_content]', function() { return $(this).html($(this).attr('hover_restore')); }); $('body').on('keyup', '.name-editor input', function() { var box, name; box = $(this); name = box.val(); return wagn.pingName(name, function(data) { var ed, leg, link, msg, qualifier, slot_id, status; if (box.val() !== name) { return null; } status = data['status']; if (status) { ed = box.parent(); leg = box.closest('fieldset').find('legend'); msg = leg.find('.name-messages'); if (!msg[0]) { msg = $('<span class="name-messages"></span>'); leg.append(msg); } ed.removeClass('real-name virtual-name known-name'); slot_id = box.slot().data('cardId'); if (status !== 'unknown' && !(slot_id && parseInt(slot_id) === data['id'])) { ed.addClass(status + '-name known-name'); link = qualifier = status === 'virtual' ? 'in virtual' : 'already in'; return msg.html('"<a href="' + wagn.rootPath + '/' + data['url_key'] + '">' + name + '</a>" ' + qualifier + ' use'); } else { return msg.html(''); } } }); }); return $('body').on('click', '.render-error-link', function(event) { var msg; msg = $(this).closest('.render-error').find('.render-error-message'); msg.show(); return event.preventDefault(); }); }); $(document).on("mobileinit", function() { return $.extend($.mobile, { autoInitializePage: false, ajaxEnabled: false }); }); newCaptcha = function(form) { var recapDiv, recapUri; recapUri = 'https://www.google.com/recaptcha/api/js/recaptcha_ajax.js'; recapDiv = $('<div class="recaptcha-box"></div>'); $(form).children().last().after(recapDiv); return $.getScript(recapUri, function() { return recapDiv.loadCaptcha(); }); }; snakeCase = function(str) { return str.replace(/([a-z])([A-Z])/g, function(match) { return match[0] + '_' + match[1].toLowerCase(); }); }; warn = function(stuff) { if (typeof console !== "undefined" && console !== null) { return console.log(stuff); } }; }).call(this);