var sankoreLang = {
display : "Display" ,
edit : "Edit" ,
short _desc : "Place the pictures in ascending order." ,
add : "Add new block" ,
enter : "Enter your text here ..."
} ;
//main function
function start ( ) {
$ ( "#display_text" ) . text ( sankoreLang . display ) ;
$ ( "#edit_text" ) . text ( sankoreLang . edit ) ;
if ( window . sankore ) {
if ( sankore . preference ( "odr_des_imgs" , "" ) ) {
var data = jQuery . parseJSON ( sankore . preference ( "odr_des_imgs" , "" ) ) ;
importData ( data ) ;
} else {
showExample ( ) ;
}
}
else
showExample ( ) ;
//events
if ( window . widget ) {
window . widget . onleave = function ( ) {
exportData ( ) ;
}
}
$ ( "#display, #edit" ) . click ( function ( event ) {
if ( this . id == "display" ) {
if ( ! $ ( this ) . hasClass ( "selected" ) ) {
sankore . enableDropOnWidget ( false ) ;
$ ( this ) . addClass ( "selected" ) ;
$ ( "#display_img" ) . removeClass ( "red_point" ) . addClass ( "green_point" ) ;
$ ( "#edit_img" ) . removeClass ( "green_point" ) . addClass ( "red_point" ) ;
$ ( "#edit" ) . removeClass ( "selected" ) ;
$ ( ".add_block" ) . remove ( ) ;
$ ( ".cont" ) . each ( function ( ) {
var container = $ ( this ) ;
var tmp _i = 0 ;
var tmp _right = "" ;
var tmp _array = [ ] ;
container . find ( ".text_cont" ) . removeAttr ( "contenteditable" ) ;
container . find ( ".add_img" ) . remove ( ) ;
container . find ( ".close_cont" ) . remove ( ) ;
container . find ( ".img_block" ) . each ( function ( ) {
if ( $ ( this ) . find ( "img" ) . attr ( "src" ) != "img/drop_img.png" ) {
$ ( this ) . find ( ".close_img" ) . remove ( ) ;
$ ( this ) . find ( ".clear_img" ) . remove ( ) ;
$ ( this ) . find ( ".numb_img" ) . remove ( ) ;
$ ( this ) . removeAttr ( "ondragenter" )
. removeAttr ( "ondragleave" )
. removeAttr ( "ondragover" )
. removeAttr ( "ondrop" ) ;
$ ( this ) . find ( "input" ) . val ( ++ tmp _i )
tmp _right += tmp _i + "*" ;
} else
$ ( this ) . remove ( ) ;
} ) ;
container . find ( ".imgs_cont>input" ) . val ( tmp _right ) ;
container . find ( ".img_block" ) . each ( function ( ) {
$ ( this ) . css ( "float" , "" ) ;
tmp _array . push ( $ ( this ) ) ;
} ) ;
tmp _array = shuffle ( tmp _array ) ;
for ( var i = 0 ; i < tmp _array . length ; i ++ )
tmp _array [ i ] . appendTo ( container . find ( ".imgs_cont" ) ) ;
container . find ( ".imgs_cont" ) . sortable ( {
update : checkResult
} ) ;
} ) ;
}
} else {
if ( ! $ ( this ) . hasClass ( "selected" ) ) {
sankore . enableDropOnWidget ( true ) ;
$ ( this ) . addClass ( "selected" ) ;
$ ( "#edit_img" ) . removeClass ( "red_point" ) . addClass ( "green_point" ) ;
$ ( "#display_img" ) . removeClass ( "green_point" ) . addClass ( "red_point" ) ;
$ ( "#display" ) . removeClass ( "selected" ) ;
$ ( ".cont" ) . each ( function ( ) {
var container = $ ( this ) ;
$ ( "<div class='close_cont'>" ) . appendTo ( container ) ;
container . find ( ".text_cont" ) . attr ( "contenteditable" , "true" ) ;
//container.find(".imgs_cont").sortable("destroy");
container . find ( ".imgs_cont" ) . css ( "background-color" , "white" ) ;
var add _img = $ ( "<div class='add_img'>" ) ;
container . find ( ".img_block" ) . each ( function ( ) {
$ ( this ) . attr ( "ondragenter" , "return false;" )
. attr ( "ondragleave" , "$(this).css(\"background-color\",\"white\"); return false;" )
. attr ( "ondragover" , "$(this).css(\"background-color\",\"#ccc\"); return false;" )
. attr ( "ondrop" , "$(this).css(\"background-color\",\"white\"); return onDropTarget(this,event);" )
//.css("float","left");
$ ( "<div class='close_img'>" ) . appendTo ( $ ( this ) ) ;
$ ( "<div class='clear_img'>" ) . appendTo ( $ ( this ) ) ;
$ ( "<div class='numb_img'>" + $ ( this ) . find ( "input" ) . val ( ) + "</div>" ) . appendTo ( $ ( this ) ) ;
} ) ;
rightOrder ( container . find ( ".imgs_cont" ) ) ;
container . find ( ".imgs_cont" ) . append ( add _img )
} ) ;
// $(".img_block").css("overflow", "auto");
// setTimeout(function(){
// $(".img_block").css("overflow", "").width(121);
// setTimeout(function(){
// $(".img_block").width(120);
// }, 1);
// }, 1);
$ ( "<div class='add_block'>" + sankoreLang . add + "</div>" ) . appendTo ( "body" ) ;
}
}
} ) ;
//add new block
$ ( ".add_block" ) . live ( "click" , function ( ) {
addContainer ( ) ;
} ) ;
//adding new img
$ ( ".add_img" ) . live ( "click" , function ( ) {
addImgBlock ( $ ( this ) ) ;
} ) ;
//deleting a block
$ ( ".close_cont" ) . live ( "click" , function ( ) {
$ ( this ) . parent ( ) . remove ( ) ;
refreshBlockNumbers ( ) ;
} ) ;
//deleting the img block
$ ( ".close_img" ) . live ( "click" , function ( ) {
var i = 0 ;
var tmp _obj = $ ( this ) . parent ( ) . parent ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
if ( tmp _obj . find ( ".img_block" ) . size ( ) > 0 ) {
refreshImgNumbers ( tmp _obj ) ;
}
} ) ;
// //turning an image
// $(".fill_img").live("click",function(){
// var tmp_back = $(this).css("background-image");
// var lclImg = $(this).parent().find("img");
// if(tmp_back.match(/fill_hor/)){
// lclImg.removeAttr("height").attr("width", "120");
// $(this).css("background-image","url(img/fill_vert.png)");
// }
// else{
// lclImg.removeAttr("width").attr("height", "120");
// $(this).css("background-image","url(img/fill_hor.png)");
// }
// });
//cleaning an image
$ ( ".clear_img" ) . live ( "click" , function ( ) {
//$(this).parent().find(".fill_img").remove();
$ ( this ) . parent ( ) . find ( "img" ) . attr ( "src" , "img/drop_img.png" ) ;
} ) ;
}
//export
function exportData ( ) {
var array _to _export = [ ] ;
if ( $ ( "#edit" ) . hasClass ( "selected" ) ) {
$ ( ".cont" ) . each ( function ( ) {
var container = $ ( this ) ;
var tmp _right = "" ;
var tmp _i = 0 ;
container . find ( ".img_block" ) . each ( function ( ) {
if ( $ ( this ) . html ( ) . match ( /<img/ ) ) {
$ ( this ) . find ( "input" ) . val ( ++ tmp _i )
tmp _right += tmp _i + "*" ;
}
} ) ;
container . find ( ".imgs_cont>input" ) . val ( tmp _right ) ;
} ) ;
}
$ ( ".cont" ) . each ( function ( ) {
var cont _obj = new Object ( ) ;
cont _obj . text = $ ( this ) . find ( ".text_cont" ) . text ( ) ;
cont _obj . right = $ ( this ) . find ( ".imgs_cont>input" ) . val ( ) ;
cont _obj . imgs = [ ] ;
$ ( this ) . find ( ".img_block" ) . each ( function ( ) {
var img _obj = new Object ( ) ;
img _obj . value = $ ( this ) . find ( "input" ) . val ( ) ;
img _obj . link = $ ( this ) . find ( "img" ) . attr ( "src" ) ;
img _obj . ht = $ ( this ) . find ( "img" ) . height ( ) ;
img _obj . wd = $ ( this ) . find ( "img" ) . width ( ) ;
cont _obj . imgs . push ( img _obj ) ;
} ) ;
array _to _export . push ( cont _obj ) ;
} ) ;
//console.log(JSON.stringify(array_to_import));
//alert(JSON.stringify(array_to_export))
sankore . setPreference ( "odr_des_imgs" , JSON . stringify ( array _to _export ) ) ;
}
//import
function importData ( data ) {
var tmp = 0 ;
for ( var i in data ) {
var tmp _array = [ ] ;
var container = $ ( "<div class='cont'>" ) ;
var sub _container = $ ( "<div class='sub_cont'>" ) . appendTo ( container ) ;
var imgs _container = $ ( "<div class='imgs_cont'>" ) . appendTo ( container ) ;
var number = $ ( "<div class='number_cont'>" + ( ++ tmp ) + "</div>" ) . appendTo ( sub _container ) ;
var text = $ ( "<div class='text_cont'>" + data [ i ] . text + "</div>" ) . appendTo ( sub _container ) ;
$ ( "<input type='hidden' value='" + data [ i ] . right + "'/>" ) . appendTo ( imgs _container ) ;
for ( var j in data [ i ] . imgs ) {
var img _block = $ ( "<div class='img_block' style='text-align: center;'>" ) ;
var img = $ ( "<img src='" + data [ i ] . imgs [ j ] . link + "' style='display: inline;'>" ) ;
img . height ( data [ i ] . imgs [ j ] . ht ) . width ( data [ i ] . imgs [ j ] . wd ) ;
if ( ( 120 - data [ i ] . imgs [ j ] . ht ) > 0 )
img . css ( "margin" , ( 120 - data [ i ] . imgs [ j ] . ht ) / 2 + "px 0" ) ;
var hidden _input = $ ( "<input type='hidden'>" ) . val ( data [ i ] . imgs [ j ] . value ) ;
img _block . append ( hidden _input ) . append ( img ) ;
tmp _array . push ( img _block ) ;
}
tmp _array = shuffle ( tmp _array ) ;
for ( j = 0 ; j < tmp _array . length ; j ++ )
tmp _array [ j ] . appendTo ( imgs _container ) ;
imgs _container . sortable ( {
update : checkResult
} ) ;
container . appendTo ( "body" ) ;
}
}
//example
function showExample ( ) {
var tmp _array = [ ] ;
var container = $ ( "<div class='cont'>" ) ;
var sub _container = $ ( "<div class='sub_cont'>" ) . appendTo ( container ) ;
var imgs _container = $ ( "<div class='imgs_cont'>" ) . appendTo ( container ) ;
var number = $ ( "<div class='number_cont'>1</div>" ) . appendTo ( sub _container ) ;
var text = $ ( "<div class='text_cont'>" + sankoreLang . short _desc + "</div>" ) . appendTo ( sub _container ) ;
$ ( "<input type='hidden' value='1*2*3*4*5*'/>" ) . appendTo ( imgs _container ) ;
var img1 = $ ( "<div class='img_block' style='text-align: center;'></div>" ) ;
$ ( "<input type='hidden' value='1'/>" ) . appendTo ( img1 ) ;
$ ( "<img src=\"objects/0.gif\" style=\"display: inline;\" height=\"120\"/>" ) . appendTo ( img1 ) ;
var img2 = $ ( "<div class='img_block' style='text-align: center;'></div>" ) ;
$ ( "<input type='hidden' value='2'/>" ) . appendTo ( img2 ) ;
$ ( "<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>" ) . appendTo ( img2 ) ;
var img3 = $ ( "<div class='img_block' style='text-align: center;'></div>" ) ;
$ ( "<input type='hidden' value='3'/>" ) . appendTo ( img3 ) ;
$ ( "<img src=\"objects/2.gif\" style=\"display: inline;\" height=\"120\"/>" ) . appendTo ( img3 ) ;
var img4 = $ ( "<div class='img_block' style='text-align: center;'></div>" ) ;
$ ( "<input type='hidden' value='4'/>" ) . appendTo ( img4 ) ;
$ ( "<img src=\"objects/3.gif\" style=\"display: inline;\" height=\"120\"/>" ) . appendTo ( img4 ) ;
var img5 = $ ( "<div class='img_block' style='text-align: center;'></div>" ) ;
$ ( "<input type='hidden' value='5'/>" ) . appendTo ( img5 ) ;
$ ( "<img src=\"objects/4.gif\" style=\"display: inline;\" height=\"120\"/>" ) . appendTo ( img5 ) ;
tmp _array . push ( img1 , img2 , img3 , img4 , img5 ) ;
tmp _array = shuffle ( tmp _array ) ;
for ( var i = 0 ; i < tmp _array . length ; i ++ )
tmp _array [ i ] . appendTo ( imgs _container ) ;
imgs _container . sortable ( {
update : checkResult
} ) ;
container . appendTo ( "body" )
}
//check result
function checkResult ( event )
{
if ( $ ( "#display" ) . hasClass ( "selected" ) ) {
var str = "" ;
var right _str = $ ( event . target ) . find ( "input" ) . val ( ) ;
$ ( event . target ) . find ( ".img_block" ) . each ( function ( ) {
str += $ ( this ) . find ( "input" ) . val ( ) + "*" ;
} ) ;
if ( str == right _str )
$ ( event . target ) . css ( "background-color" , "#9f9" ) ;
} else {
refreshImgNumbers ( $ ( event . target ) ) ;
}
}
//add new container
function addContainer ( ) {
var container = $ ( "<div class='cont'>" ) ;
var sub _container = $ ( "<div class='sub_cont'>" ) . appendTo ( container ) ;
var imgs _container = $ ( "<div class='imgs_cont'>" ) . appendTo ( container ) ;
var close = $ ( "<div class='close_cont'>" ) . appendTo ( container ) ;
var number = $ ( "<div class='number_cont'>" + ( $ ( ".cont" ) . size ( ) + 1 ) + "</div>" ) . appendTo ( sub _container ) ;
var text = $ ( "<div class='text_cont' contenteditable>" + sankoreLang . enter + "</div>" ) . appendTo ( sub _container ) ;
$ ( "<input type='hidden' value='1*2*3*4*5*'/>" ) . appendTo ( imgs _container ) ;
var add _img = $ ( "<div class='add_img'>" ) . appendTo ( imgs _container ) ;
container . insertBefore ( $ ( ".add_block" ) ) ;
}
//add new img block
function addImgBlock ( dest ) {
var img _block = $ ( "<div class='img_block' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"white\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"white\"); return onDropTarget(this,event);' style='text-align: center;'></div>" ) . insertBefore ( dest ) ;
var tmp _counter = dest . parent ( ) . find ( ".img_block" ) . size ( ) ;
$ ( "<div class='close_img'>" ) . appendTo ( img _block ) ;
$ ( "<div class='clear_img'>" ) . appendTo ( img _block ) ;
$ ( "<div class='numb_img'>" + tmp _counter + "</div>" ) . appendTo ( img _block ) ;
$ ( "<input type='hidden' value='" + tmp _counter + "'/>" ) . appendTo ( img _block ) ;
$ ( "<img src='img/drop_img.png' height='120'/>" ) . appendTo ( img _block ) ;
}
function refreshBlockNumbers ( ) {
var i = 0 ;
$ ( ".cont" ) . each ( function ( ) {
$ ( this ) . find ( ".number_cont" ) . text ( ++ i ) ;
} )
}
//shuffles an array
function shuffle ( arr )
{
var pos , tmp ;
for ( var i = 0 ; i < arr . length ; i ++ )
{
pos = Math . round ( Math . random ( ) * ( arr . length - 1 ) ) ;
tmp = arr [ pos ] ;
arr [ pos ] = arr [ i ] ;
arr [ i ] = tmp ;
}
return arr ;
}
//regulation the images in right order
function rightOrder ( source ) {
var tmp _arr = [ ] ;
var tmp _var ;
source . find ( ".img_block" ) . each ( function ( ) {
tmp _arr . push ( $ ( this ) ) ;
$ ( this ) . remove ( ) ;
} ) ;
for ( var i = 0 ; i < tmp _arr . length ; i ++ )
for ( var j = 0 ; j < tmp _arr . length - 1 ; j ++ ) {
if ( tmp _arr [ j ] . find ( "input" ) . val ( ) > tmp _arr [ j + 1 ] . find ( "input" ) . val ( ) ) {
tmp _var = tmp _arr [ j ] ;
tmp _arr [ j ] = tmp _arr [ j + 1 ] ;
tmp _arr [ j + 1 ] = tmp _var ;
}
}
for ( i in tmp _arr )
source . append ( tmp _arr [ i ] ) ;
}
//refresh the numbers of the images
function refreshImgNumbers ( source ) {
var tmp = 1 ;
source . find ( ".img_block" ) . each ( function ( ) {
$ ( this ) . find ( "input" ) . val ( tmp ) ;
$ ( this ) . find ( ".numb_img" ) . text ( tmp ) ;
tmp ++ ;
} ) ;
}
function stringToXML ( text ) {
if ( window . ActiveXObject ) {
var doc = new ActiveXObject ( 'Microsoft.XMLDOM' ) ;
doc . async = 'false' ;
doc . loadXML ( text ) ;
} else {
var parser = new DOMParser ( ) ;
doc = parser . parseFromString ( text , 'text/xml' ) ;
}
return doc ;
}
function onDropTarget ( obj , event ) {
$ ( obj ) . find ( "img" ) . remove ( ) ;
//alert(tmp_img.width() + " | " + tmp_img.height() + " | " + tmp_img.attr("src"));
if ( event . dataTransfer ) {
var format = "text/plain" ;
var textData = event . dataTransfer . getData ( format ) ;
if ( ! textData ) {
alert ( ":(" ) ;
}
textData = stringToXML ( textData ) ;
var tmp = textData . getElementsByTagName ( "path" ) [ 0 ] . firstChild . textContent ;
tmp = tmp . substr ( 1 , tmp . length ) ;
//alert(textData.getElementsByTagName("type")[0].firstChild.textContent + " | " + textData.getElementsByTagName("path")[0].firstChild.textContent);
var tmp _img = $ ( "<img/>" ) . attr ( "src" , tmp ) ;
//alert(1)
//alert(tmp_img.width() + " | " + tmp_img.height() + " | " + tmp_img.attr("src"));
//$("#dnd_1").html(textData);
//tmp_img.css("display", "none");
$ ( obj ) . append ( tmp _img ) ;
//alert(tmp_img.width() + " | " + tmp_img.height())
setTimeout ( function ( ) {
if ( tmp _img . height ( ) >= tmp _img . width ( ) )
tmp _img . attr ( "height" , "120" ) ;
else {
tmp _img . attr ( "width" , "120" ) ;
tmp _img . css ( "margin" , ( 120 - tmp _img . height ( ) ) / 2 + "px 0" ) ;
}
} , 6 )
//alert(tmp_img.width() + " | " + tmp_img.height())
// $(".img_block").css("overflow", "auto");
// setTimeout(function(){
// $(".img_block").css("overflow", "").width(121);
// setTimeout(function(){
// $(".img_block").width(120);
// }, 1);
// }, 1);
}
else {
alert ( "Your browser does not support the dataTransfer object." ) ;
}
if ( event . stopPropagation ) {
event . stopPropagation ( ) ;
}
else {
event . cancelBubble = true ;
}
return false ;
}