PageRenderTime 26ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/protected/components/MClientScript.php

http://web3cms.googlecode.com/
PHP | 246 lines | 229 code | 0 blank | 17 comment | 9 complexity | 28dea6476e237a596fa496be8ec5dd6c MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * MClientScript class file.
  4. * Manage client script - javascript / css code and files.
  5. */
  6. class MClientScript
  7. {
  8. /**
  9. * Register or return a piece of the javascript code.
  10. * Usually - some jquery code that is used in 2 or more pages.
  11. * @param string id of the script
  12. * @param array of the supplementary parameters
  13. * @param boolean whether script should be returned (not registered)
  14. * @return boolean whether script is recognized or string code of the script
  15. */
  16. public static function registerScript($id,$parameters=array(),$returnScript=false)
  17. {
  18. // parse the array of parameters
  19. $selector=isset($parameters['selector']) ? $parameters['selector'] : null;
  20. // recognize script based on the id parameter
  21. switch($id)
  22. {
  23. case 'actionButton':
  24. $scriptId=$id;
  25. $script=
  26. "jQuery(\".w3-pre-item-action-bar ul li a\").hover(
  27. function(){ jQuery(this).parent().addClass('ui-state-hover').removeClass('ui-state-default').removeClass('ui-state-active'); },
  28. function(){ jQuery(this).parent().addClass('ui-state-default').removeClass('ui-state-hover').removeClass('ui-state-active'); }
  29. )
  30. .mousedown(function(){ jQuery(this).parent().addClass('ui-state-active').removeClass('ui-state-default').removeClass('ui-state-hover'); })
  31. .mouseup(function(){ jQuery(this).parent().addClass('ui-state-default').removeClass('ui-state-active').removeClass('ui-state-hover'); });";
  32. break;
  33. case 'autocompleteOff':
  34. $scriptId=$id.'['.$selector.']';
  35. $script=
  36. "jQuery(\"".$selector."\").attr({'autocomplete': 'off'});";
  37. break;
  38. case 'datepicker':
  39. $scriptId=$id.'['.$selector.']';
  40. $script=
  41. "jQuery(\"".$selector."\").datepicker({
  42. dateFormat: 'yy-mm-dd'
  43. });";
  44. break;
  45. case 'focusOnFormFirstItem':
  46. $scriptId=$id;
  47. $script=
  48. "jQuery(\".w3-content form.w3-main-form .w3-input-text:first\").focus();
  49. jQuery(\".w3-content form.w3-main-form .ui-state-error:first\").focus();";
  50. break;
  51. case 'formButton':
  52. $scriptId=$id;
  53. $script=
  54. "jQuery(\".w3-form-row .w3-input-button\").hover(
  55. function(){ jQuery(this).addClass('ui-state-hover').removeClass('ui-state-default').removeClass('ui-state-active'); },
  56. function(){ jQuery(this).addClass('ui-state-default').removeClass('ui-state-hover').removeClass('ui-state-active'); }
  57. )
  58. .mousedown(function(){ jQuery(this).addClass('ui-state-active').removeClass('ui-state-default').removeClass('ui-state-hover'); })
  59. .mouseup(function(){ jQuery(this).addClass('ui-state-default').removeClass('ui-state-active').removeClass('ui-state-hover'); });";
  60. break;
  61. case 'gridClose':
  62. $scriptId=$id.'['.$selector.']';
  63. $script=
  64. "jQuery(\"".$selector."Wrapper\").find('a.w3-grid-titlebar-close').hover(
  65. function(){ jQuery(this).addClass('ui-state-hover').addClass('ui-corner-all'); },
  66. function(){ jQuery(this).removeClass('ui-state-hover').removeClass('ui-corner-all'); }
  67. )
  68. .mousedown(function(){ jQuery(this).addClass('ui-state-active'); })
  69. .mouseup(function(){ jQuery(this).removeClass('ui-state-active'); })
  70. .click(
  71. function(){
  72. if(jQuery(this).find('span.ui-icon').hasClass('ui-icon-circle-triangle-s')){
  73. jQuery(\"".$selector."\").slideDown('normal');
  74. jQuery(this).find('span.ui-icon').removeClass('ui-icon-circle-triangle-s').addClass('ui-icon-circle-triangle-n');
  75. jQuery(this).closest('.w3-grid-titlebar').removeClass('ui-corner-all');
  76. }
  77. else{
  78. jQuery(\"".$selector."\").slideUp('normal');
  79. jQuery(this).find('span.ui-icon').removeClass('ui-icon-circle-triangle-n').addClass('ui-icon-circle-triangle-s');
  80. jQuery(this).closest('.w3-grid-titlebar').removeClass('ui-corner-all').addClass('ui-corner-all');
  81. }
  82. }
  83. );";
  84. break;
  85. case 'gridLinkIcon':
  86. $controllerId=$parameters['controllerId'];
  87. $gridId=$parameters['gridId'];
  88. $scriptId=$id;
  89. $script=
  90. "jQuery(\"a.w3-ig.w3-link-icon span.ui-icon-trash\").click(
  91. function(){
  92. var recordId = jQuery(this).closest('tr').attr('id');
  93. if(recordId >= 1){
  94. var thisIcon = jQuery(this);
  95. var thisLink = jQuery(this).closest('a.w3-ig.w3-link-icon');
  96. var thisBox = jQuery(this).closest('tr');
  97. var dialogBoxId = Math.random()*100000000000000000000; //3 extra zeros
  98. var confirmBoxId = dialogBoxId*10;
  99. var confirmMessage = '".CHtml::encode(Yii::t('hint','Are you sure you want to delete the record number {id}? Deleted records may not be restored!',array(1)))."<strong>'+recordId+'</strong>".
  100. CHtml::encode(Yii::t('hint','Are you sure you want to delete the record number {id}? Deleted records may not be restored!',array(2)))."';
  101. jQuery('body').append('<div id=\"'+confirmBoxId+'\" class=\"'+confirmBoxId+'\" title=\"".Yii::t('hint','Please, confirm')."\"><span class=\"w3-icon-left ui-icon ui-icon-notice\"></span>'+confirmMessage+'</div>');
  102. jQuery('div#'+confirmBoxId+'.'+confirmBoxId).dialog({
  103. modal: true,
  104. buttons: {
  105. '".Yii::t('link','Cancel[form]')."': function(){jQuery(this).dialog('close');},
  106. '".Yii::t('link','Delete')."': function(){
  107. jQuery.ajax({
  108. 'type': 'POST',
  109. 'data': 'id='+recordId,
  110. 'dataType': 'json',
  111. 'beforeSend': function(){
  112. jQuery(thisIcon).removeClass('ui-icon-trash').removeClass('ui-icon-flag').removeClass('ui-icon-alert').addClass('ui-icon-flag');
  113. jQuery(thisLink).removeClass('ui-state-default').removeClass('ui-state-error').removeClass('ui-state-highlight').addClass('ui-state-default');
  114. jQuery(thisBox).addClass('ui-state-error');
  115. },
  116. 'success': function(data){
  117. if(data['status']=='success'){
  118. jQuery(thisIcon).removeClass('ui-icon-trash').removeClass('ui-icon-flag').removeClass('ui-icon-alert').addClass('ui-icon-trash');
  119. jQuery(thisLink).removeClass('ui-state-default').removeClass('ui-state-error').removeClass('ui-state-highlight').addClass('ui-state-highlight');
  120. jQuery(thisBox).find('td').animate({opacity: 0.1},2400);
  121. setTimeout(function(){jQuery('#".$gridId."').jqGrid('delRowData',recordId);},2400);
  122. jQuery('body').append('<div id=\"'+dialogBoxId+'\" class=\"'+dialogBoxId+'\" title=\"".Yii::t('t','Done')."\"><span class=\"w3-icon-left ui-icon ui-icon-circle-check\"></span>'+data['message']+'</div>');
  123. jQuery('div#'+dialogBoxId+'.'+dialogBoxId).dialog({position: ['right','top'], buttons: {'".Yii::t('t','Ok')."': function(){jQuery(this).dialog('close');}}});
  124. }
  125. else{
  126. jQuery(thisIcon).removeClass('ui-icon-trash').removeClass('ui-icon-flag').removeClass('ui-icon-alert').addClass('ui-icon-alert');
  127. jQuery(thisLink).removeClass('ui-state-default').removeClass('ui-state-error').removeClass('ui-state-highlight').addClass('ui-state-error');
  128. jQuery(thisBox).removeClass('ui-state-error');
  129. jQuery('body').append('<div id=\"'+dialogBoxId+'\" class=\"'+dialogBoxId+'\" title=\"".Yii::t('t','Error')."\"><span class=\"w3-icon-left ui-icon ui-icon-alert\"></span>'+data['message']+'</div>');
  130. jQuery('div#'+dialogBoxId+'.'+dialogBoxId).dialog({position: ['right','top'], buttons: {'".Yii::t('t','Ok')."': function(){jQuery(this).dialog('close');}}});
  131. }
  132. },
  133. 'error': function(){
  134. jQuery(thisIcon).removeClass('ui-icon-trash').removeClass('ui-icon-flag').removeClass('ui-icon-alert').addClass('ui-icon-alert');
  135. jQuery(thisLink).removeClass('ui-state-default').removeClass('ui-state-error').removeClass('ui-state-highlight').addClass('ui-state-error');
  136. jQuery(thisBox).removeClass('ui-state-error');
  137. var message = '".CHtml::encode(Yii::t('hint','An error has occured while deleting the record number {id}.',array(1)))."<strong>'+recordId+'</strong>".
  138. CHtml::encode(Yii::t('hint','An error has occured while deleting the record number {id}.',array(2)))."';
  139. jQuery('body').append('<div id=\"'+dialogBoxId+'\" class=\"'+dialogBoxId+'\" title=\"".Yii::t('t','Error')."\"><span class=\"w3-icon-left ui-icon ui-icon-alert\"></span>'+message+'</div>');
  140. jQuery('div#'+dialogBoxId+'.'+dialogBoxId).dialog({position: ['right','top'], buttons: {'".Yii::t('t','Ok')."': function(){jQuery(this).dialog('close');}}});
  141. },
  142. 'url': '". CHtml::normalizeUrl(array($controllerId.'/ajaxDelete')) ."',
  143. 'cache': false
  144. });
  145. jQuery(this).dialog('close');
  146. }
  147. }
  148. });
  149. }
  150. return false;
  151. }
  152. );";
  153. break;
  154. case 'hide':
  155. $scriptId=$id.'['.$selector.']';
  156. $script=
  157. "jQuery(\"".$selector."\").hide();";
  158. break;
  159. case 'linkIcon':
  160. $box=$parameters['box'];
  161. $scriptId=$id.'['.$box.']';
  162. $script=
  163. "jQuery(\"a.".$box.".w3-link-icon\").hover(
  164. function(){ jQuery(this).addClass('ui-state-hover').removeClass('ui-state-active').removeClass('w3-border-1px-transparent'); },
  165. function(){ jQuery(this).addClass('w3-border-1px-transparent').removeClass('ui-state-hover').removeClass('ui-state-active'); }
  166. )
  167. .mousedown(function(){ jQuery(this).addClass('w3-border-1px-transparent').addClass('ui-state-active').removeClass('ui-state-hover'); })
  168. .mouseup(function(){ jQuery(this).removeClass('ui-state-active').removeClass('ui-state-hover'); });";
  169. break;
  170. case 'linkListClose':
  171. $scriptId=$id;
  172. $script=
  173. "jQuery(\".w3-link-list-box a.w3-link-list.w3-titlebar-close\").hover(
  174. function(){ jQuery(this).addClass('ui-state-hover').addClass('ui-corner-all'); },
  175. function(){ jQuery(this).removeClass('ui-state-hover').removeClass('ui-corner-all'); }
  176. )
  177. .mousedown(function(){ jQuery(this).addClass('ui-state-active'); })
  178. .mouseup(function(){ jQuery(this).removeClass('ui-state-active'); })
  179. .click(
  180. function(){
  181. if(jQuery(this).find('span.ui-icon').hasClass('ui-icon-circle-triangle-s')){
  182. jQuery(this).closest('.w3-link-list.w3-titlebar').next('.w3-link-list').slideDown('normal');
  183. jQuery(this).find('span.ui-icon').removeClass('ui-icon-circle-triangle-s').addClass('ui-icon-circle-triangle-n');
  184. }
  185. else{
  186. jQuery(this).closest('.w3-link-list.w3-titlebar').next('.w3-link-list').slideUp('normal');
  187. jQuery(this).find('span.ui-icon').removeClass('ui-icon-circle-triangle-n').addClass('ui-icon-circle-triangle-s');
  188. }
  189. }
  190. );";
  191. break;
  192. case 'linkListHover':
  193. $scriptId=$id;
  194. $script=
  195. "jQuery(\".w3-link-list.w3-effects-on ul li a\").hover(
  196. function(){ jQuery(this).addClass('ui-state-hover').addClass('ui-corner-all'); },
  197. function(){ jQuery(this).removeClass('ui-state-hover').removeClass('ui-corner-all'); }
  198. )
  199. .mousedown(function(){ jQuery(this).addClass('ui-state-active'); })
  200. .mouseup(function(){ jQuery(this).removeClass('ui-state-active'); });";
  201. break;
  202. case 'mainMenu':
  203. $scriptId=$id;
  204. $script=
  205. "jQuery('.w3-header .w3-main-menu ul li a').hover(
  206. function(){ jQuery(this).parent().removeClass('ui-state-default').addClass('ui-state-hover'); },
  207. function(){ jQuery(this).parent().removeClass('ui-state-hover').addClass('ui-state-default'); }
  208. );";
  209. break;
  210. case 'screenNameSame':
  211. $scriptId=$id;
  212. $script=
  213. "if(jQuery(\"input#User_screenNameSame\").attr('checked'))
  214. jQuery(\"input#User_screenName\").hide();
  215. jQuery(\"input#User_screenNameSame\").click(
  216. function(){
  217. if(jQuery(this).attr('checked'))
  218. jQuery(\"input#User_screenName\").fadeOut('normal');
  219. else{
  220. jQuery(\"input#User_screenName\").fadeIn('normal');
  221. jQuery(\"input#User_screenName\").focus();
  222. }
  223. }
  224. );";
  225. break;
  226. default:
  227. $scriptId=null;
  228. break;
  229. }
  230. if($scriptId!==null)
  231. {
  232. if($returnScript)
  233. // return script code
  234. return $script;
  235. else
  236. {
  237. // register the script and return true
  238. Yii::app()->getClientScript()->registerScript($scriptId,$script);
  239. return true;
  240. }
  241. }
  242. else
  243. // script is not recognized
  244. return false;
  245. }
  246. }