ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * @fileoverview function used for index manipulation pages * @name Table Structure * * @requires jQuery * @requires jQueryUI * @required js/functions.js */ /* global fulltextIndexes:writable, indexes:writable, primaryIndexes:writable, spatialIndexes:writable, uniqueIndexes:writable */ // js/functions.js var Indexes = {}; /** * Returns the array of indexes based on the index choice * * @param indexChoice index choice */ Indexes.getIndexArray = function (indexChoice) { var sourceArray = null; switch (indexChoice.toLowerCase()) { case 'primary': sourceArray = primaryIndexes; break; case 'unique': sourceArray = uniqueIndexes; break; case 'index': sourceArray = indexes; break; case 'fulltext': sourceArray = fulltextIndexes; break; case 'spatial': sourceArray = spatialIndexes; break; default: return null; } return sourceArray; }; /** * Hides/shows the inputs and submits appropriately depending * on whether the index type chosen is 'SPATIAL' or not. */ Indexes.checkIndexType = function () { /** * @var Object Dropdown to select the index choice. */ var $selectIndexChoice = $('#select_index_choice'); /** * @var Object Dropdown to select the index type. */ var $selectIndexType = $('#select_index_type'); /** * @var Object Table header for the size column. */ var $sizeHeader = $('#index_columns').find('thead tr th:nth-child(2)'); /** * @var Object Inputs to specify the columns for the index. */ var $columnInputs = $('select[name="index[columns][names][]"]'); /** * @var Object Inputs to specify sizes for columns of the index. */ var $sizeInputs = $('input[name="index[columns][sub_parts][]"]'); /** * @var Object Footer containg the controllers to add more columns */ var $addMore = $('#index_frm').find('.add_more'); if ($selectIndexChoice.val() === 'SPATIAL') { // Disable and hide the size column $sizeHeader.hide(); $sizeInputs.each(function () { $(this) .prop('disabled', true) .parent('td').hide(); }); // Disable and hide the columns of the index other than the first one var initial = true; $columnInputs.each(function () { var $columnInput = $(this); if (! initial) { $columnInput .prop('disabled', true) .parent('td').hide(); } else { initial = false; } }); // Hide controllers to add more columns $addMore.hide(); } else { // Enable and show the size column $sizeHeader.show(); $sizeInputs.each(function () { $(this) .prop('disabled', false) .parent('td').show(); }); // Enable and show the columns of the index $columnInputs.each(function () { $(this) .prop('disabled', false) .parent('td').show(); }); // Show controllers to add more columns $addMore.show(); } if ($selectIndexChoice.val() === 'SPATIAL' || $selectIndexChoice.val() === 'FULLTEXT') { $selectIndexType.val('').prop('disabled', true); } else { $selectIndexType.prop('disabled', false); } }; /** * Sets current index information into form parameters. * * @param array source_array Array containing index columns * @param string index_choice Choice of index * * @return void */ Indexes.setIndexFormParameters = function (sourceArray, indexChoice) { if (indexChoice === 'index') { $('input[name="indexes"]').val(JSON.stringify(sourceArray)); } else { $('input[name="' + indexChoice + '_indexes"]').val(JSON.stringify(sourceArray)); } }; /** * Removes a column from an Index. * * @param string col_index Index of column in form * * @return void */ Indexes.removeColumnFromIndex = function (colIndex) { // Get previous index details. var previousIndex = $('select[name="field_key[' + colIndex + ']"]') .attr('data-index'); if (previousIndex.length) { previousIndex = previousIndex.split(','); var sourceArray = Indexes.getIndexArray(previousIndex[0]); if (sourceArray === null) { return; } // Remove column from index array. var sourceLength = sourceArray[previousIndex[1]].columns.length; for (var i = 0; i < sourceLength; i++) { if (sourceArray[previousIndex[1]].columns[i].col_index === colIndex) { sourceArray[previousIndex[1]].columns.splice(i, 1); } } // Remove index completely if no columns left. if (sourceArray[previousIndex[1]].columns.length === 0) { sourceArray.splice(previousIndex[1], 1); } // Update current index details. $('select[name="field_key[' + colIndex + ']"]').attr('data-index', ''); // Update form index parameters. Indexes.setIndexFormParameters(sourceArray, previousIndex[0].toLowerCase()); } }; /** * Adds a column to an Index. * * @param array source_array Array holding corresponding indexes * @param string array_index Index of an INDEX in array * @param string index_choice Choice of Index * @param string col_index Index of column on form * * @return void */ Indexes.addColumnToIndex = function (sourceArray, arrayIndex, indexChoice, colIndex) { if (colIndex >= 0) { // Remove column from other indexes (if any). Indexes.removeColumnFromIndex(colIndex); } var indexName = $('input[name="index[Key_name]"]').val(); var indexComment = $('input[name="index[Index_comment]"]').val(); var keyBlockSize = $('input[name="index[Key_block_size]"]').val(); var parser = $('input[name="index[Parser]"]').val(); var indexType = $('select[name="index[Index_type]"]').val(); var columns = []; $('#index_columns').find('tbody').find('tr').each(function () { // Get columns in particular order. var colIndex = $(this).find('select[name="index[columns][names][]"]').val(); var size = $(this).find('input[name="index[columns][sub_parts][]"]').val(); columns.push({ 'col_index': colIndex, 'size': size }); }); // Update or create an index. sourceArray[arrayIndex] = { 'Key_name': indexName, 'Index_comment': indexComment, 'Index_choice': indexChoice.toUpperCase(), 'Key_block_size': keyBlockSize, 'Parser': parser, 'Index_type': indexType, 'columns': columns }; // Display index name (or column list) var displayName = indexName; if (displayName === '') { var columnNames = []; $.each(columns, function () { columnNames.push($('input[name="field_name[' + this.col_index + ']"]').val()); }); displayName = '[' + columnNames.join(', ') + ']'; } $.each(columns, function () { var id = 'index_name_' + this.col_index + '_8'; var $name = $('#' + id); if ($name.length === 0) { $name = $(''); $name.insertAfter($('select[name="field_key[' + this.col_index + ']"]')); } var $text = $('').text(displayName); $name.html($text); }); if (colIndex >= 0) { // Update index details on form. $('select[name="field_key[' + colIndex + ']"]') .attr('data-index', indexChoice + ',' + arrayIndex); } Indexes.setIndexFormParameters(sourceArray, indexChoice.toLowerCase()); }; /** * Get choices list for a column to create a composite index with. * * @param string index_choice Choice of index * @param array source_array Array hodling columns for particular index * * @return jQuery Object */ Indexes.getCompositeIndexList = function (sourceArray, colIndex) { // Remove any previous list. if ($('#composite_index_list').length) { $('#composite_index_list').remove(); } // Html list. var $compositeIndexList = $( '
    ' + '
    ' + Messages.strCompositeWith + '
    ' + '
