/********************* Extensions, variables that need to be declared outside document.ready ************************************/ //makes the Contains-function case insensitive jQuery.expr[':'].Contains = function(a, i, m) { return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; }; //String function, self explanatory String.prototype.startsWith = function(str) { return this.match("^"+str)==str; }; //turns a form/collection into a key->value json object jQuery.fn.serializeObject = function(){ var o = {}; var a = this.serializeArray(); jQuery.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; var qtip_args_article = { position: { my: 'right top', at: 'center left', viewport: jQuery(window) }, style: { classes: 'ui-tooltip-shadow ui-tooltip-light ui-tooltip-480'} }; function tinyMCEInstance() { // In html mode! if( !tinyMCE.activeEditor || tinyMCE.activeEditor.isHidden() ) { return { getContent : function() { return jQuery('#tinyMCE').val(); }, setContent : function(content) { jQuery('#tinyMCE').val( content ); } } } else { return tinyMCE.activeEditor; } } /********************* END Extensions, variables that need to be declared outside document.ready ************************************/ jQuery(document).ready(function($) { $.ctrl = function(key, callback, args) { $(document).keydown(function(e) { if(!args) args=[]; // IE barks when args is null if(e.keyCode == key.charCodeAt(0) && (e.ctrlKey || e.metaKey)) { callback.apply(this, args); return false; } }); }; //keypresses in chrome if($.browser.safari) { $.ctrl('S', function() { if( $('.listitem.edited').length > 0 ) { var container = $('.listitem.edited').closest('.arlima-list-container'); if( $(container).hasClass('unsaved') ) $('.arlima-save-list', container).trigger('click'); } }); $.ctrl('P', function() { $('#arlima-toggle-preview').click(); }); $(document).keyup(function(e) { var key = e.keyCode ? e.keyCode : e.which; if (key == 27) { e.preventDefault(); $('#arlima-preview').hide(); } if (key == 80 && e.shiftKey && (e.ctrlKey || e.metaKey)) { $('#arlima-toggle-preview').click(); $('#arlima-preview-active-list').click(); } }); //firefox etc }else{ $(document).keypress(function(e) { var key = e.keyCode ? e.keyCode : e.which; if (key == 112 && (e.ctrlKey || e.metaKey)) { e.preventDefault(); $('#arlima-toggle-preview').click(); } if (key == 115 && (e.ctrlKey || e.metaKey)) { e.preventDefault(); if( $('.listitem.edited').length > 0 ) { var container = $('.listitem.edited').closest('.arlima-list-container'); if( $(container).hasClass('unsaved') ) $('.arlima-save-list', container).trigger('click'); } } if (key == 27) { e.preventDefault(); $('#arlima-preview').hide(); } }); } arlimaGetTemplates(); arlimaSetupUserPanel(); if(typeof loadArlimListOnLoad != 'undefined') { // todo: move this to a callback into getTemplates setTimeout(function() { arlimaBuildListWidget(loadArlimListOnLoad, $("#arlima-container-area")); }, 1000); } $('html').click(function(e) { $('.arlima-list-version-select').hide(); $('.arlima-list-version-info').show(); }); $('.fancybox').fancybox( { speedIn : 300, speedOut : 300, titlePosition : 'over' }); $('#arlima-article-image-scissors-popup').fancybox( { autoDimensions : true, speedIn : 300, speedOut : 300, titlePosition : 'over', onComplete : arlimaCompleteScissorsFancybox, onClosed : arlimaCloseScissorsFancybox, onStart : arlimaStartScissorsFancybox }); $('#arlima-edit-article-options-streamer-color').colourPicker({ ico: '', title: false }); window.onbeforeunload = function(){ if($('.unsaved').length > 0) return ArlimaJS.lang.unsaved; }; /* QTIP */ var qtip_args = { position: { my: 'left top', at: 'center right' }, style: { classes: 'ui-tooltip-tipsy ui-tooltip-blue'} }; $('[title].tooltip').qtip(qtip_args); $("#arlima-edit-article-title-fontsize-slider").slider({ value:18, min: 8, max: 100, slide: function( event, ui ) { $( "#arlima-edit-article-title-fontsize" ).val( ui.value ); arlimaUpdateListItem(); } }); $(".dragger").draggable({ helper:'clone', handle:'.handle', connectToSortable:'.arlima-list', revert:'invalid' }); // Refresh imported lists every 90 second setInterval(function() { $('.arlima-list.imported', '#arlima-container-area').each(function(idx, list) { // don't refresh if we're looking at the list var $list = $(this); if($list.find('.edited').length == 0) { arlimaRefreshList($list); } }); }, 90000); /** * Copies all data from one element to another * @param {jQuery} $newElement * @param {jQuery} $originalElement */ function copyArticleData($newElement, $originalElement) { $newElement.data( $originalElement.data() ); // don't forget to copy all data for child articles as well var $children = $newElement.find('ul li'); if($children.length > 0) { var $origChildren = $originalElement.find('ul li'); for(var i = ($children.length-1); i >= 0; i--) { $children.eq(i).data( $origChildren.eq(i).data() ); } } } function updateListWidgetVersionInfo($lists, $container, json) { $('.arlima-version-id', $lists).val(json.version.id); $('.arlima-list-version-info', $container).html('v ' + json.version.id); $('.arlima-list-version-info', $container).attr('title', json.versioninfo); $('.arlima-list-version-ddl', $container).html(''); $.each( json.versions, function( idx, version ) { $('.arlima-list-version-ddl', $container).append($("").val(version).text('v ' + version + ' ')); }); } $(document).on('init-list-container', '.arlima-list-container', function() { var $container = $(this); var $lists = $(".arlima-list:first:not(.imported)", $container); var $importedLists = $(".arlima-list.imported", $container); $container.resizable({ containment: 'parent' }); $container.draggable({ containment: 'parent', snap: true, handle: '.arlima-list-header' }); var listOptions = { items: 'li', listType: 'ul', maxLevels: 2, opacity: .6, tabSize: 30, tolerance: 'pointer', connectWith: ['.arlima-list:not(.imported)'], distance: 15, placeholder: 'arlima-listitem-placeholder', forcePlaceholderSize: true, toleranceElement: '> div', helper: function(e,$li) { if(e.ctrlKey || e.metaKey) { var $helper = $($li.clone().insertAfter($li)); copyArticleData($helper, $li); if($helper.hasClass('edited')) $helper.removeClass('edited'); $helper.effect("highlight", {}, 300); } return $li.clone(); }, receive: function(event, ui) { var $draggedItem = $(ui.item); var hasDragClass = $draggedItem.hasClass('dragger'); var hasUIDragClass = $draggedItem.hasClass('ui-draggable'); // coming from imported list if(hasDragClass || hasUIDragClass) { var itemClass = hasDragClass ? 'dragger':'ui-draggable'; var $newItem = $(this).find('.'+itemClass); var artdata = $draggedItem.data('article'); $newItem.data('article', artdata); $newItem.removeClass( itemClass ); // Update item title as long as it does not come from an imported list if(hasDragClass) $('.arlima-listitem-title', $newItem).html(artdata.title); // change in editor if(hasUIDragClass) { console.log('sdsd'); setTimeout(function() { $newItem.trigger('click'); }, 500); } } }, update: function(event, ui) { $(ui.item).effect("highlight", {}, 500); $container.addClass('unsaved'); $('.arlima-save-list', $container).show('normal'); arlimaUpdateListItem(); } }; $lists.nestedSortable(listOptions); $lists.disableSelection(); $importedLists.disableSelection(); $importedLists.find('li').draggable({ sender:'importedlist', helper : 'clone', handle:'.handle', connectToSortable:'.arlima-list', revert:'invalid', zIndex: 40, start: function(e, ui) { copyArticleData(ui.helper, $(e.currentTarget)); ui.helper.width($(e.currentTarget).width()); } }); $(".arlima-save-list", $container).click( function(e) { if($('.listitem.edited', $container).length > 0) { arlimaUpdateListItem(); } var $loader = $('.ajax-loader', $(this).parent()); $loader.show(); var articles = {}; var alid = $('.arlima-list-id', $lists).val(); var version = $('.arlima-version-id', $lists).val(); var data = { action: 'arlima_check_for_later_version', alid: alid, version: version, _ajax_nonce : ArlimaJS.arlimaNonce }; $.post(ajaxurl, data, function(json) { if(json) { if(!confirm(ArlimaJS.lang.laterVersion + ' \r\n ' + json.versioninfo + '\r\n' + ArlimaJS.lang.overWrite)) { $loader.hide(); return false; } } if($('.streamer-extra', $container).length > 1) { if(!confirm( ArlimaJS.lang.severalExtras + '\r\n' + ArlimaJS.lang.overWrite)) { $loader.hide(); return false; } } $(">li", $lists).each( function (i, item) { articles[i] = arlimaSerializeArticle( $(item) ); }); var data = { action: "arlima_save_list", alid: alid, articles: articles, _ajax_nonce : ArlimaJS.arlimaNonce }; $.post(ajaxurl, data, function(json) { updateListWidgetVersionInfo($lists, $container, json); $loader.hide(); $container.removeClass('unsaved'); $('.arlima-save-list', $container).hide('normal'); }, 'json'); }, 'json'); }); // http://www.razzed.com/2009/03/16/chrome-problems-window-focus-workaround/ var arlimaPreviewWindow = false; $(".arlima-preview-list", $container).click(function(e) { var previewpage = $('.arlima-list-previewpage', $lists).val(); if( !previewpage || previewpage == '' ) { alert('Den här listan har ingen preview-sida'); return false; } arlimaUpdateListItem(); var loader = $('.ajax-loader', $(this).parent()); $(loader).show(); var articles = {}; var alid = $('.arlima-list-id', $lists).val(); $(">li", $lists).each( function (i, item) { var article = arlimaSerializeArticle( $(item) ); articles[i] = article; }); var data = { action: "arlima_save_list", alid: alid, articles: articles, preview: true, _ajax_nonce : ArlimaJS.arlimaNonce }; if( arlimaPreviewWindow ) { arlimaPreviewWindow.close(); } $.post(ajaxurl, data, function(json) { $(loader).hide(); var url = ArlimaJS.baseurl + '/'; var binder = previewpage.indexOf('?') > -1 ? '&':'?'; url += previewpage == '/' ? (binder + ArlimaJS.preview_query_arg) : '' + previewpage + binder + ArlimaJS.preview_query_arg; arlimaPreviewWindow = window.open(url, 'arlima-window', 'toolbar=1,scrollbars=1' ); if(arlimaPreviewWindow) // may be blocked by browser arlimaPreviewWindow.focus(); }, 'json'); }); $(".arlima-list-version-ddl", $container).change( function(e) { arlimaRefreshList($lists, $(this).val()); $container.addClass('unsaved'); $('.arlima-save-list', $container).show('normal'); }); $(".arlima-list-container-remove", this).click( function(e) { e.preventDefault(); if($container.hasClass('unsaved')) { if(! confirm(ArlimaJS.lang.changesBeforeRemove)) { return false; } } $container.slideUp('fast', function() { $container.remove(); }); }); $(".arlima-refresh-list", this).click( function(e) { arlimaRefreshList($lists); arlimaRefreshList($importedLists); }); $('.arlima-list-version').click( function(e) { e.stopPropagation(); $('.arlima-list-version-info', this).hide(); $('.arlima-list-version-select', this).show(); }); }); $(document).on('click', '.arlima-list .listitem div', function (e) { var $listitem = $(this).parent('.listitem'); var $list = $(this).closest('.arlima-list'); var $editorBlocker = $('.teaser-editor-blocker'); var isImported = $list.hasClass('imported'); var $editor = $('#arlima-edit-article'); // Block edit of article teaser if(isImported && $editorBlocker.length == 0) { setTimeout(function() { var offset = $('#arlima-toplinks').offset(); $('
') .css({ position: 'absolute', top : offset.top +'px', left : offset.left +'px', background : 'rgba(255,255,255, .4)', height: $editor.outerHeight() +'px', width : $editor.outerWidth()+10, zIndex: 9999 }) .appendTo('body') .addClass('teaser-editor-blocker'); }, $editor.find('.inside').is(':visible') ? 0:400); } else if(isImported && $editorBlocker.length == 1) { setTimeout(function() { $editorBlocker.css('height', $editor.outerHeight() +'px'); }, 500); } else if(!isImported && $editorBlocker.length > 0) { $editorBlocker.remove(); } $('.listitem.edited').removeClass('edited'); $('.arlima-list-container.active').removeClass('active'); $listitem.addClass('edited'); $listitem.closest('.arlima-list-container').addClass('active'); arlimaResetEditForm(); var article = $listitem.data('article'); var editform = $("#arlima-edit-article-form"); var previewtemplate = $('.arlima-list-previewtemplate', $list).val(); if(!article.title_fontsize) article.title_fontsize = 24; if(article.post_id == 0) article.post_id = null; if(article.post_id) { $('#tinyMCE-add_media', editform).attr('href', 'media-upload.php?post_id=' + article.post_id + '&type=image&TB_iframe=1&send=true'); $('#arlima-article-connected-post', editform).html('' + article.post_id + ''); }else{ $('#tinyMCE-add_media', editform).attr('href', 'media-upload.php?type=image&TB_iframe=1&send=true'); $('#arlima-article-connected-post-change').hide(); $('#arlima-article-post_id').show(); } tinyMCEInstance().setContent(article.text); $.each(article, function(key, value) { $("[name='" + key + "']", editform).not(':radio').val(value); }); $('#arlima-edit-article-title-fontsize-slider').slider( "value", article.title_fontsize ); if(article.options) { $.each(article.options, function(key, value) { if( $("[name='options-" + key + "']", editform).length > 0 ) $("[name='options-" + key + "']", editform).val(value); }); if(article.options.streamer) $("[name='options-streamer']", editform).prop('checked', true); if(article.options.streamer_color) $('#arlima-edit-article-options-streamer-text div', editform).css('background', '#' + article.options.streamer_color); else $('#arlima-edit-article-options-streamer-text div', editform).css('background', '#000'); if(article.options.hiderelated) $("[name='options-hiderelated']", editform).prop('checked', true); } if(article.image_options) { arlimaUpdateMainImage( article.image_options ); }else{ arlimaUpdateMainImage( ); } if($(editform).parent('.inside').css('display') == 'none') $(editform).parent('.inside').slideDown('100'); arlimaSetStreamerFormState(); arlimaUpdatePreview(); }); $(document).on('click', '.arlima-listitem-remove', function(e) { e.stopPropagation(); var listitem = $(this).closest('.listitem'); if( !confirm(ArlimaJS.lang.wantToRemove + $('span', listitem).text() + ArlimaJS.lang.fromList) ) return; if( $(listitem).hasClass('edited') ) { $('#arlima-edit-article .inside').slideToggle(200); arlimaResetEditForm(); arlimaUpdateListItem(); } $(listitem).fadeOut('fast', function(){ var list = $(listitem).closest('.arlima-list'); var container = $(listitem).closest('.arlima-list-container'); $(container).addClass('unsaved'); $('.arlima-save-list', container).show('normal'); $(this).remove(); }); }); // meybe not needed $(document).on('mouseover mouseout', '.arlima-list:not(.imported) .listitem div', function (e) { var listitem = $(this).parent('li'); if(!e.shiftKey && !e.ctrlKey && !e.metaKey) return false; if ( e.type == "mouseover" ) { if(e.shiftKey) { $('#arlima-preview').show(0, function() { arlimaUpdatePreview(listitem); }); } } else { $('#arlima-preview').hide(0); } }); $('#arlima-edit-article-options-streamer-image-list img').click( function(e) { $("[name='options-streamer_image']").val($(this).attr('alt')); arlimaSetStreamerFormState(); arlimaUpdateListItem(); $.fancybox.close(); }); $('#arlima-edit-article-form').change( function(e) { if( $(e.target).attr('name') == 'image_align' || $(e.target).attr('id') == 'arlima-article-image-size' ) return false; arlimaSetStreamerFormState(); arlimaUpdateListItem(); }); $('#arlima-edit-article #arlima-edit-article-remove').click( function(e) { $('#arlima-edit-article .inside').slideToggle(200); arlimaResetEditForm(); arlimaUpdateListItem(); $('.listitem.edited').fadeOut('fast', function(){ $(this).remove(); }); }); $('#arlima-search-lists').keyup(function(e) { if (e.keyCode == '13') { e.preventDefault(); } var searchstring = $(this).val(); if(searchstring.length > 0) { $("#arlima-lists ul").show(0); $("#arlima-lists .arlima-list-link:Contains('" + searchstring + "')").show(0); $("#arlima-lists .arlima-list-link").not(":Contains('" + searchstring + "')").hide(0); }else{ $("#arlima-lists .arlima-list-link").hide(0); $("#arlima-lists ul").hide(0); } }); $('#arlima-edit-article-title-fontsize').blur(function() { $('#arlima-edit-article-title-fontsize-slider').slider( "value", $(this).val() ); }); $('#arlima-lists ul li').click(function(e) { $('#arlima-search-lists').val(''); $('#arlima-lists ul').children().hide(); var alid = $(this).attr('alid'); var div = $("#arlima-container-area"); arlimaBuildListWidget(alid, div); }); $("#arlima-add-list-btn").click( function() { var alid = $("#arlima-add-list-select").val(); var div = $("#arlima-container-area"); arlimaBuildListWidget(alid, div); }); $("#arlima-save-setup-btn").click( function() { var loader = $('#save-setup-loader'); $(loader).show(); var lists = {}; $('.arlima-list-container', '#arlima-container-area').each( function (i, item) { var alid = $('.arlima-list-id', item).val(); var list = {}; list.alid = alid; list.top = $(item).css('top'); list.left = $(item).css('left'); list.width = $(item).css('width'); list.height = $(item).css('height'); lists[i] = list; }); var data = { action: "arlima_save_list_setup", lists: lists, _ajax_nonce : ArlimaJS.arlimaNonce }; $.post(ajaxurl, data, function(html) { $(loader).hide(); }); }); $(".arlima-refresh-all-lists", this).click( function(e) { e.preventDefault(); $('.arlima-list', '#arlima-container-area').each(function(idx, list) { arlimaRefreshList(list); }); }); $('#arlima-posts-form').submit( function(e) { e.preventDefault(); arlimaGetPosts(0); }); $('.handlediv').click( function() { $(this).parent().find('.inside').slideToggle(200); }); $('#arlima-toggle-preview').click( function() { $('#arlima-preview').toggle(0, function() { arlimaUpdatePreview(); }); }); $('#arlima-article-image-options input').click( function(e) { arlimaUpdateMainImage(); arlimaUpdateListItem(); }); $('#arlima-article-image-options select').change( function(e) { arlimaUpdateMainImage(); arlimaUpdateListItem(); }); $('#arlima-article-image-remove').click( function(e) { arlimaDeleteMainImage(); arlimaUpdateListItem(); }); $('#arlima-article-image-disconnect').click( function(e) { e.preventDefault(); var data = { action: 'arlima_duplicate_image', attachid: $('#arlima-article-image-attach_id').val(), _ajax_nonce : ArlimaJS.arlimaNonce }; $.post(ajaxurl, data, function(json) { var args = {attach_id: json.attach_id, html: json.html, connected: 'false' }; arlimaUpdateMainImage( args ); arlimaUpdateListItem(); }, 'json'); }); $('#arlima-article-connected-post-change').click( function(e) { e.preventDefault(); $(this).hide(); $('#arlima-article-connected-post').html(''); $('#arlima-article-post_id').show().focus(); }); //$('#arlima-article-post_id').blur( function(e) { $('#arlima-article-post_id').bind( 'save', function(e) { e.preventDefault(); var postid = $(this).val(); if(postid == '') { $('#arlima-edit-article-url').val(''); return; } if(isNaN(postid)) { $(this).addClass('error'); return false; } var data = { action: 'arlima_get_post_url', postid: postid, _ajax_nonce : ArlimaJS.arlimaNonce }; $('#arlima-article-connected-post').html(''); $('#arlima-article-post_id').hide(); $.post(ajaxurl, data, function(json) { if(json.url) { $('#arlima-article-post_id').removeClass('error').hide(); $('#arlima-article-connected-post').html('' + postid + ''); $('#arlima-article-connected-post-change').show(); $('#arlima-edit-article-url').val(json.url); }else{ $('#arlima-article-connected-post').html(''); $('#arlima-article-post_id').addClass('error').show(); return false; } }, 'json'); }); $('#arlima-article-post_id').keypress(function(e) { var key = e.keyCode ? e.keyCode : e.which; if (key == 13) { e.preventDefault(); $(this).trigger('save'); return false; } }); $(document).on('click', '.arlima-get-posts-paging', function(e) { e.preventDefault(); arlimaGetPosts($(this).attr('alt')); }); //$('#arlima-article-attachments-browse').click(function(e) { $('#arlima-article-image').click(function(e) { e.preventDefault(); $('#arlima-article-attachments').html(''); var postid = $('#arlima-article-post_id').val() ; if( isNaN( postid ) || postid == '' ) { alert(ArlimaJS.lang.noImages+', '+ArlimaJS.lang.noConnection); return false; } var data = { action: 'arlima_get_attached_images', postid: postid, _ajax_nonce : ArlimaJS.arlimaNonce }; $.post(ajaxurl, data, function(json) { if( !json[0] ) { alert(ArlimaJS.lang.noImages); return false; } $.each(json, function(idx, img) { var thumb = $('
').addClass('arlima-article-attachment').html(img.thumb); $(thumb).click(function(e) { var args = { html : img.large, attach_id : img.attach_id, alignment : 'center', size : 'full' }; arlimaUpdateMainImage( args ); arlimaUpdateListItem(); $.fancybox.close(); }); $('#arlima-article-attachments').append(thumb); }); $.fancybox({ 'href' : '#arlima-article-attachments' }); }, 'json'); }); $('#arlima-save-active-list').click(function(e) { e.preventDefault(); if( $('.listitem.edited').length == 0 ) { alert(ArlimaJS.lang.noList); return false; } var container = $('.listitem.edited').closest('.arlima-list-container'); //arlimaUpdateListItem(); $('.arlima-save-list', container).trigger('click'); }); $('#arlima-preview-active-list').click(function(e) { e.preventDefault(); if( $('.listitem.edited').length == 0 ) { alert(ArlimaJS.lang.noList); return false; } var container = $('.listitem.edited').closest('.arlima-list-container'); //arlimaUpdateListItem(); $('.arlima-preview-list', container).trigger('click'); }); // Listen for scissors startup, and uncheck the aspect ratio checkbox document.addEventListener("DOMNodeInserted", function(event) { var node_id = $(event.target).attr('id')+""; if ( node_id.startsWith('scissorsCrop') ){ $('#'+ node_id +' input[type="checkbox"]').each( function( i, e ){ var aspect = e.id+""; if(aspect.startsWith('scissorsLockBox')){ $(e).prop("checked", false); } }); $('#'+ node_id +' div').each( function( i, e ){ var div = e.id+""; if ( div.startsWith('scissorsReir') ){ $('#'+ div).hide(); } }); // Attach ratio buttons var arlima_attach_id = $('#arlima-article-image-attach_id').val(); var ratio_ws = $('