One another thing we should be able to call extension and process
values that are returned from them - like arrays or booleans.
 
(if( $aiki->utils->safe_to_delete( ((username)) ) {
   (widget:delete_user( ((username)) )
})if)

and loops - we will need them too after all

<ul>
(for( $aiki->utils->sphinx_search( GET[query] ) as result {
   <li>
     <a href="((result->full_path))((result->filename))">
        <img src="((result->thumbnail))"/>
     </a>
   </li>
})for)
</ul>

And a note - a parser should be a parser - that create syntax tree and
parsed. and we need parser that use stack on evaluation and its
recursive, so you can do things like:

(for( $aiki->utils->fn() as id {
  (sql( SELECT * FROM table WHERE id = ((id)) {
     (if( $aiki->utls->fn( ((some_filed)) ) {
        // here id will be from first sql not from for loop
        (sql( SELECT * FROM other_table WHERE ((other_id)) = ((id)) {
           (if( $aiki->membership->username == '[username]' ||
                $aiki->membership->permission == 'librarian'{
              // here id will be from last sql not from for loop
              (widget:delete_row( "other_table", ((id)) )widget)
           })
        })sql)
     })if)
  })sql)
})for)

So we have so far - sql, for, if, widget, variables, 

We can get rid of sql if we allow sql inside for

(for( SELECT * FROM aiki_users {
   ((username)) (if( $aiki->membership->permission ==
'SystemGOD' { admin })if) })for)

with pagination we can add syntax to SQL

(for( SELECT * FROM ocal_files WITH pagination {
   (widget:thumbnail{ ((id)), ((full_path)), ((filename)) })widget)
})for)

Not every time user will do this kind of things but they should be able
to do this if they want to.

Any thoughts? I can implement this thing after Admin Panel.

On Wed, 14 Dec 2011 20:57:12 +0100
Jakub Jankiewicz <[email protected]> wrote:

> 
> 
> On Wed, 14 Dec 2011 11:16:12 -0600
> Jon Phillips <[email protected]> wrote:
> 
> > Did this get replaced in one of the new parsers?
> there is no new parser only - (script( )script) AFAIK
> > 
> > I don't like having all these different markup. Like oh, we have
> > (()) and then we have XML in the widgets.
> > 
> You mean rss? I think that should be deleted you can create rss just
> putting it into widgets why you need a parser for that (I did it on
> sharims). Instead of edit in place we could put (edit({ JSON })edit)
> it will be very easy to parse
> 
> json_decode($aiki->get_string_between($widget, '(edit(', ')edit)'));
> 
> 
> 
> (edit({
>   "table": "ocal_files",
>   "filed": "upload_published",
>   "select": {"Active": 1, "Hidden": 0},
>   "permissions": "librarian"
> })edit)
> 
> see AIKI Markup proposal below
> 
> 
> > We should stick with the (()) style at this point and replace silly
> > things like the custom XML where possible with the (()) style and
> > the (script()script) and using the aiki api, which should be more
> > firm anyway.
> > 
> > Agree?
> > 
> > And, then what about below?
> > 
> > On Sun, Sep 11, 2011 at 9:32 AM, Roger Martín <[email protected]>
> > wrote:
> > 
> > > Jakub proposal has great possibilities: we can suppress aiki parse
> > > and use only jakub's markup:
> > >
> > > widget before:
> > > (noloop_top(   <table> )noloop_top)
> > > ...tr td ((username))
> > > (noloop_bottom(...)
> > >
> > > widget after:
> > > table
> > > (the-loop(      // all wordpress developers knows the-loop
> > >  tr td [username]
> > > )
> > > /table
> > >
> > > In few words, we can replace (the-loop( by "(sql( ".
> > > NORMAL_SELECT, and then call parser.
> > > Some problems we must resolve:
> > > - pagination. perhaps  we can create (sql-paginated(...
> > > - our code uses regular expression, but now with nested markers we
> > > need rewrite all code.
> > > Does have somebody a idea for how making this?
> > >
> > > If we could do that we can unify internal parser, sql parser and
> > > php parser in new super-parser.
> > >
> > > Roger
> > >
> > >
> > >
> > > _______________________________________________
> > > Mailing list: https://launchpad.net/~aikiframework-devel
> > > Post to     : [email protected]
> > > Unsubscribe : https://launchpad.net/~aikiframework-devel
> > > More help   : https://help.launchpad.net/ListHelp
> > >
> > >
> > 
> > 
> 
> ------------------------------
> :: AIKI Markup PROPOSALS
> ------------------------------
> 
> (if( $aiki->permission == 'SystemGOD' {
>   (edit({
>     "table": "ocal_files",
>     "filed": "upload_published",
>     "select": {"Active": 1, "Hidden": 0}
>     "pkey": ((id))  // right now id is taken from SQL of the widget
>   })edit)           // every thing should be transparent
> })if)
> 
> 
> ------------------------------
> :: Example - SQL and if
> ------------------------------
> 
> <table>
>    <tr>
>      <th>id</th>
>      <th>username</th>
>      (if( $aiki->membership->permissions == 'SystemGOD' {
>      <th>delete</th>
>      })if)
>    </tr>
>    (sql( SELECT * FROM aiki_users {
>    <tr>
>      <td>[[id]]</td>
>      <td>[[username]]</td>
>      (if( $aiki->membership->permissions == 'SystemGOD' {
>      <td><button class="delete">X</button></td>
>      })if)
>    </tr>
>    })sql)
> </table>
> <script>
> $(function() {
>    $('button.delete').live('click', function() {
>       var td = $(this).parent();
>       $.get('/delete/' td.prev().html(), function(data) {
>         if (data) {
>           td.parent().remove();
>         }
>       });
>    });
> });
> </script>
> 
> ------------------------------
> :: noloop noloop_bottom
> ------------------------------
> SQL: SELECT * FROM aiki_widgets
> 
> <table>
>   <tr>
>     <th>id</th>
>     <th>widget_name</th>
>   </tr>
> (loop(
>   <tr>
>     <td>((id))</td>
>     <td>((widget_name))</td>
>   </tr>
> )loop)
> </table>
> 
> And an idea: we could remove SQL from widget and only use inline SQL
> so there will be no need to old [-[username]-] - and new which
> look better [[username]]
> 
> <table>
>   <tr>
>     <th>id</th>
>     <th>widget_name</th>
>   </tr>
> (sql( SELECT * FROM aiki_widgets {
>   <tr>
>     <td>((id))</td>
>     <td>((widget_name))</td>
>   </tr>
> })sql)
> </table>
> 
> ------------------------------
> :: Widgets need arguments 
> ------------------------------
> 
> (sql( SELECT * FROM ocal_files WHERE user_name = '((url[1]))' LIMIT
> 10 {
> 
>   (widget:image_thumbnail( ((url[1])), "((full_path))",
>   "((filename))" )widget)
> 
> })sql)
> 
> and in widget image-thumbnail: 
> 
> <div>
>   <a href="((args[1]))/((args[2]))">
>     <img src="/image/20px/svg_to_png/(script( replace("svg", "png",
> "((args[2]))"); )script)"/> </a>
>   (sql( SELECT num_downloads FROM ocal_files WHERE id = ((args[0])) {
>   <div>Downloaded ((num_downloads)) times</div> // this is just an
> example, it can be pass as argument })sql)
> </div>
> 
> Notes:
> 
>       [1] we should alway use quotes
>       [2] ((url[1])) instead of (!(1)!) - it will be an array from
> url [3] we can also have comments
> 
> 
> ------------------------------
> :: Final Code
> ------------------------------
> 
> <table>
>    <tr>
>      <th>id</th>
>      <th>username</th>
>      (if( $aiki->membership->permissions == 'SystemGOD' {
>        <th>delete</th>
>      }else{
>        <th><th>
>      })if)
> 
>    </tr>
>    (sql( SELECT * FROM aiki_users {
>      <tr>
>        <td>((id))</td>
>        <td>((username))</td>
>        (if( $aiki->membership->permissions == 'SystemGOD' ||
>    $aiki->membership->username == 
>    "((username))" { (widget:delete_user( ((id)) )widget)
>        })if)
>      </tr>
>    }else{ // no result for query
>      <tr>
>        <td colspan="2">Sory no users</td>
>      </tr>
>    })sql)
> </table>
> 
> ------------------------------
> :: Syntax Summary
> ------------------------------
> 
> with parameters:
> 
> (name( parameters {
>    <html> + syntax
> })name)
> 
> without parameters:
> 
> (name(
>    <html> + syntax
> )name)
> 
> 
> database values:
> 
> ((field))
> 
> predefined arrays:
> 
> ((url[1]))
> ((args[1]))
> 
> 

-- 
Jakub Jankiewicz
twitter: @jcubic
www: http://jcubic.pl

_______________________________________________
Mailing list: https://launchpad.net/~aikiframework-devel
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~aikiframework-devel
More help   : https://help.launchpad.net/ListHelp

Reply via email to