' ); // Add each column to list available for composite index. var sourceLength = sourceArray.length; var alreadyPresent = false; for (var i = 0; i < sourceLength; i++) { var subArrayLen = sourceArray[i].columns.length; var columnNames = []; for (var j = 0; j < subArrayLen; j++) { columnNames.push( $('input[name="field_name[' + sourceArray[i].columns[j].col_index + ']"]').val() ); if (colIndex === sourceArray[i].columns[j].col_index) { alreadyPresent = true; } } $compositeIndexList.append( '
  • ' + '' + '
  • ' ); } return $compositeIndexList; }; /** * Shows 'Add Index' dialog. * * @param array source_array Array holding particluar index * @param string array_index Index of an INDEX in array * @param array target_columns Columns for an INDEX * @param string col_index Index of column on form * @param object index Index detail object * @param bool showDialog Whether to show index creation dialog or not * * @return void */ Indexes.showAddIndexDialog = function (sourceArray, arrayIndex, targetColumns, colIndex, index, showDialog) { var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; // Prepare post-data. var $table = $('input[name="table"]'); var table = $table.length > 0 ? $table.val() : ''; var postData = { 'server': CommonParams.get('server'), 'db': $('input[name="db"]').val(), 'table': table, 'ajax_request': 1, 'create_edit_table': 1, 'index': index }; var columns = {}; for (var i = 0; i < targetColumns.length; i++) { var columnName = $('input[name="field_name[' + targetColumns[i] + ']"]').val(); var columnType = $('select[name="field_type[' + targetColumns[i] + ']"]').val().toLowerCase(); columns[columnName] = [columnType, targetColumns[i]]; } postData.columns = JSON.stringify(columns); var buttonOptions = {}; buttonOptions[Messages.strGo] = function () { var isMissingValue = false; $('select[name="index[columns][names][]"]').each(function () { if ($(this).val() === '') { isMissingValue = true; } }); if (! isMissingValue) { Indexes.addColumnToIndex( sourceArray, arrayIndex, index.Index_choice, colIndex ); } else { Functions.ajaxShowMessage( '
    ' + Messages.strMissingColumn + '
    ', false ); return false; } $(this).dialog('close'); }; buttonOptions[Messages.strCancel] = function () { if (colIndex >= 0) { // Handle state on 'Cancel'. var $selectList = $('select[name="field_key[' + colIndex + ']"]'); if (! $selectList.attr('data-index').length) { $selectList.find('option[value*="none"]').attr('selected', 'selected'); } else { var previousIndex = $selectList.attr('data-index').split(','); $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]') .attr('selected', 'selected'); } } $(this).dialog('close'); }; var $msgbox = Functions.ajaxShowMessage(); $.post('tbl_indexes.php', postData, function (data) { if (data.success === false) { // in the case of an error, show the error message returned. Functions.ajaxShowMessage(data.error, false); } else { Functions.ajaxRemoveMessage($msgbox); var $div = $('
    '); if (showDialogLocal) { // Show dialog if the request was successful if ($('#addIndex').length > 0) { $('#addIndex').remove(); } $div .append(data.message) .dialog({ title: Messages.strAddIndex, width: 450, minHeight: 250, open: function () { Functions.checkIndexName('index_frm'); Functions.showHints($div); Functions.initSlider(); $('#index_columns').find('td').each(function () { $(this).css('width', $(this).width() + 'px'); }); $('#index_columns').find('tbody').sortable({ axis: 'y', containment: $('#index_columns').find('tbody'), tolerance: 'pointer' }); // We dont need the slider at this moment. $(this).find('fieldset.tblFooters').remove(); }, modal: true, buttons: buttonOptions, close: function () { $(this).remove(); } }); } else { $div .append(data.message); $div.css({ 'display' : 'none' }); $div.appendTo($('body')); $div.attr({ 'id' : 'addIndex' }); var isMissingValue = false; $('select[name="index[columns][names][]"]').each(function () { if ($(this).val() === '') { isMissingValue = true; } }); if (! isMissingValue) { Indexes.addColumnToIndex( sourceArray, arrayIndex, index.Index_choice, colIndex ); } else { Functions.ajaxShowMessage( '
    ' + Messages.strMissingColumn + '
    ', false ); return false; } } } }); }; /** * Creates a advanced index type selection dialog. * * @param array source_array Array holding a particular type of indexes * @param string index_choice Choice of index * @param string col_index Index of new column on form * * @return void */ Indexes.indexTypeSelectionDialog = function (sourceArray, indexChoice, colIndex) { var $singleColumnRadio = $('' + ''); var $compositeIndexRadio = $('' + ''); var $dialogContent = $('
    '); $dialogContent.append('' + indexChoice.toUpperCase() + ''); // For UNIQUE/INDEX type, show choice for single-column and composite index. $dialogContent.append($singleColumnRadio); $dialogContent.append($compositeIndexRadio); var buttonOptions = {}; // 'OK' operation. buttonOptions[Messages.strGo] = function () { if ($('#single_column').is(':checked')) { var index = { 'Key_name': (indexChoice === 'primary' ? 'PRIMARY' : ''), 'Index_choice': indexChoice.toUpperCase() }; Indexes.showAddIndexDialog(sourceArray, (sourceArray.length), [colIndex], colIndex, index); } if ($('#composite_index').is(':checked')) { if ($('input[name="composite_with"]').length !== 0 && $('input[name="composite_with"]:checked').length === 0 ) { Functions.ajaxShowMessage( '
    ' + Messages.strFormEmpty + '
    ', false ); return false; } var arrayIndex = $('input[name="composite_with"]:checked').val(); var sourceLength = sourceArray[arrayIndex].columns.length; var targetColumns = []; for (var i = 0; i < sourceLength; i++) { targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); } targetColumns.push(colIndex); Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, sourceArray[arrayIndex]); } $(this).remove(); }; buttonOptions[Messages.strCancel] = function () { // Handle state on 'Cancel'. var $selectList = $('select[name="field_key[' + colIndex + ']"]'); if (! $selectList.attr('data-index').length) { $selectList.find('option[value*="none"]').attr('selected', 'selected'); } else { var previousIndex = $selectList.attr('data-index').split(','); $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]') .attr('selected', 'selected'); } $(this).remove(); }; $('
    ').append($dialogContent).dialog({ minWidth: 525, minHeight: 200, modal: true, title: Messages.strAddIndex, resizable: false, buttons: buttonOptions, open: function () { $('#composite_index').on('change', function () { if ($(this).is(':checked')) { $dialogContent.append(Indexes.getCompositeIndexList(sourceArray, colIndex)); } }); $('#single_column').on('change', function () { if ($(this).is(':checked')) { if ($('#composite_index_list').length) { $('#composite_index_list').remove(); } } }); }, close: function () { $('#composite_index').off('change'); $('#single_column').off('change'); $(this).remove(); } }); }; /** * Unbind all event handlers before tearing down a page */ AJAX.registerTeardown('indexes.js', function () { $(document).off('click', '#save_index_frm'); $(document).off('click', '#preview_index_frm'); $(document).off('change', '#select_index_choice'); $(document).off('click', 'a.drop_primary_key_index_anchor.ajax'); $(document).off('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax'); $(document).off('click', '#index_frm input[type=submit]'); $('body').off('change', 'select[name*="field_key"]'); $(document).off('click', '.show_index_dialog'); }); /** * @description

    Ajax scripts for table index page

    * * Actions ajaxified here: *
      *
    • Showing/hiding inputs depending on the index type chosen
    • *
    • create/edit/drop indexes
    • *
    */ AJAX.registerOnload('indexes.js', function () { // Re-initialize variables. primaryIndexes = []; uniqueIndexes = []; indexes = []; fulltextIndexes = []; spatialIndexes = []; // for table creation form var $engineSelector = $('.create_table_form select[name=tbl_storage_engine]'); if ($engineSelector.length) { Functions.hideShowConnection($engineSelector); } var $form = $('#index_frm'); if ($form.length > 0) { Functions.showIndexEditDialog($form); } $(document).on('click', '#save_index_frm', function (event) { event.preventDefault(); var $form = $('#index_frm'); var argsep = CommonParams.get('arg_separator'); var submitData = $form.serialize() + argsep + 'do_save_data=1' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; Functions.ajaxShowMessage(Messages.strProcessingRequest); AJAX.source = $form; $.post($form.attr('action'), submitData, AJAX.responseHandler); }); $(document).on('click', '#preview_index_frm', function (event) { event.preventDefault(); Functions.previewSql($('#index_frm')); }); $(document).on('change', '#select_index_choice', function (event) { event.preventDefault(); Indexes.checkIndexType(); Functions.checkIndexName('index_frm'); }); /** * Ajax Event handler for 'Drop Index' */ $(document).on('click', 'a.drop_primary_key_index_anchor.ajax', function (event) { event.preventDefault(); var $anchor = $(this); /** * @var $currRow Object containing reference to the current field's row */ var $currRow = $anchor.parents('tr'); /** @var Number of columns in the key */ var rows = $anchor.parents('td').attr('rowspan') || 1; /** @var Rows that should be hidden */ var $rowsToHide = $currRow; for (var i = 1, $lastRow = $currRow.next(); i < rows; i++, $lastRow = $lastRow.next()) { $rowsToHide = $rowsToHide.add($lastRow); } var question = Functions.escapeHtml( $currRow.children('td') .children('.drop_primary_key_index_msg') .val() ); Functions.confirmPreviewSql(question, $anchor.attr('href'), function (url) { var $msg = Functions.ajaxShowMessage(Messages.strDroppingPrimaryKeyIndex, false); var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); $.post(url, params, function (data) { if (typeof data !== 'undefined' && data.success === true) { Functions.ajaxRemoveMessage($msg); var $tableRef = $rowsToHide.closest('table'); if ($rowsToHide.length === $tableRef.find('tbody > tr').length) { // We are about to remove all rows from the table $tableRef.hide('medium', function () { $('div.no_indexes_defined').show('medium'); $rowsToHide.remove(); }); $tableRef.siblings('div.notice').hide('medium'); } else { // We are removing some of the rows only $rowsToHide.hide('medium', function () { $(this).remove(); }); } if ($('.result_query').length) { $('.result_query').remove(); } if (data.sql_query) { $('
    ') .html(data.sql_query) .prependTo('#structure_content'); Functions.highlightSql($('#page_content')); } CommonActions.refreshMain(false, function () { $('a.ajax[href^=#indexes]').trigger('click'); }); Navigation.reload(); } else { Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); } }); // end $.post() }); }); // end Drop Primary Key/Index /** *Ajax event handler for index edit **/ $(document).on('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax', function (event) { event.preventDefault(); var url; var title; if ($(this).find('a').length === 0) { // Add index var valid = Functions.checkFormElementInRange( $(this).closest('form')[0], 'added_fields', 'Column count has to be larger than zero.' ); if (! valid) { return; } url = $(this).closest('form').serialize(); title = Messages.strAddIndex; } else { // Edit index url = $(this).find('a').getPostData(); title = Messages.strEditIndex; } url += CommonParams.get('arg_separator') + 'ajax_request=true'; Functions.indexEditorDialog(url, title, function () { // refresh the page using ajax CommonActions.refreshMain(false, function () { $('a.ajax[href^=#indexes]').trigger('click'); }); }); }); /** * Ajax event handler for advanced index creation during table creation * and column addition. */ $('body').on('change', 'select[name*="field_key"]', function (e, showDialog) { var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; // Index of column on Table edit and create page. var colIndex = /\d+/.exec($(this).attr('name')); colIndex = colIndex[0]; // Choice of selected index. var indexChoice = /[a-z]+/.exec($(this).val()); indexChoice = indexChoice[0]; // Array containing corresponding indexes. var sourceArray = null; if (indexChoice === 'none') { Indexes.removeColumnFromIndex(colIndex); var id = 'index_name_' + '0' + '_8'; var $name = $('#' + id); if ($name.length === 0) { $name = $(''); $name.insertAfter($('select[name="field_key[' + '0' + ']"]')); } $name.html(''); return false; } // Select a source array. sourceArray = Indexes.getIndexArray(indexChoice); if (sourceArray === null) { return; } if (sourceArray.length === 0) { var index = { 'Key_name': (indexChoice === 'primary' ? 'PRIMARY' : ''), 'Index_choice': indexChoice.toUpperCase() }; Indexes.showAddIndexDialog(sourceArray, 0, [colIndex], colIndex, index, showDialogLocal); } else { if (indexChoice === 'primary') { var arrayIndex = 0; var sourceLength = sourceArray[arrayIndex].columns.length; var targetColumns = []; for (var i = 0; i < sourceLength; i++) { targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); } targetColumns.push(colIndex); Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, sourceArray[arrayIndex], showDialogLocal); } else { // If there are multiple columns selected for an index, show advanced dialog. Indexes.indexTypeSelectionDialog(sourceArray, indexChoice, colIndex); } } }); $(document).on('click', '.show_index_dialog', function (e) { e.preventDefault(); // Get index details. var previousIndex = $(this).prev('select') .attr('data-index') .split(','); var indexChoice = previousIndex[0]; var arrayIndex = previousIndex[1]; var sourceArray = Indexes.getIndexArray(indexChoice); if (sourceArray !== null) { var sourceLength = sourceArray[arrayIndex].columns.length; var targetColumns = []; for (var i = 0; i < sourceLength; i++) { targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); } Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, -1, sourceArray[arrayIndex]); } }); $('#index_frm').on('submit', function () { if (typeof(this.elements['index[Key_name]'].disabled) !== 'undefined') { this.elements['index[Key_name]'].disabled = false; } }); });